单片机外部中断程序从启动到结束的运行顺序。

我的理解:单片机每执行一条主程序指令都检查一次中断标志,中断标志为1则运行一次中断程序,中断结束后跳出至主程序,下来该如何做?1再运行下一条主程序指令,然后检查中断标志。... 我的理解:单片机每执行一条主程序指令都检查一次中断标志,中断标志为1则运行一次中断程序,中断结束后跳出至主程序,下来该如何做? 1再运行下一条主程序指令,然后检查中断标志。 2直接检查中断标志,再次进入中断。
以下附上程序及说明,和我在其中碰到的逻辑问题。
#include <reg52.h>
#define uchar unsigned char;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit led1=P1^2;
sbit led2=P3^4;
sbit led3=P3^2;
void delay();
void main()
{
int num;
EA=1;//打开总开关
EX0=1;//打开外部中断0
led3=0;//外部中断默认低电平触发,此时我赋值给INT0一个低电平0
P1=0;——————————————
while(1)
{
for(num=0;num<16;num++) /两平行线之间是数码管程序,可以不管
{
P2=table[num];
delay();
}————————————————
}
}
void delay() //延时程序
{
int i,j;
for(i=0;i<200;i++)
for(j=0;j<200;j++);
}

void exter0() interrupt 0
{
led2=0; //蜂鸣器响
}
在跑上述程序时我发现了几个问题;
1;当中断程序为
void exter0() interrupt 0
{
led2=0; //蜂鸣器响
}
时,蜂鸣器一边响,数码管一边流水灯,即中断运行时主程序也在运行。
2;将中断程序改为
void exter0() interrupt 0
{
int i,j;
led2=0; //蜂鸣器响
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
时蜂鸣器响,数码管静止不动。
3;上述主程序视吧INT0赋值为0使中断触发的,现在我们改为直接用IE0触发
void main()
{
int num;
EA=1;//打开总开关
EX0=1;//打开外部中断0
IE0=1;//IE0为中断标志位,直接给它赋值为1
P1=0;——————————————
while(1)
{
for(num=0;num<16;num++) /两平行线之间是数码管程序,可以不管
{
P2=table[num];
delay();
}————————————————
}
此时发生了一个对比现象,直接给INT0赋值0和给IE0直接赋值1时,主程序都依然运行,不过IE0明显快于INT0,中断程序有延时则不动。

对比1和2;1中断运行完回来后,如果运行下一条主程序再检测中断标志,那么无论中断程序延时与否,1和2都应该伴有流水灯运行。 2中断运行回来后,如果立即检测中断。那么无论什么情况,程序应该一直处于中断状态。
对于以上两种状态,我只能这样猜测;1单片机运检测中断时同时可以运行主程序. 2单片机运行中断和检测中断的时间加起来应该是一个定值。
当以上两个条件同时成立时;1的中断运行时间极短,相应的他的中断检测时间就长,在检测时间主程序跑的时间也多,流水灯就变得快; 2的中断运行时间长,检测时间很短,在检测时间主程序依然动,但是动的太慢所以看不出来
展开
 我来答
汤圆3387
2015-04-17 · TA获得超过196个赞
知道小有建树答主
回答量:80
采纳率:0%
帮助的人:54.7万
展开全部
纯手打,望采纳
我直接从原理上说吧
以12M晶振为例:
①.每一个机器周期(1微秒)我们分为6部分,S1~S6。每一个机器周期,按顺序检测中断源(是否有中断),在S6时将(待响应的中断)排好顺序,在下一个S1时先响应高级中断。(可以看出,检测中断与程序运行是同步的,且检测中断所需时间很短——不足1个机器周期)
②.运行主程序时,当突然来了一个中断,则PC(程序计数器)指向的地址存入堆栈(即在主程序做个标记,执行完中断后回来),PC指向中断子程序,此时单片机执行中断子程序。总结来说,PC是指挥棒,只有一根指挥棒,所以执行中断时,主程序是不运行的。
③.中断运行时间长短看你写的中断子程序的长短咯。
④.有兴趣的话建议你学学汇编,汇编编程,就是指挥着PC一步一步走,你可以清楚的看见你的程序一步一步怎么运行,你想啊,你挥动着指挥棒,那程序不是想怎么走就怎么走?
追问
这个问题我已经想通了~  不过还是谢谢你~
查晓筠0i5
2015-04-17 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4954万
展开全部
需要给你写吗
追问
就是求科普的当然了
追答
代做的
我id
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式