单片机程序定时器中断问题,先是第三个灯亮三秒。接着灭了,第一个灯闪烁五次。第三个灯亮三秒暗三秒循环
答案:3 悬赏:70
解决时间 2021-11-09 01:30
- 提问者网友:萌萌小主
- 2021-11-08 03:06
#include
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
sbit d2=P1^2;
uchar tt;
void delay(uint z);
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
d1=1;
d2=0;
delay(3000) ;
EA=1;//开总中断
ET0=1;
TR0=1;
while(1)
{
if(tt==5)
tt=0;
d2=1;
delay(3000) ;
d2=0;
delay(3000) ;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1盯海驰剿佻济宠汐触搂10;y>0;y--);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
d1=0;
delay(100);
d1=1;
delay(100);
}
最佳答案
- 二级知识专家网友:邪性洒脱
- 2021-11-08 04:38
下面改成
if(tt==5)
TR0=0;
Es=0;
tt=0;
d2=1;
delay(3000) ;
d2=0;
delay(3000) ;
TR0=1;
Es=1;}
if(tt==5)
TR0=0;
Es=0;
tt=0;
d2=1;
delay(3000) ;
d2=0;
delay(3000) ;
TR0=1;
Es=1;}
全部回答
- 1楼网友:摧毁过往
- 2021-11-08 06:59
中断子函数有问题
这样改
void timer0() interrupt 1
{
th0=(65536-100)/256; //原定时太短了吧
tl0=(65536-100)%256; //原定时太短了吧
t0++;
if(t0<=dc)
{
p1=0;
}
else
{
p1=0xff;
}
if(t0==200)
{
t0=0;
if(flag==0)
{
dc++;
if(dc==200)flag=1; //这是赋值语言,一个等号
}
else if(flag==1) //这应该是else if
{
dc--;
if(dc==0) flag=0;//这是赋值语言,一个等号
}
}
}
- 2楼网友:迷人小乖乖
- 2021-11-08 05:55
#include
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
sbit d2=P1^2;
uchar tt=0;
void delay(uint z);
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
d1=1;
d2=0;
delay(3000) ;
d1=0;
d2=0;
EA=1;//开总中断
ET0=1;
TR0=1;
while(1)
{
if(tt==5)
{
d2=1;
delay(3000) ;
d2=0;
delay(3000) ;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
d1=0;
delay(100);
d1=1;
delay(100);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息