51单片机中断和软件仿真

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/little_white__/article/details/69366947
                中断系统的结构如下

这里写图片描述
从结构图可以看到,51单片机有有5个中断,分别是外部中断0(INT0),外部中断1(INT1),定时器中断0(T0),定时器中断1(T1)和串口中断(TX/RX)。有两个优先级,其中在一个中断组中优先级顺序从高到低是INT0、T0、INT1、T1、TX/RX。

部分中断寄存器

1、中断允许控制寄存器(IE)
这里写图片描述
EX0:外部中断0允许位;
ET0:定时/计数器T0中断允许位;
EX1:外部中断1允许位;
ET1:定时/计数器T1中断允许位;
ES :串行口中断允许位;
EA :CPU中断允许(总允许)位。
以上都是1使能,0关闭。
2、定时器/控制器控制寄存器TCON
这里写图片描述
IT0:外部中断0触发方式控制位
当IT0=0时,为电平触发方式(低电平有效)
当IT0=1时,为边沿触发方式(下降沿有效)
IE0:外部中断0中断请求标志位 (硬件自动完成)
IT1:外部中断1触发方式控制位(同IT0)
IE1:外部中断1中断请求标志位 (同IE1)
TF0:定时/计数器T0溢出中断请求标志位
TF1:定时/计数器T1溢出中断请求标志位
3.中断优先级控制寄存器(IP)
这里写图片描述
PX0:外部中断0优先级设定位
PT0:定时/计数器T0优先级设定位
PX1:外部中断0优先级设定位
PT1:定时/计数器T1优先级设定位
PS :串行口优先级设定位
以上都是1为高优先级,0为低优先级。
4.定时器/计数器工作模式寄存器TMOD
这里写图片描述
GATE—门控制位。
GATE=0,定时器/计数器启动与停止仅受TCON寄存器中TRX(X=0,1)来控制。
GATE=1,定时器计数器启动与停止由TCON寄存器中TRX(X=0,1)和外部中断引脚(INT0或INT1)上的电平状态来共同控制。
C/T—定时器和计数器模式选择位。
C/T=1,为计数器模式;C/T=0,为定时器模式。
M1M0—工作模式选择位。
这里写图片描述
使用中断前,要打开总中断,打开你使用的中断允许位,外部中断要设置中断触发方式,其他中断也要配置相应的寄存器,如果使用多个中断还要配置中断优先级。

中断服务函数的格式:
中断服务程序的写法
void 函数名() interrupt 中断号 [using 工作组]
{
中断服务程序内容
}

51单片机的中断基本就这些,下面举一个栗子。
这里写图片描述

用下降沿触发INT0(P3.2),然后让P1^0输出0 ;

主程序

include "intrins.h"
include <reg51.h>

sbit LED = P1^0 ;

void Int0 (void) interrupt 0
{
    LED = 0 ;
}

void Init_INT(void)
{
    EA = 1 ; //开总中断
    EX0 = 1 ; //开外部中断0
    IT0 =  1 ; // 为跳变沿触发
}


void main()
{
      Init_INT() ; //中断初始化

      while(1)
      {  

      }
}

用信号函数仿真

signal void test(void)  
{  
    while(1)  
    {  
        port3 = 0xff ;
        swatch(0.02);

        port3 = 0xfB ;      
        swatch(0.1) ;

        port3 = 0xff ;
        swatch(0.02);

        _break_ = 1 ;

    }  
}

仿真波形如下,上面是外部中断信号,下面是P1^0输出信号。

这里写图片描述

想了解定时器中断的可以看这里
http://www.21ic.com/jichuzhishi/mcu/interrupt/2013-03-13/160443.html

新手初学,多多指教。

猜你喜欢

转载自blog.csdn.net/little_white__/article/details/69366947