单片机 外中断问题

#include<reg52.h>
#include<intrins.h>

void main()
{
EA=1;//-------------1
EX0=1;//-----------2
IT0=1;//------------3

while(1);//-----------4

}

void int0(void) interrupt 1
{
P0=_crol_(P0,1);//--------5
}
新手,上图是我自己编的外中断控制led流水灯,有几点不明白,请高人指点。
1.图中while无限循环的是哪几步?(后面我都标号码了)
2.外中断申请后,是再那一步开始插入运行的啊?
3.void能不能形象点给解释一下,还不是很懂的说,

你的标号4语句就是等待处(无限循环处)
在有你开的0定时器溢出中断发生时就是从你那标号5语句上 interrupt 1所指的中断1处入口开始运行,这的物理地址是1BH(定时器0 的中断入口)。
这时的功能就是按你要求的P0=_crol_(P0,1);这语句执行。完成后又回到4语句处等待下一次。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-05
这样给你讲:
while(1); //写成while(1){donothing();}会好看些,donothing()你可以看成是单片机除了保持现有状态什麼也不做
然後来一个外部中断/或内部中断,就从donothing()-->转而执行中断服务函数(也就是反转P0.1),完成後返回main()的while(1),再一直做donothing();

说白了,就是单片机进入while(1);死循环後,除了预定义的中断函数,不再响应其它操作
第2个回答  2012-04-08
1.while无限循环是第四步
2.外部中断申请后,不是程序运行到哪一步开始中断,而是当你外部中断引脚输入变化是才会进入中断服务程序,处理中断
3.void表示空数据类型。例如一个函数如果没有返回值,则其返回类型为void。如果没有传递参数,则也用void
第3个回答  2012-04-05
1:while执行的是紧跟后面的语句,这个程序中就是在4号语句循环。
2:中断是在执行死循环时等待的,一旦有中断就进入中断程序及
void int0(void) interrupt 1
{
P0=_crol_(P0,1);//--------5
}
3:void函数不能以return结束,并不是一楼说的无返还值,可以通过改变变量的数值来返还数值。
第4个回答  2012-04-08
1、while循环在这里代表无限循环就是说保持1、2、3步中的状态
2、外中断申请后应该是在第二步的后面插入的,,那里就是允许外部中断
3、void就是无类型返回啊,,就是说执行完1、2、3、4步后返回的数无类型,,即没有东西返回,,这里可以这么理解
第5个回答  2018-03-29
“那个中断函数和主函数直接是什么关系?为什么写在主函数后边但是主函数又没引用?”
中断函数无需被显式调用。当有相应的中断产生时,程序会自动中止当前的运行、记录位置,然后跳转到相应的中断入口处。而在中断入口会进行二次跳转,到程序中对应的中断处理函数内并执行。中断处理函数运行完毕返回后,跳回到刚才中止运行的位置继续运行。
“电平触发方式应该是EXO=0呀,为什么那个主函数里的EXO=1??”
EX0=1;代表使能外部中断0。后面的IT0=1;才是设置触发方式。这里的程序设置为了下降沿触发,的确与题目的要求不符。
“while(1),无限循环是咋回事”
while(1)意味着永远满足循环条件,因此会永远执行后面大括号里的函数体。这里一般放的都是主循环体。如果没有主循环体,单片机运行一次主程序之后就会继续向后运行跑到空白区,从而产生各种未知的执行结果并不断复位。
相似回答