51单片机中断系统

1.什么是中断:

CPU在执行主程序的过程中,外部设备向CPU发出请求信号,CPU暂时中断主程序去执行另一程序

2.中断系统的结构:

在这里插入图片描述


在这里插入图片描述

3.优先级:

  1. 51单片机有两个中断优先级:高优先级低优先级
  2. 每个中断源都可以通过设置中断优先级寄存器IP确定为高优先级中断或低优先级中断,实现二级嵌套。同一优先级别的中断源可能不止一个,因此,也需要进行优先权排队。同一优先级别的中断源采用自然优先级。
  3. 中断优先级寄存器IP,用于锁存各中断源优先级控制为。IP中的每一位均可由软件来置1或清0,1表示高优先级0表示低优先级
    在这里插入图片描述

4.中断处理过程:

中断响应是指CPU对中断源中断请求的响应。CPU并非任何时刻都能响应中断请求,而是在满足所有中断响应条件,且不存在任何一种中断阻断情况时才会响应。
CPU响应中断的条件有:

  1. 有中断源发出中断请求;
  2. 中断总允许位EA置1;
  3. 申请中断的中断源允许位置1.

CPU响应中断的阻断情况有:

  1. CPU正在响应同级或更高优先级的中断;
  2. 当前指令未执行完;
  3. 正在执行中断返回或访问寄存器IE和IP

中断响应过程就是自动调用并执行中断函数的过程。废话说完了!
常用的中断函数定义语法如下:
void 函数名() interrupt n
n为中断类型号

中断源n
外部中断00
定时/计数器01
外部中断12
定时/计数器13
串行口4
下面请看实例:
定时/计数器1
unsigned char num=0;
unsigned char  str[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//  共阴0~9
void initcounter()
{
 TMOD=0x60;//注释见下 若为计数器0则TMOD=0x06
 TH1=256-1;
 TL1=256-1;
 ET1=1;//中断源开放
 EA=1;//中断开放
 TR1=1;//打开定时器 1
}
void display()
{
 P2=str[num];
 if(num==3)
 {
  num=0;
 }
}
void main()
{
   initcounter();
   while(1)
   {
    display();
   }
}
void counter_isr() interrupt 3//interrupt 后的数字根据中断源定,上面有表格参考
{
 num++;
}


TMOD寄存器初始化
GATE为门控位,用于控制定时/计数器的启动是否受到外部中断请求的影响。置0或1。
C/T:置0为定时,置1为计数
M0,M1表格中有说明
此时我们选择的是定时器1,对应的应为 0 1 1 0 ,0 0 0 0 转换为十六进制则为0x60

在这里插入图片描述
最后:P3.2接外部中断0,P3.3接外部中断1,P3.4接定时/计数器0,P3.5接定时/计数器1.

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值