外部中断内部有定时器中断怎么没有执行,请帮忙看看
时间:10-02
整理:3721RD
点击:
外部中断内部有定时器中断怎么没有执行,请帮忙看看
外部中断1执行后,到定时器0中断的时候不能执行,为什么呢?
刚开始写软件,求帮助
格式怎么考进来都乱了。
#include "reg52.h"#define uint unsigned int
#define uchar unsigned char
uchar count;uint num;
sbit east_red = P2^0;
sbit east_green = P2^1;
sbit sou_red = P2^6;
sbit sou_green = P2^7;
sbit d1 = P2^4;
sbit sp=P1^5;
void delayms(uint);
void main(){
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
EX1=1;
ET0=1;
TR0=1;
east_red=0;
east_green=0;
sou_red=0;
sou_green=0;
delayms(1000);
while(1)
{
east_red=0;
east_green=1;
sou_red=1;
sou_green=0;
delayms(200);
east_red=1;
east_green=0;
sou_red=0;
sou_green=1;
delayms(200);
}
}
void delayms(uint i) //延时函数
{
uint j;
for(;i!=0;i--)
{
for(j=112;j!=0;j--);
}
}
void external1() interrupt 2 //外部中断1
{
d1=0;
delayms(1000);
d1=1;
delayms(1000);
sp=0;
delayms(1000);
sp=1;
num=0;
//这段程序没有运行。
if(num==20) //外部中断执行了
{ //但是定时器中断没有运行
num=0;
count=0xfe;
P2=count;
sp=0;
delayms(1000);
sp=1;
delayms(1000);
}
}
void time0() interrupt 1 //定时器0——50ms中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
之前一直做硬件,现在想转软件,遇到好多问题呀,求帮助
num=0;
//这段程序没有运行。
if(num==20)
前面那个num = 0清零语句删掉。刚清零 哪有那么快到20啊。就算是TIM0的中断优先,也没有一条判断语句的时间超过20吧。你把51看得太慢了 呵呵。
不信,你可以把 if(num == 20) 改成
while(num != 20)
{
;
}
让CPU卡死在这里一段时间,让TIM0中断个20次。一样能进。
谢了,确实是这样的