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

 

例如程序:

#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取反一次。
  
}

当有中断时,这个程序的执行过程是怎样的???

 

 

 

A1:从main开始,开放总中断,允许使用外中断,选择负跳变来触发外中断,到这时负跳变没来没就一直while(1),等待。来了后执行

void it0(void) interrupt 0 using 0 //外中断0的中断编号为0
{

  P0=~P0;  //每产生一次中断请求,P0取反一次。
  
}

 

 

 

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

 

  

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

 

外部中断定时器c语言程序详解

利用外部中断0,定时器0从数码管到流水灯显示

 #include "reg52.h"//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include "intrins.h"

单片机c语言调用python 用c语言编写单片机程序_数码管

#define uint unsigned int#define uchar unsigned char

单片机c语言调用python 用c语言编写单片机程序_中断请求_02

uchar led,n,i,count=0;uchar smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f          ,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-Fuchar sm[]={0x00,0x01};//数码管扫描uchar str[2];//显示两位数码管
 /******************************************************************//*                    延时函数声明                                *//******************************************************************//*void mdelay(uint t){  uchar n;for(;t>0;t--) for(n=0;n<125;n++)  {;}}*//*大约一毫秒的延时函数*/void mdelay(uint t){  uchar n;while(t--){for(n=0;n<123;n++)  {;}  }  }

单片机c语言调用python 用c语言编写单片机程序_中断请求_03

 /******************************************************************//*                   主函数 1                                      *//******************************************************************/void main(){EA=1;//开总中断开关EX0=1;//打开外部中断0INT0=1;//触发方式为下降沿触发TH0=0x3c;//设置初值TL0=0xb0;ET0=1;//打开定时器中断TR0=1;//启动定时器TMOD=0x01;//设置定时器0为工作方式1

单片机c语言调用python 用c语言编写单片机程序_#include_04

 while(1){for(i=0;i<2;i++)//数码管显示数据{P1=0xff;P2=sm[i];P0=smg[str[i]];mdelay(5);}}}

单片机c语言调用python 用c语言编写单片机程序_单片机c语言调用python_05

 void int0() interrupt 0{  uchar c; led=0xfe;  P2=0x00;for(c=0;c<8;c++)//流水灯循环一次{P1=led;led=_crol_(led,1);//左移函数mdelay(1000);}}

单片机c语言调用python 用c语言编写单片机程序_中断请求_06

 void time0() interrupt 1{TH0=0x3c;TL0=0xb0;count++;  if(count==20)//延时一秒0-60显示  {count=0;str[0]=n/10;str[1]=n%10;n++;if(n==60){ n=0;    }  }}

单片机c语言调用python 用c语言编写单片机程序_#include_07

步骤阅读

10本经验只供参考,如有不足,还请见谅。。。