学习笔记之-51单片机中断
来源:互联网 发布:租车app源码 编辑:程序博客网 时间:2024/05/29 16:59
1.中断的概念
通俗的讲,中断就是cup正在工作的时候,突然外部来了某一请求,要求cpu转去处理请求的事件,当事情做完之后cup再回来继续它的工作。这一过程称为中断 。
单片机中断响应可以分为以下几个步骤:
1、停止主程序运行。当前指令执行完后立即终止现行程序的运行;
2、保护断点。把程序计数器PC 的当前值压入堆栈,保存终止的地址(即断点地址),以便从中断服务程序返回时能继续执行该程序;
3、寻找中断入口;
4、执行中断处理程序;
5、中断返回。执行完中断处理程序后,就从中断处返回到主程序,继续往下执行。
流程图如下:
中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:
分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率;
实时响应:CPU能够及时处理应用系统的随机事件,系统的实时性大大增强;
可靠性高:CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。
2.51单片机中断详解
上图是80C51单片机中断系统的结构,从图中可以看到80C51的中断系统有5个中断源(补充:8052有 6个) ,分别是: 外部中断0/1(P3.2,P3.3),内部中断(定时计数器中断)0/1(P3.4,P3.5),串口中断(这一节先不讨论)
先介绍几个和中断相关的寄存器:
- TCON
TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。
TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。
TR1:T1充许计数控制位,为1时充许T1计数(定时)。
TR0:T0充许计数控制位,为1时充许T0计数(定时)。
IE1:外部中断1请示源(INT1,P3.3)标志。IE1=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”。
IT1:外部中断源1触发方式控制位。为1设置为底电平触发,为0设置为下降沿触发。
IE0:外部中断0请示源(INT0,P3.2)标志。IE0=1,外部中断1正在向CPU请求中断,当CPU响应该中断时由硬件清“0”。
IT0:外部中断源0触发方式控制位。为1设置为底电平触发,为0设置为下降沿触发。
高四位是控制内部中断(定时计数器)的,底四位是控制外部中断的,从中断结构图可以知道,外部中断有两种触发方式,IT0或者IT1为外部中断源触发方式控制位,此位为1设置为电平触发,为0设置为下降沿触发。TF0,TF1,IE0,IE1这四个位都是中断标志位,不需要设置的。
- 中断允许寄存器IE:
顾名思义,中断允许寄存器就是控制中断是否打开,注意EA总中断,使用任何中断这个位都要置一,当EA=0时,所有中断都将关闭。
- 中断优先级寄存器:
80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。51单片机中自然的优先级为:
从中断系统结构图中可以看到,中断优先级分为两级,每一级都是按照自然优先级排列,这样说应该可以理解吧。IP这个寄存器默认值为xx000000b,所有的中断都处在同一级,它就按照自然优先级进行响应。假设我们想人为的把串口的优先级设置为最高,那我们就可以在IP寄存器的PS位写一,这样,串口就被设置为更高一级,它的优先级是最高的。
这样,和单片机外部中断的几个寄存器都讲完了,定时器和串口的中断会分开阐述的。这里重点理解外部中断。
3.中断服务程序
上面讲中断过程中我们知道,那5个过程都是由计算机自动完成的,与我们无关,我们的工作只是在这5 个入口地址处存放有中断处理的程序,那么怎么具体写中断服务程序呢?
格式:
void function(void) interrupt x using y
x=0 是外部中断0;
x=1 是定时器中断0;
x=2 是外部中断1;
x=3 是定时器中断1;
x=4 是串行口中断;
y只能取以下值,一般我们是不用后面的using的
y=0 是第0组寄存器;
y=1 是第1组寄存器;
y=2 是第2组寄存器;
y=3 是第3组寄存器;
4.实例:外部中断
protues环境下硬件搭建
实现一个外部中断的步骤:
1.设置外部中断源触发方式控制位,为1设置为电平触发。
2.开总中断
3.开外部中断0
#include<reg51.h>sbit led=P1^0;sbit s=P3^2;void main(){ IT0=1; //1.设置外部中断源触发方式控制位,为1设置为电平触发。 EA=1; //2.开总中断 EX0=1; //3.开外部中断0while(1){}}void exterfunction(void) interrupt 0 using 1{ led=~led;}
- 学习笔记之-51单片机中断
- 嵌入式学习笔记(9)——51单片机之中断(外部中断)
- 嵌入式学习笔记(10)——51单片机之中断(定时器中断)
- 51单片机中断学习
- 51单片机中断学习
- 51单片机中断学习
- 51单片机中断学习
- 51单片机中断学习
- 51单片机中断学习
- 嵌入式学习笔记(11)——51单片机之中断(串口通信)
- 51单片机学习笔记(四)_中断系统
- 【51单片机学习过程记录】16 中断之 串口中断的应用2(中断方式)
- 51单片机 学习之旅[3] 中断-定时器
- 51单片机之中断 学习心得
- 51单片机学习笔记(六)_串口中断通信+定时器2串口中断
- 单片机学习笔记--外部中断,定时器,串口中断
- 单片机学习笔记--51单片机
- 【51单片机学习过程记录】11 中断之外部中断的应用
- Redis常用命令(1)——Key
- c# 数据库连接之实现
- 51nod 1394 差和问题
- 对.lds连接脚本文件的分析
- 筛选号码
- 学习笔记之-51单片机中断
- 用户栈和内核栈的区别
- 1792:迷宫
- 【bzoj1119】SLO 置换群
- NOIP2015 运输计划
- C#高级编程之委托 简明教程
- TCP/IP链路层
- 简单的shell脚本练习
- leetcode:2sum,2sumSorted,3sum,3sumClosest,4sum,4sumII.[哈希表,双指针]