C51编程13-中断篇(外部中断)

CPU在执行的过程中,一般来说都是在执行主程序(main函数里面的代码)。如果希望处理其他的功能,可以通过查询的方式进行,判断是否需要处理或者通过中断的方式,进入中断服务函数程序里面执行。

    前者是在主程序中判断条件是否成立,如果成立则执行其他功能,否则不执行;后者是CPU在执行过程中,判断是否有中断标志位,响应中断进入中断服务函数,执行相关功能。

    MCS-51 单片机中,有两个外部中断(INT0与INT1),中断有两种方式低电平触发与负跳变(下降沿)触发。

 

    下面通过讲INT0说明外部中断,INT1同理。

 

    原理图:

    P0连接8个LED,INT0引脚连接一个按钮连接到地。

       

      在中断系统中,INT0设计的寄存器中有IE、IP、TCON,在C51规定特殊寄存器的地址为8的倍数均可以位寻址。IE寄存器地址为:0xA8;IP寄存器地址为0xB8;TCON寄存器地址为0x88;因此它们可以被位寻址。

    以下是它们的位定义。

/*  TCON  */
sbit TF1   = TCON^7;
sbit TR1   = TCON^6;
sbit TF0   = TCON^5;
sbit TR0   = TCON^4;
sbit IE1   = TCON^3;
sbit IT1   = TCON^2;
sbit IE0   = TCON^1;
sbit IT0   = TCON^0;
​
/*  IE  */
sbit EA    = IE^7;
sbit ET2   = IE^5; //8052 only
sbit ES    = IE^4;
sbit ET1   = IE^3;
sbit EX1   = IE^2;
sbit ET0   = IE^1;
sbit EX0   = IE^0;
​
/*  IP  */
sbit PT2   = IP^5;
sbit PS    = IP^4;
sbit PT1   = IP^3;
sbit PX1   = IP^2;
sbit PT0   = IP^1;
sbit PX0   = IP^0;

 

        如果需要使用外部中断,需要满足以下条件

        1)中断中允许设置(置1)EA = 1;

        2)中断源允许设置(置1)Ex0 = 1;

        3)中断触发方式设置(置1或置0) IT0 =1 或者 IT0 = 0;

        4)  中断服务函数 

 

 

代码实现

#include "reg52.h"
#include "stdio.h"
​
void main(){
   IT0 = 1;
   EA = 1;
   EX0 = 1;
   while(1){};
​
}
​
void irq0(void) interrupt  0
{
    P0=~P0;
}

 

    注:由于IT0 =1;设置中断触发方式为负跳变(下降沿),CPU相应中断后清除中断标志位。而由于IT0 =0;设置中断触发方式为低电平触发,CPU相应中断后不会清除中断标志位。

     在上面的中断服务功能中表现,按一下LED灯亮,再按一次LED灯灭;

如果将IT0设置为0,则按下时LED会闪烁。因为中断标志位没有清除,不断进入中断服务函数。

 

   如果需要设置外部中断1,负跳变触发。只需要改上面代码的三条语句即可。

 IT0 = 1; ---->  IT1 = 1;
 
  EX0 = 1;  ---->  EX1 = 1;
   
   
void irq0(void) interrupt  0   -->  修改终端号,将0 修改为2;
​
void irq0(void) interrupt  2    ---->函数名irq0,可根据需要修改或不改 

 

 

 

---------------------------------------------------------

如果觉得文章还不错,那就扫码关注吧!

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颖川初尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值