C51教程 第四个51程序:中断控制--外部中断0

内部资源之外部中断

      中断类型                 中断入口地址     中断序号   
      外部中断0(INT0)P3.2      0003H           0
      外部中断1(INT1)P3.3      0013H           2
      定时计数器0(T0) 16bit    000BH           1
      定时计数器1(T1)          001BH           3
      定时计数器2(T2)          002BH           5
      异步串行通信口(UART)      0023H           4
      
CPU外围模块的掌握方法:
(1)相关口线
(2)相关控制字
(3)模块的工作方式
一、外部中断
   (1)相关口线
        P3.2:int0,外部中断0输入。分为低电平和下降沿两种可选触发
        P3.3:int1,外部中断1输入。分为低电平和下降沿两种可选触发
   (2)相关控制字
        IE :中断允许控制寄存器
           EA -- ET2 ES ET1 EX1 ET0 EX0      IE=0X85 : EA=1 EX1=1 EX0=1
             1 0  0  0   0   1   0   1 
           EA:  中断总允许控制位
           ET2:定时中断2允许控制位
           ES: 串行中断控制位
           ET1:定时中断1允许控制位
           ET0:定时中断0允许控制位
           EX0:外部中断0允许控制位
           EX1:外部中断1允许控制位
           当中断控制位为0时禁止中断,为1是允许中断
        IP:中断优先级控制寄存器
           -- -- PT2 PS PT1 PX1 PT0 PX0   PX0=0  PX1=1  IP=0X04;
           PX0:外部中断0优先级控制位
           PX1:外部中断1优先级控制位
           PT0:定时中断0优先级控制位
           PT1:定时中断1优先级控制位
           PT2:定时中断2优先级控制位
           PS:  串行中断优先级控制位
           优先级控制位为0时表示中断优先级为低,
                       为1时表示中断优先级为高,
           中断优先级高的中断源可再次中断中断优先级低的中断源
           同级间不能发生再次中断
        TCON:定时计数器控制寄存器
           TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0       IT0=1 : TCON=0X01
            0   0   0   0  0   0  0   1
           IT0:外部中断0触发方式选择位
              当IT0=0时,外部中断0为低电平触发中断
              当IT0=1时,外部中断0为下降沿触发中断,.优先选择
           IE0:外部中断0中断请求标志位
              当EA&EX0=1时,如果中断外部(P3.2)有信号时,
              IE0自动置1,当CPU响应中断后自动清零。

           IT1:外部中断1触发方式选择位
              当IT1=0时,外部中断1为低电平触发中断
              当IT1=1时,外部中断1为下降沿触发中断
           IE1:外部中断1中断请求标志位
              当EA&EX1=1时,如果中断外部脚(P3.3)有信号时,
              IE1自动置1,当CPU响应中断后自动清零。
(3)CPU外围模块的使用方法:
<1>相关控制字初始化;
<2>如果模块工作在中断模式,则编写响应中断功能的子程序。

单片机中断是指CPU在正常执行程序的过程中,由于计算机内部或外部发生了另一事件(如定时时间到,超压报警等),请求CPU迅速去处理,CPU暂时停止当前程序的运行,而转去处理所发生的事件。通俗的讲,就是单片机在中断发生时,就立即停止执行正在执行的内容,而去执行中断服务函数。

今天要做的一个实验,按下按键,停止主程序中的内容,立即转去执行中断服务函数。

我们主要看到原理图与代码,了解中断是什么,到底是怎么执行的

打开仿真软件,开始绘制原理图。
在这里插入图片描述
我们的目的是按下按键,CPU不在执行主程序,转去执行中断服务函数,我们为了更好的观察,主函数里让灯灭,中断服务函数让灯亮,只要灯亮了,那么就一定执行了中断服务函数。而中断服务函数执行条件就是外部中断引脚INT0或INT1检测到上升沿或者下降沿。(可以通过寄存器设置)


```c
#include <reg51.h>

sbit LED = P1^0;// 定义LED就是P1^0

void delayms(unsigned int t) //延时函数
{
	unsigned int a,b;
	for(a=0; a<t; a++)
	  for(b=0; b<120; b++);
}
void main(void)
{
	//设置INT0  (设置位寄存器)
	IT0=1;//跳变沿出发方式(下降沿)
	EX0=1;//打开INT0的中断允许。	
	EA=1;//打开总中断	
	while(1)
	{
	    LED = 0;	//注意,主函数是让led灭掉	
	}
}

/*外部中断0函数,只有INIT0引脚有下降沿才会触发,并且只会执行一次*/
/*外部中断0*/

void Int0()	interrupt 0		//外部中断0的中断函数
{
		LED = 1;
		delayms(1000);
}



在keil里编译,然后烧录到仿真,如果按下按键,灯亮一秒后熄灭,实验成功。不懂的话仔细分析代码与原理图,或者给我留言。
在这里插入图片描述
附带生成文件://download.csdn.net/download/mbs520/12168882

另外,提供给学者一本秘籍:《51精简版教程》

猜你喜欢

转载自blog.csdn.net/mbs520/article/details/104379783
C51