单片机-中断法实现数码管每秒加一

单片机-外部中断

外部中断

中断的概念:CPU在执行主程序的时候,中断源发送请求。CPU响应中断源,去执行中断源的程序。中断源往往含有优先级,优先级高的中断源可以向优先级低的中断源发送有效的中断请求。

STC12C5A60S2系列单片机通常有两个外部中断源。

外部中断常用到的寄存器是TCON(定时计数器控制寄存器)的低四位

寄存器名称地址B7B6B5B4B3B2B1B0
TCON88H位名TF1TR1TF0TR0IE1IT1IE0IT0
IE1外部中断(INT1)中断请求标志位
0中断事件未发生
1产生了中断事件,可向CPU申请中断
IT1外部中断源1触发方式控制位
0低电平触发方式。当INT1=0时,IE1被硬件自动置1
1下降沿触发方式。当INT1电平由1到0跳变时,中断请求标志位被硬件自动的置一

上述是外部中断1的两个寄存器位的作用。TCON低两位的外部中断0的意义与外部中断1的意义相同,这里不再赘述。

要使一个中断源能够被CPU识别并按照中断的方式执行,就要求传递线上的几个开关都是闭合的。通过下面的图可以很好的理解中断源与CPU之间的请求传输。
在这里插入图片描述
所以我们可以得到要外部中断0的服务程序能够执行必须满足三个条件:

  • CPU开放总中断,即EA=1;
  • 允许外部中断0申请中断,即EX0=1;
  • 必须由中断事件发生,即中断标志位IE0=1;当INT0低电平或者由下降沿的时候IE0就会被自动置1;

应用示例

主函数执行数码管每隔约1s加1的任务,当按下P32引脚的按键时,蜂鸣器鸣一声,P36引脚对应的是蜂鸣器,当P36=1时,蜂鸣器发生,S2按键按下,电平为低,松开时为高。(P32同时也是外部中断0的接口)

#include <reg51.h>
#include "shumaguan.h" // 要用到里面的数码管显示函数,在此文件中,直接调用不再多写。
sbit beep=P3^6;
sbit key=P3^2;
#define BEEPON beep=0
#define BEEPOFF beep=1
#define RDKEY key
void delay1s(void)
{
//cpu延时1s,这里的代码可以在STC烧录助手里来看,或者根据系统时钟来计算。代码略。
}
void delay100ms(void)
{
//cpu延时1s,这里的代码可以在STC烧录助手里来看,或者根据系统时钟来计算。代码略。
}
void delay10ms(void)
{
//cpu延时1s,这里的代码可以在STC烧录助手里来看,或者根据系统时钟来计算。代码略。
}
void main()
{
   unsigned char i; 
   IT0=1;//设置为下降沿触发
   EX0=1;//允许外部中断0的申请
   EA=1;
   while(1)
  {
  ShowInt(i);
  i++;
  delay1s();
  }
}
//外部中断0的终端服务程序。CPU被动被打断
//中断法--外部中断0请求标志位的IE0由硬件自动清零,无需软件操作。
void EX0_ISR() interrupt 0
{
   delay10ms();//消抖
   if(RDKEY==0)
   {
   BEEPON;
   delay100ms();
   BEEPOFF;
   }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值