想不通的问题,关于复位与重新通电不同结果的一点疑问
双中断应用需要注意什么?硬件中的reset键按下和断电再通电有什么不同?
我设计的电路首先是数码从0到15显示(小数点做为进位标志,即14时小数点亮,同时显示数字4),用定时中断实现记数,显示完成后显示0,并关闭计时中断,再打开外中断并等待下步的外中断信号,进而进行下步操作。
程序如下:
#include <reg51.h>
unsigned int flag1=0; //定时中断记数
bit flag=0;
code unsigned char PP[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12};
//共阳显示
void delay(unsigned char k) //延时
{
while(--k);
}
void service_int1() interrupt 2 using 2//外中断一
{
flag=1;
} // ……
void inter() interrupt 1 using 1 // 定时0中断
{
flag1++;
}
void main( )
{
IP=0x02; //
IE=0x82; //
TMOD=0x02;
TH0=TL0=(256-250);
ET0=1;
TR0=1; //0.5ms每周期,一秒2000次
for(;;)
{
if(flag1> =16000) break; //按序显示完成,并跳出for循环
P1=PP[flag1/2000] ;//显示
delay(25)
}
P1=PP[0]; //显示0
IP=0x05;
IE=0x85; //外中断打开,并关掉计时中断0
do {
//…………外中断相关操作~
}while(1);
}
程序调试结果硬件检测,通电后数码管显示从0到15,然后显示为0进入等待状态……如果通电后按reset键,则数码管从新显示,但是显示到15后继续从0到15循环显示,感觉是还在记数中断控制中,不明白为什么会这样,是不是双中断时有什么问题忽略了?我可是设置了中断优先级了……另外不明白为什么按reset键会有此问题出现,是不是内部有什么数据未复位~?还有一个偶然现象是有时候通电也会出现上述的反复循环,我数码管是直接接的P1口,共阳极与5V电源间为一个100 欧的电阻。这样设计是不是有什么妥?
发表时间:2005年5月28日10:21:51