单片机为什么按下外部中断后程序仍会进行,只是比原来慢了
答案:2 悬赏:80 手机版
解决时间 2021-01-03 08:55
- 提问者网友:椧運幽默
- 2021-01-02 11:53
#include
#define uint unsigned int
#define uchar unsigned char
uchar num;
uchar code table[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
void delay(uint x);
sbit jdq=P3^5;//继电器的IO口
void main()
{
EA=1;
EX0=1;
while(1)
{
for(num=0;num<8;num++)
{
jdq=1;
P2=table[num];
delay(1000);
}
}
}
void delay(uint x)
{
uint y;
for(;x>1;x--)
for(y=123;y>1;y--);
}
void zd0() interrupt 0
{
jdq=0;
}
不按外部中断时流水灯大约1S切换一次,按下中断后约8S切换一次
最佳答案
- 五星知识达人网友:不如潦草
- 2021-01-02 12:06
您的延时程序delay,是按照循环的次数来控制等待的时间的,
如此,这个程序一直反复的被打断,当然它的执行时间就不对了,就比没有打断的时候慢多了。
这种靠循环次数来延时的程序的延时算法,只适用于“单线的”流程。也就是说,没有考虑系统中还有别的同时要做的工作。一旦有其他操作打断他,延时就不对了。
所以,凡是多个任务穿插执行的程序中,通常不用这种延迟子程序来掌握时间。
而是用定时器中断来协调各项任务的进行,适当掌控各个动作的间隔时间。
例如,您可以利用一个定时器,设定1秒钟中断一次,把你的主循环中每秒要做的操作编入到这个中断服务程序中去。而主程序中,初始化并开中断以后只要反复做空操作就行了(你也可以在主程序这里编入一些其他的不讲究定时的重复操作,例如自检、喂看门狗等)。
如果你的定时器因故做不到每秒中断一次,只能做到更短,那么可以利用“软分频”来实现每秒一次的操作。例如你可以把中断周期定成10ms一次,设一个计数变量,在中断服务程序中每次给这个变量加1,加到100时就执行上述该在1秒钟时执行的操作,并将这个计数变量清零以便从头来。
全部回答
- 1楼网友:由着我着迷
- 2021-01-02 12:48
bitsign=0;
voidmain()
{
ea=1;//开总中断
ex0=1;//允许外部中断0中断
it0=0;//设置为电平触发方式
while(1)
{
if(sign==0)//sign=0;显示sign=1;程序进不来不显示
{
//数码管显示
}
}
}
voidww()interrupt0
{
sign=~sign;
}
我只是简写一下,大概就是这个意思:第一次按下数码管显示,再按一下数码管不显示
希望对你有所帮助!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯