51单片机,我的外部中断执行后为什么回不了原来的主程序,主程序用定时器执行流水灯,外部中断闪烁
#include<reg51.h>#include<intrins.h>#defineucharunsignedcharucharj;voidDelay(){unsign...
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar j;
void Delay()
{
unsigned char a,b,c;
for(a=0;a<250;a++)
for(b=0;b<3;b++)
for(c=0;c<220;c++);
}
void Initial()
{
EA=1;
EX0=1;
ET0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xaf;
TR0=1;
PX0=1;
P1=0;
}
void main()
{
Initial();
P1=0xfe;
while(1)
{
if(j==20)
{
j=0;
P1=_crol_(P1,1);
}
}
}
void timer0() interrupt 0
{
P1=0;
Delay();
P1=0xff;
Delay();
}
void timer1() interrupt 1
{
TH0=0x3c;
TL0=0xaf;
j++;
} 展开
#include<intrins.h>
#define uchar unsigned char
uchar j;
void Delay()
{
unsigned char a,b,c;
for(a=0;a<250;a++)
for(b=0;b<3;b++)
for(c=0;c<220;c++);
}
void Initial()
{
EA=1;
EX0=1;
ET0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xaf;
TR0=1;
PX0=1;
P1=0;
}
void main()
{
Initial();
P1=0xfe;
while(1)
{
if(j==20)
{
j=0;
P1=_crol_(P1,1);
}
}
}
void timer0() interrupt 0
{
P1=0;
Delay();
P1=0xff;
Delay();
}
void timer1() interrupt 1
{
TH0=0x3c;
TL0=0xaf;
j++;
} 展开
1个回答
展开全部
由于外部中断改变了P1的值,使循环P1=_crol_(P1,1);的初值改变,中断后P1=0xff,流水灯循环效果没有了。考虑增加1全局变量k,让k循环,再赋值给p1
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar j,k; //增加k保护P1状态
void Delay()
{
unsigned char a,b,c;
for(a=0;a<250;a++)
for(b=0;b<3;b++)
for(c=0;c<220;c++);
}
void Initial()
{
EA=1;
EX0=1;
ET0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xaf;
TR0=1;
PX0=1;
P1=0;
}
void main()
{
Initial();
k=0xfe;P1=k;
while(1)
{
if(j==20)
{
j=0;
k=_crol_(k,1); P1=k;
}
}
}
void timer0() interrupt 0
{
P1=0;
Delay();
P1=0xff;
Delay();
}
void timer1() interrupt 1
{
TH0=0x3c;
TL0=0xaf;
j++;
}
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar j,k; //增加k保护P1状态
void Delay()
{
unsigned char a,b,c;
for(a=0;a<250;a++)
for(b=0;b<3;b++)
for(c=0;c<220;c++);
}
void Initial()
{
EA=1;
EX0=1;
ET0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xaf;
TR0=1;
PX0=1;
P1=0;
}
void main()
{
Initial();
k=0xfe;P1=k;
while(1)
{
if(j==20)
{
j=0;
k=_crol_(k,1); P1=k;
}
}
}
void timer0() interrupt 0
{
P1=0;
Delay();
P1=0xff;
Delay();
}
void timer1() interrupt 1
{
TH0=0x3c;
TL0=0xaf;
j++;
}
北京晶宇兴科技
2023-06-13 广告
2023-06-13 广告
STM32系列的微控制器可以使用多种外部时钟源,包括但不限于以下几种:1. 晶体振荡器(Crystal Oscillator):晶体振荡器是一种稳定的时钟源,具有较高的精度和稳定性。STM32系列的微控制器通常内置了一个高精度的晶体振荡器,...
点击进入详情页
本回答由北京晶宇兴科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询