在KEIL中用了SWITCH函数,在中断函数中会出现TH与TL能自加,但下面的函数不能运行的情况。

2024年11月23日 05:27
有2个网友回答
网友(1):

switch(time)
{
case 1:P2=0xb2;
case 2:P2=0xe7;
case 3:P2=0xdb;
case 4:P2=0x7e;
case 5:P2=0x00;
case 6:P2=0xff;
case 7:P2=0x00;
case 8:P2=0xff;
case 9:{time=0;break;}
}
这些case语句后面都没有break,那么每当执行switch语句就会把所有case语句都执行完,然后在case 9跳出switch语句,并把time清零,这个过程是很短的,而你初始化定时器0时没有给TH0和TL0赋初值,那么就是为0,TH0和TL0要递加到FFFF才产生中断,如果晶振为12M的话,那么这个时间就是65535US,当执行定时器中断的时候才把time自加,但是每当一返回主程序执行到case 9时就又把time清零了,这个过程是相当短暂的,远比65535us要小的多,所以time每次查看时基本上都是为零,除非用仿真器在switch函数里面设断点查看time值,才能看到time为1的现象

网友(2):

出现警告的函数都声明一下,就OK了。