微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > c语言编写51单片机中断程序,执行过程是怎样的?

c语言编写51单片机中断程序,执行过程是怎样的?

时间:10-02 整理:3721RD 点击:
例如程序:
#include<reg52.h>  
void main(void)
  {
   EA=1;      //开放总中断
   EX0=1;     //允许使用外中断
   IT0=1;    //选择负跳变来触发外中断
   P0=0xff;         //关闭所有P0口的LED灯
        while(1); //无限循环,
}
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{

  P0=~P0;  //每产生一次中断请求,P0取反一次。
  
}
当有中断时,这个程序的执行过程是怎样的?

从main开始,开放总中断,允许使用外中断,选择负跳变来触发外中断,到这时负跳变没来没就一直while(1),等待。来了后执行
void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{
  P0=~P0;  //每产生一次中断请求,P0取反一次。
  
}

有中断时直接跑到中断服务去

恩,对的!

hao  de 非常完美的解释  

会直接执行中断程序的,应该加个计时器,main后
           TMOD=0x01;//设置定时器0为工作方式1(0000 0001)
        TH0=(65536-9174)/256;//装初值50ms一次中断
        TL0=(65536-9174)%256;
        EA=1;  //开总中断

在中断程序里也加初值:TH0=(65536-9174)/256;//装初值50ms一次中断
        TL0=(65536-9174)%256;

CPU会一直在检测是否有中断请求的。当收到中断请求EX 时,进行软件设置,开启总中断EA ,再设置中断的触发方式IT。

应该是P0控制的LED灯亮灭的交替出现吧

如果我让数码管动态显示一遍以后,产生中断,让第一个数码管亮。怎么编写

进入main执行   遇到中断进入中断执行程序

弄过一个带外部中断的,体会是只用软件仿真时不容易调试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top