永发信息网

单片机为什么按下外部中断后程序仍会进行,只是比原来慢了

答案:2  悬赏:80  手机版
解决时间 2021-01-03 08:55
#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切换一次
最佳答案
您的延时程序delay,是按照循环的次数来控制等待的时间的,
如此,这个程序一直反复的被打断,当然它的执行时间就不对了,就比没有打断的时候慢多了。

这种靠循环次数来延时的程序的延时算法,只适用于“单线的”流程。也就是说,没有考虑系统中还有别的同时要做的工作。一旦有其他操作打断他,延时就不对了。

所以,凡是多个任务穿插执行的程序中,通常不用这种延迟子程序来掌握时间。
而是用定时器中断来协调各项任务的进行,适当掌控各个动作的间隔时间。

例如,您可以利用一个定时器,设定1秒钟中断一次,把你的主循环中每秒要做的操作编入到这个中断服务程序中去。而主程序中,初始化并开中断以后只要反复做空操作就行了(你也可以在主程序这里编入一些其他的不讲究定时的重复操作,例如自检、喂看门狗等)。

如果你的定时器因故做不到每秒中断一次,只能做到更短,那么可以利用“软分频”来实现每秒一次的操作。例如你可以把中断周期定成10ms一次,设一个计数变量,在中断服务程序中每次给这个变量加1,加到100时就执行上述该在1秒钟时执行的操作,并将这个计数变量清零以便从头来。
全部回答
bitsign=0; voidmain() { ea=1;//开总中断 ex0=1;//允许外部中断0中断 it0=0;//设置为电平触发方式 while(1) { if(sign==0)//sign=0;显示sign=1;程序进不来不显示 { //数码管显示 } } } voidww()interrupt0 { sign=~sign; } 我只是简写一下,大概就是这个意思:第一次按下数码管显示,再按一下数码管不显示 希望对你有所帮助!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
手机用otg.线连接u盘看电影会卡吗?
如图,DE∥AB,若∠ACD=55°,则∠A等于A.35
单选题法兰西第一帝国覆亡的根本原因是A.被推
什么观赏鱼能杂交
平面镜成像是由于光的________而形成的,平面
我想开一家五金店应该如何经营才能赚钱?
没有发酵粉怎么用酸奶机做酸奶?
可莱丝面膜上没有乘以3是不是假的
100mL0.3mol·L-1Na2SO4溶液和50mL0.2mol
下列物质中,分子比较大的是A.水B.无机盐C.氧
下列计算正确的是A.x4?x4=x16B.(a3)2?a4=a9
单选题TodayMissYangisfeeling_________go
楚留香基金买哪个划算
现在做什么工作赚钱最快,急用呀
通用汽车的多样性为何击败福特汽车的单一性
推荐资讯
如图所示,质量为m的物体放在光滑水平面上,
这是本人相片,请问是帅一点点还是有点丑,希
后京加油站地址在什么地方,想过去办事
nuforce primo8和hem8的区别
装饰房子业主老是说给方案从微信发给他看怎么
成都到渠县琅琊镇,怎么去最省时间?
希腊神话中三大美女蛇的名字?它们有什么功能
惠阳区广州顺风办公用具惠州惠阳分公司地址有
单选题最早通过实验得出空气是由氧气和氮气组
关于火车票,现在我能买22号九江到北京的学生
忆捷U盘自带的EA-Key3.1加密软件怎样卸载
生日晚上能吃面条吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?