就在今日好好的一个程序,语发基本上都没有任何过错,和官方的材料都对照了也没有什么问题可是本来好好的程序便是守时器打不开了。为什么呢?今日又大约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,所以导致守时器一向无法溢出去履行守时器中止函数。信任我说道这儿单价应该理解怎么回事了吧!
以自己所犯之错,期望我们引以为戒!!!