C51单片机————中断系统


51单片机中断系统


CPU和外设之间的速度差异太大,CPU跑的太快了,外设追不上,机器的内部也可能出现突发事件。那怎么办?所以引入中断技术呀。

Created with Raphaël 2.1.2 张三 张三 李四 李四 嘿,小四儿, 什么是单片机中断哇? 李四愣了一下,说: 你猜 猜**!
  • 那什么是中断哇?

    CPU和外设并行工作,有突发事件或者外设要给CPU请安的时候,外设就发一个信号给CPU,CPU就去见见外设见面完了CPU又回来干自己的事情。这个过程就是中断!

  • 中断源?
    中断申请的来源(就是说是哪一个外设发起了中断)

  • 中断优先级
    万一有几个外设来找CPU,我们怎么办喃?那我们就给他门排个顺序,CPU先见排在前面的。这个顺序就是他的优先级。
    那顺序咋个定喃? 那你要事先安排好咯!


中断源

C51一共有5个中断源(C52有6个)

中断源名称引脚入口地址
INT0外部中断0P3.20003h
INT1外部中断1P3.30013h
T00号定时器中断P3.4000bh
T11号定时器中断P3.5001bh
TI/RI串行口中断P3.1 TXD0023h

中断控制有关寄存器

中断我们需要考虑几个方面

  1. 中断打开没
  2. 怎么触发中断
  3. 中断的启停
  4. 多个中断触发后如何响应

IE 中断的允许与禁止(地址A8h)

EAET2ESET1EX1ET0EX0
中断总开关暂时不用T2串行口TXDT1int1T0int0
1开0关暂时不用1开0关1开0关1开0关1开0关1开0关1开0关

TCON 中断的请求与外部中断的选择(地址88h)![这

TF1TR1TF0TR0IE1IT1IE0IT0
T1中断请求T1工作启停T0中断请求T0工作启停int1中断请求int1中断触发方式int0中断请求int0中断触发方式
1请求0无请求1启动0停止1请求0无请求1启动0停止1请求0无请求1下降沿0低电平1请求0无请求1下降沿0低电平

IP 中断的优先管理(地址88h)

PT2PSPT1PX1PT0PX0
T2串行口T1int1T0int0
1高0低1高0低1高0低1高0低1高0低1高0低

8XXC51中断结构


中断过程


这里写图片描述

C51中断(和8086的区别):

  • 不会自动保护标志寄存器PSW
  • 不会自动保护现场
  • 不会自动关中断
  • 不会自动发送中断响应信号
什么时候不会响应中断呢?
  1. 当前指令没有结束
  2. 响应了同级或者高级中断
  3. 操作IE、IP中断控制寄存器
  4. 执行RETI(从中断服务程序返回、回复中断优先级状态触发器)指令

中断的撤除

  1. 对于T0、T1的溢出中断:CPU响应后,会硬件清除中断请求标志TF0、TF1(自动撤除)
  2. 对于边沿触发的int0、int1中断,自动撤除
  3. 低电平触发的int0、int1中断,需要在响应之后撤除中断请求
  4. 串行口和T2中断,没用硬件清除中断标志TI、RI、TF2和EXF2(不会自动撤除),需要软件清除!

C语言和汇编的中断

C语言中断函数定义

返回值 函数名(【参数】)[模式][再入]interrupt n[using m]

n012345
中断源编号int0T0int1T1串行口T2

返回值:返回值
参数:形参 函数的输入
m : 选择工作的寄存器组
再入(reentrant): C51中普通函数不可递归调用,只有再入函数可以递归

#include<reg51.h>
unsigned char i=0;
int0() interrupt 2//中断函数
{
  i++;//计算中断次数
}
main()//主函数
{
    EA=1;//中断总开关
    EX1=1//外部中断1  允许中断
    IT1=1;//下降沿有效
}
ORG 0000H
AJMP MAIN
ORG 0013H       ;中断子程序入口
AJMP COUNTING   ;中断函数名
ORG 0030H
MAIN: 
    SETB EA      ;中断总开关
    SETB EX1     ;外部中断1  允许中断
    SETB IT1     ;下降沿有效
HERE:AJMP HERE
COUNTING:
    INC A        ;a++
    RETI
END
  • 29
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值