为什么进入不了第二级中断?

2019-07-15 21:38发布

#include<reg51.h>
#include<intrins.h>
sbit P2_7=P2^7;
void main()
{
TMOD=0x51;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-20)/256;
TL1=(65536-20)%256;
P1=0xFE;
PT1=1;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
  P2_7=1;
}
}
void tiME1_ISR() interrupt 1
{
EA=0;
P2_7=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
}
void TIME2_ISR() interrupt 3
{
EA=0;
P1=_crol_(P1,1);
TH1=(65536-20)/256;
TL1=(65536-20)%256;
EA=0;
}
为什么第二级中断只能进入一次?
来自小组: 朱海生
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
sdyyxdjh
1楼-- · 2019-07-15 23:31
lzbxh123
2楼-- · 2019-07-16 01:59
因为你的C/T位全选的计数器模式,中断3中第二个EA还是0,程序修改如下:
#include<reg51.h>
#include<intrins.h>
sbit P2_7=P2^7;
void main()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-20)/256;
TL1=(65536-20)%256;
P1=0xFE;
//PT1=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
EA=1;
while(1)
{
  P2_7=0;
}
}
void TIME1_ISR() interrupt 1
{
EA=0;
P2_7=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
}
void TIME2_ISR() interrupt 3
{
EA=0;
P1=_crol_(P1,1);
TH1=(65536-20)/256;
TL1=(65536-20)%256;
EA=1;
}
电子小白鼠
3楼-- · 2019-07-16 02:22
lzbxh123 发表于 2013-11-20 21:59
因为你的C/T位全选的计数器模式,中断3中第二个EA还是0,程序修改如下:
#include
#include

我觉得TMOD=0x51;不能等于0x11;TMOD=0x11后两个都工作在定时模式,应该T0在定时模式,T1在计数模式,我的程序问题出现在T1的中断程序中EA=0;改过之后调试可以得到我想要的现象。最后谢谢你的帮助。
lzbxh123
4楼-- · 2019-07-16 06:30
电子小白鼠 发表于 2013-11-21 15:58
我觉得TMOD=0x51;不能等于0x11;TMOD=0x11后两个都工作在定时模式,应该T0在定时模式,T1在计数模式,我 ...

好吧,我还以为你两个都想中断控制。。。
zhu9611
5楼-- · 2019-07-16 09:22
 精彩回答 2  元偷偷看……

一周热门 更多>