微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么进入不了第二级中断?

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

时间:10-02 整理:3721RD 点击:
#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;
}
为什么第二级中断只能进入一次?
来自小组: 朱海生

因为你的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;
}

我觉得TMOD=0x51;不能等于0x11;TMOD=0x11后两个都工作在定时模式,应该T0在定时模式,T1在计数模式,我的程序问题出现在T1的中断程序中EA=0;改过之后调试可以得到我想要的现象。最后谢谢你的帮助。

好吧,我还以为你两个都想中断控制。

                                                   

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top