//timer2中断处理 void TimerHandle() interrupt 5 using 1 { TF2 = 0;
if (check != 0) check --; }
//串口发送 void _TRS(unsigned char *DataSend) { while(!TI0); TI0=0; SBUF0 = *DataSend; }
//--------------------------- void main() { unsigned char ok = 0xAA; check =50;
while(1){
//_TRS(&check); if (check == 0) { check =50; _TRS(&ok); } } } 将代码简化成这个样子,初始化串口跟定时器的就省了,
昨天出问题的原因竟然是在TimerHandle()函数里放进了串口调试程序_TRS().
不过,这还不是根本的原因,真正的原因是打开了串口中断(我用中断接收),
出现了以下的现象: 按照上面的代码根本就没有反应,等多长时间都无法把ok的值给我打出来,不过要是在主函数里跟踪着check,就是打开注释掉那句,似乎程序又能正常运行,随着不断减少的check,然后有一个ok的值.
真正解决了问题的方法是关掉ES,那么一切都是正常的.
非常的好奇,到底串口中断跟timer2中断有什么瓜葛呢?串口优先级比timer2要高,没有发送接收,按理说timer2应该乖乖的工作啊,怎么解释让串口"引导"一下,又能顺利产生timer2中断呢?糊涂极了.......
|