最近学习做个小系统,用了T2做了个系统时钟,发现有个问题,想不明白。<br /><br />下面的程序是这个意思:在P1口上接了8个LED,每秒钟依次亮一个;时钟是5ms,m是计数,200个系统时钟后点一个灯。<br /><br />现在的问题是:在系统中断里对m的操作没有效果,AAAA注释下的是我为了判断有没有进入中断加的,以前是BBBB段代码,用AAAA仿真的时候灯亮,也很暗(因为是5ms一次,看不出来,所以都亮,都很暗,这个结果应该是对的吧?),但用BBBB段代码仿真的时候就什么反映都没了,想不明白<br /><br />#include <system.h><br /><br />unsigned char m;<br /><br />void SystemTimer(void) interrupt 5 //5mS<br />{ <br /> TF2=0; <br /><br /> if(P1==0x7f) //=====================AAAA<br /> P1=0xfe;<br /> else<br /> {P1<<=1;P1+=1;} <br /> <br />/* m--; //=====================BBBB<br /><br />if(m==0) // 1 s<br />{<br /> m=200;<br /> <br /> if(P1==0x7f)<br /> P1=0xfe;<br /> else<br /> {P1<<=1;P1+=1;} <br />}*/<br />}<br /><br />void SystemInit(void)<br />{<br /> IP=0x20; // IP: 定时器 2中断优先 <br /> IE=0x20; // IE: 开定时器 2中断 <br /> EA=1;<br /> T2CON=0x00; <br /> <br /> timeload=TIMEdata(50); //定时器重载值<br /><br /> TH2=timeload/256;<br /> TL2=timeload%256; <br /> <br /> TR2=1;<br /><br /> RCAP2H=timeload/256;<br /> RCAP2L=timeload%256;<br /><br /> m=200;<br />}<br />void main(void)<br />{<br /> P1=0xfe;<br /><br /> SystemInit();<br /><br /> while(1)<br /> { } <br />} |
|