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