都是main()函数的循环执行惹的祸题
时间:11-29
来源:互联网
点击:
就在今天好好的一个程序,语发基本上都没有任何错误,和官方的资料都对照了也没有什么问题但是原本好好的程序就是定时器打不开了。为什么呢?今天又大概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,所以导致定时器一直无法溢出去执行定时器中断函数。相信我说道这里单价应该明白怎么回事了吧!
以本人所犯之错,希望大家引以为戒!!!
main循环执 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)