找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5888|回复: 0
打印 上一主题 下一主题
收起左侧

都是main()函数的循环执行惹的祸题

[复制链接]
跳转到指定楼层
楼主
ID:50962 发表于 2013-6-17 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
都是main()函数的循环执行惹的祸
         就在今天好好的一个程序,语发基本上都没有任何错误,和官方的资料都对照了也没有什么问题但是原本好好的程序就是定时器打不开了。为什么呢?今天又大概6个小时的时间都浪费在这个不起眼的自己曾经不知道也没注意的问题上。
         首先我跟大家说下我的一下代码需要实现的功能,非常简单就是在定时其溢出也就是进入中断之后单片机通过串口给我的上位机发送一个验证字符H55,但是调试了一个下午就是没法实现。大家先看看以下程序!
void main(void)
{
         main_init();      
}
//-----------------主函数初始化------------------------------------
void main_init(void)
{
         EA=1;//开总中断
         uart_init();
         timer0_init();
}
//-------------------串行口中断--------------------------
void uart_rec() interrupt 4
{
         if(RI)
         {
                   RI=0;
                   Uart_RD=SBUF;
                   uart_send(Uart_RD);
         }
}
//------------------定时器0初始化函数----------------------------
void timer0_init(void)
{
         EA=1;
         ET0  =1    ;
         TR0  =1    ;
         AUXR|=0X80;
         TMOD|=0x01;
         TH0   =0x00;
         TL0    =0x00;   
}
//------------------定时器0中断服务函数----------------------------
void timer0() interrupt 1
{
         TH0  =0xff;
         TL0   =0x00;
         uart_send(0x55);     
}
相信大家程序也看完了,我敢保证单片机C编程基础比较差的肯定找不这问题的所在!其实整个程序的问题主要是出在主函数没有一个while(1);死循环而程序一直循环执行主函数循环一次的时间小于定时器的定时时间00~65536,故而每次循环都会给定时器的高低八位重新初始化赋值h00、h00,所以导致定时器一直无法溢出去执行定时器中断函数。相信我说道这里单价应该明白怎么回事了吧!
以本人所犯之错,希望大家引以为戒!!!

评分

参与人数 2黑币 +2 收起 理由
dfdfuhuh + 1 很给力!
ANDATE + 1 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表