640 likes | 767 Views
单元 6 中断. 实训项目一 AT89S51 的中断控制基础知识 实训项目二 采用中断技术控制灯的亮灭(外部中断) 实训项目三 中断控制的 1 位秒表(定时中断). 实训项目一 AT89S51 的中断控制基础知识. 【 实训目的 】. 1 . 理解 8051 的中断概念; 2 . 能说出与中断相关的特殊功能寄存器名称及其作用; 3 . 知道中断的优先级寄存器及其控制方法; 4 . 知道中断源及其中断服务程序入口地址。. 【 学什么 】. 一、什么是中断?.
E N D
单元6 中断 实训项目一 AT89S51的中断控制基础知识 实训项目二 采用中断技术控制灯的亮灭(外部中断) 实训项目三 中断控制的1位秒表(定时中断)
实训项目一 AT89S51的中断控制基础知识 【实训目的】 1 .理解8051的中断概念; 2 .能说出与中断相关的特殊功能寄存器名称及其作用; 3 .知道中断的优先级寄存器及其控制方法; 4 .知道中断源及其中断服务程序入口地址。
【学什么】 一、什么是中断? 单片机中断就是当单片机CPU正在进行的程序被另外一个外部或内部的事件突然打断,于是CPU暂停原有的执行顺序,转去处理这个突发事件,待处理完毕后再返回到之前程序断点处继续原来正在进行的工作。 能实现中断功能并能对中断进行管理的硬件和软件称为中断系统。
执行主程序 (看书) (同学叫) 中断源发出中断请求 (答应、暂停看书、在书上做记号) CPU对中断请求作出响应、保护现场 执行中断服务程序 (解答问题) 返回主程序 (翻到记号处继续看书) 图6-1-1 中断响应处理流程与生活实例的类比 【学什么】 二、单片机中断处理流程
图6-1-2 MCS-51单片机的中断系统内部结构图 【学什么】 三、中断源及中断控制寄存器
【学什么】 三、中断源及中断控制寄存器 AT89S51单片机有两类共五个中断源,分别是外部中断0( )、外部中断1( )、内部定时/计数中断0(T0)、内部定时/计数中断1(T1)和串行通信中断(RI/TI)。 其中,为用户提供了4个特殊功能寄存器(SFR)——定时/计数器控制寄存器TCON、串行口控制寄存器SCON、中断允许控制寄存器IE、中断优先级控制寄存器IP,用来进行中断系统控制。
P3.0/RXD ——接收中断 P3.1/TXD ——发送中断 P3.2/ ——外部中断0 P3.3/ ——外部中断1 P3.4/T0 ——计数中断0 P3.5/T1 ——计数中断1 U1 19 39 XTAL1 P0.0/AD0 38 P0.1/AD1 1.中断源 —、 T0、 、 T1、 RI/TI (见第7单元) 37 P0.2/AD2 18 36 XTAL2 P0.3/AD3 35 P0.4/AD4 34 P0.5/AD5 33 P0.6/AD6 9 32 RST P0.7/AD7 21 P2.0/A8 22 P2.1/A9 23 P2.2/A10 29 24 PSEN P2.3/A11 30 25 ALE P2.4/A12 31 26 EA P2.5/A13 27 P2.6/A14 28 P2.7/A15 1 10 P1.0 P3.0/RXD 2 11 P1.1 P3.1/TXD 3 12 P1.2 P3.2/INT0 4 13 P1.3 P3.3/INT1 5 14 P1.4 P3.4/T0 6 15 P1.5 P3.5/T1 7 16 P1.6 P3.6/WR 8 17 P1.7 P3.7/RD AT89S51 【学什么】 三、中断源及中断控制寄存器 图6-1-3 AT89S51单片机与各中断源相关的P3口第二功能引脚图
【学什么】 三、中断源及中断控制寄存器 2.中断控制寄存器 (1)IE 中断的允许和禁止控制寄存器(A8H)),一个8位特殊功能寄存器,其相关位的含义如下:
【学什么】 三、中断源及中断控制寄存器 2.中断控制寄存器 (2)TCON 定时器/计数器中断请求标志及外部中断方式选择寄存器(88H),一个8位特殊功能寄存器,其高4位含义是关于定时器控制,这里不再赘述,剩下低4位跟外部中断控制相关,其含义如下:
【学什么】 三、中断源及中断控制寄存器 2.中断控制寄存器 (3)IP 中断优先级管理寄存器 (B8H),一个8位特殊功能寄存器,其相关位的含义如下:
【学什么】 三、中断源及中断控制寄存器 另外,需要注意: 当某几个中断源在同一个优先级别时(即IP寄存器相应位同为1或同为0),其中断响应也是会有先有后的,具体的查询顺序是: (较高)→T0→ →T1→串行口(RI/TI)(较低)
【学什么】 四、中断服务程序入口地址(即中断向量) AT89S51单片机的五个中断源,其中任何一个中断一旦被响应,单片机就会转到相应的某个特定的地址上去执行中断服务程序,这些特别的地址就是中断服务程序的入口地址,也叫做中断向量 。 表6-2-1 中断服务程序入口地址表——中断向量表
【怎样做】 一、请写出外部中断0为电平触发的高优先级别的中断系统初始化程序段。 • 设置IE寄存器——开启总中断和允许外部中断0( ) • 编程指令为: • SETB EA • SETB EX0 • 或写为: • MOV IE,# 81H
【怎样做】 一、请写出外部中断0为电平触发的高优先级别的中断系统初始化程序段。 • 设置TCON寄存器——选择外部中断0为电平触发方式 • 编程指令为: • CLR IT0 • 或写为: • ANL TCON,#0FEH
【怎样做】 一、请写出外部中断0为电平触发的高优先级别的中断系统初始化程序段。 • 设置IP寄存器——定义外部中断0中断优先级别为高 • 编程指令为: • SETB PX0 • 或写为: • MOV IP,#01H
采用位操作指令的写法 SETB EA SETB EX0 CLR IT0 SETB PX0 采用字节操作指令的写法 MOV IE,# 81H ANL TCON,#0FEH MOV IP,#01H 【怎样做】 一、请写出外部中断0为电平触发的高优先级别的中断系统初始化程序段。 • 综上所述,完整的初始化程序段为:
采用位操作指令的写法 SETB EA SETB EX0 CLR IT0 SETB PX0 采用字节操作指令的写法 MOV IE,# 81H ANL TCON,#0FEH MOV IP,#01H 【怎样做】 二、请写出定时中断1(T1)为低优先级别的中断系统初始化程序段。 • 如上题,完整的初始化程序段为:
【深入与提高】 一、假设允许外部中断0,采用下降沿触发方式,允许定时中断1,并设定定时中断1为高优先级别中断,其它中断源为低优先级别中断,请写出相应的中断系统初始化程序段。 • 如上题,完整的初始化程序段为: 采用位操作指令的写法 SETB ET1 SETB EX0 SETB EA SETB TR1 SETB IT0 SETB PT1 CLR PT0 CLR PX1 CLR PX0 采用字节操作指令的写法 ORL IE,# 89H ORL TCON,#41H MOV IP,#08H
【课堂小结】 总结: 1.AT89S51单片机有哪5个中断源? 2.AT89S51单片机提供哪4个特殊功能寄存器? 3. 各中断源对应的中断服务程序入口地址是什么? 【课堂练习】 教材中“思考与练习”第1、2题 【课后作业】 教材中“思考与练习”第3、4题
实训项目二 采用中断技术控制灯的亮灭(外部中断) 【实训目的】 1. 知道外部中断0、外部中断1的中断向量地址。 2. 能理解中断控制的流水灯电路工作原理。 3. 能清楚中断程序的结构。 4. 能体会编程时使用中断方式与查询方式的区别。 5. 能读懂例中程序,并会修改调试程序。 6. 掌握PUSH、POP指令的作用和用法。
帮班主任做事情 帮小明解答问题 看书 检查班级考勤情况 接听电话 图6-2-2中断方式示意图 【学什么】 一、查询方式与中断方式 图6-2-1 查询方式示意图
【学什么】 二、认识堆栈 堆栈实质上就是数据存储器中的一块区域,堆栈指针SP总是指向栈顶的地址,数据只能从栈顶唯一的口进出,“先进后出,后进先出”,常用来保护现场和恢复现场。 51单片机系统上电或者复位时,堆栈指针SP的初始值默认为07H。使用堆栈存取数据较多时,一般需重新设定SP的初始值以开辟更大的数据存取空间。
【学什么】 三、学习新指令 1. RETI中断返回指令 指令格式:RETI 2. PUSH入栈指令 指令格式:PUSH direct 3. POP出栈指令 指令格式:POP direct
62H 62H A4H SP→ SP→ 内部数据存储器 A 栈顶 栈顶 PUSH ACC 61H 61H ② 60H 60H 5FH 5FH ① A4H 地址 地址 SP+1→SP 栈底 栈底 图6-2-3 入栈过程示意图 【学什么】 三、学习新指令 比如: MOV SP, #5FH MOV A, #0A4H PUSH ACC 经过汇编后,60H地址的数据存储单元中的内容就变成了A4H,栈顶指针SP指向60H地址,见入栈过程示意图6-2-3。
62H 62H A4H POP ACC SP→ SP→ 内部数据存储器 A 栈顶 栈顶 61H 61H 60H 60H 5FH 5FH A4H 地址 地址 栈底 栈底 ② SP←SP-1 图6-2-4 出栈过程示意图 【学什么】 三、学习新指令 续上例: POP ACC 经过汇编后,栈顶指针SP指向的60H地址数据存储单元中所储存的数据A4H被弹至A累加器中,同时栈顶指针SP指回5FH地址,见图6-2-4出栈过程示意图。
【学什么】 四、中断请求与中断响应、主程序与中断服务程序 中断程序结构主要包括主程序和中断服务程序两部分,一般把常态工作放在主程序中,如“看书”,而把“来电话”等紧急情况作为中断事件,需要时发出中断请求以便得到及时处理,中断处理过程也称为中断服务过程,由中断服务程序来完成。
【学什么】 五、采用外部中断技术控制灯亮灭的编程思路 电路效果:接通电源,一只灯D1长亮,另一只灯D2不亮,按一下开关S,灭掉长亮的D1灯,同时点亮D2灯,持续1秒后,又恢复到开关S按下之前D1灯长亮D2灯不亮的电路状态。 分析:采用外部中断技术来解决以上电路功能。把“点亮D1灯”的指令放在主程序里,把完成“灭掉长亮的D1灯并同时将D2灯点亮持续1秒”的指令放到中断服务程序中,中断请求由开关S来产生。
【学什么】 五、采用外部中断技术控制灯亮灭的编程思路 1、起始程序段 常用伪指令ORG与LJMP指令来实现主程序和中断服务程序的跳转,目的是将较长的中断服务程序放到更广阔的空间里,以解决存储空间过小的问题。 ;起始程序段 ORG 0000H LJMP START ORG 0013H LJMP INT1ZD …… START: …… INT1ZD: ……
【学什么】 五、采用外部中断技术控制灯亮灭的编程思路 2、保护现场与恢复现场 保护现场与恢复现场最好的办法就是使用堆栈。 ;外部中断1服务程序段 INT1ZD: CLR EA ;CPU关中断 PUSH PSW ;将PSW的内容压入堆栈进行现场保护 PUSH ACC ;将A的内容压入堆栈进行现场保护 SETB EA ;CPU开中断 ;中断处理程序段(具体) CLR EA ;CPU关中断 POP ACC ;将A的内容弹出堆栈以实现现场恢复 POP PSW ;将PSW的内容弹出堆栈以实现现场恢复 SETB EA ;CPU开中断 RETI ;中断返回,恢复断点
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 一、绘制电路图 表6-2-1 元件属性表 如图6-2-5 对象选择器列表
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 一、绘制电路图 图6-2-7 外部中断控制LED灯亮灭的电路图
INT1中断入口 开始 实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 二、绘制流程图 设置向量表 熄灭D1灯 点亮D2灯 持续1秒 P1端口初始化 开启外部中断1 允许总中断 设置外部中断1的触发方式 熄灭 点亮D1灯 中断返回 图6-2-8主程序流程图 图6-2-9中断服务子程序流程图
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 三、编写程序 ;主程序程序段_点亮D1灯 ;;========================================== D1_ON: CLR D1 ;点亮D1灯 SJMP D1_ON ;循环 ;外部中断1服务程序段_熄灭D1灯,点亮D2灯 =========================================== INT1ZD: SETB D1 ;熄灭D1灯 CLR D2 ;点亮D2灯 LCALL DELAY_1s ;调用1s的延时子程序 SETB D2 ;熄灭D2灯 RETI ;中断服务程序结束返回 ;延时1s子程序段=========================================== DELAY_1s: ;延时1s子程序 MOV R7, #10 DL1: MOV R6, #200 DL2: MOV R5, #250 DJNZ R5, $ DJNZ R6, DL2 DJNZ R7, DL1 RET END ;外部中断1的中断响应实例_电平触发 ;用一个开关控制2只LED灯亮灭程序 ;起始程序段============================================= LED EQU P1 ;两只LED灯都接在P1口 D1 BIT P1.0 ;D1灯接在P1.0端子上 D2 BIT P1.1 ;D2灯接在P1.1端子上 ORG 0000H ;起始地址0000H LJMP START ORG 0013H ; 中断服务程序入口地址为0013H LJMP INT1ZD ;转而执行中断服务程序 ;主程序初始化段============================================= ORG 0030H START: MOV LED, #0FFH;P1端口初始化,接在P1口上所有灯均灭 SETB EX1 ;开启外部中断1 CLR IT1 ;设置为低电平触发方式 SETB EA ;允许总中断
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 四、生成代码 五、仿真
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 五、仿真 图6-2-13外部中断1控制LED灯的亮灭软件仿真效果图1(全速)
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 五、仿真 按下开关S,则D1灯灭,与此同时,D2灯亮1秒钟后又恢复到原状态。 图6-2-13外部中断1控制LED灯的亮灭软件仿真效果图2(全速)
实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。实训要求:采用外部中断技术用一只按键来控制LED灯的亮灭。 【怎样做】 六、硬件验证
【深入与提高】 一、外部中断的触发方式——电平触发与边沿触发 • 请分组讨论:如何将实训项目二中的实例由电平触发方式改为边沿触发方式?想一想,如何修改源程序? • 请分别在电平触发和边沿触发两种方式下,长按按钮开关S,仔细观测比较两者的电路效果有什么不同?想一想为什么会发生这种现象?
【深入与提高】 二、用单片机外部中断技术来控制8个发光二极管实现流水灯效果 1、绘制电路图
【深入与提高】 二、用单片机外部中断技术来控制8个发光二极管实现流水灯效果 2、电路实现功能: 接通电源,8只LED灯每200ms左移1位循环不已,用一个按钮开关来控制流水灯改左移为闪烁3次,然后,又恢复到流水灯左移的状态,要求用外部中断技术来实现。
开始 INT0中断入口 设置向量表 保护现场 P1端口初始化 开启外部中断0 允许总中断 设置外部中断0为边沿触发方式 8只LED灯闪烁3次 恢复现场 每200msP1口流水灯左移1位 中断返回 图6-2-21主程序流程图 图6-2-22中断服务子程序流程图 【深入与提高】 二、用单片机外部中断技术来控制8个发光二极管实现流水灯效果 3、绘制流程图
【深入与提高】 二、用单片机外部中断技术来控制8个发光二极管实现流水灯效果 4、编写程序 5、电路仿真 6、电路实现
【课堂小结】 总结: 1.如何理解中断方式与查询方式的不同 ? 2.如何处理中断服务程序入口地址相邻较近的问题? 3. 再次复述软件仿真与硬件验证的具体步骤。 【课堂练习】 教材中“思考与练习”第3、4、5题 【课后作业】 教材中“思考与练习”第7、8题
实训项目三 中断控制的1位秒表(定时中断) 【实训目的】 1. 掌握实现精确定时的方法。 2. 知道定时中断0、定时中断1的中断向量地址。 3. 再次理解中断程序的结构。 4. 能读懂例中定时中断服务程序,会修改程序以实现不同的功能,并可以体会使用中断方式与查询方式在编程时的区别。 5. 进一步理解PUSH指令保护现场和POP指令恢复现场的作用。
【学什么】 一、定时中断程序结构 单片机采用定时中断时其程序结构主要包括主程序和中断服务程序两部分,其中,中断程序设计的基本任务包括中断的初始化设置和中断服务程序的编写。 • 设置中断允许控制寄存器IE; • 设置中断优先级寄存器IP; • 设置模式控制寄存器TMOD; • 给定时/计数器赋初始值,如TH0、TL0等; • 设置中断控制寄存器TCON中的TR0,启动定时器T0; • 编写中断服务程序指令,处理中断请求。
【学什么】 一、定时中断程序结构 假如现场保护只需将PSW和A的内容压入堆栈中加以保护,那么,整个中断程序可以参照下面的程序编写格式(以定时中断0为例): • ;起始程序段=================================================== • ORG 0000H • LJMP START • ORG 000BH • LJMP T0ZD • …… • ;主程序初始化段================================================ • ORG 0030H • START: • MOV SP, #5FH ;指定堆栈起始地址 • MOV IP, #00000010B ;设置定时/计数中断0的中断优先权 • MOV TMOD, #00000001B ;设置定时/计数中断0为工作方式1 • MOV TL0, #××H ;给定时/计数器赋定时初值 • MOV TH0, #××H ;给定时/计数器赋定时初值
【学什么】 一、定时中断程序结构 • …… ;其他的初始设置 • SETB TR0 ;启动定时/计数中断0 • SETB ET0 ;允许定时/计数中断T0 • SETB EA ;开启总中断 • ;主程序程序段====================================================== • MAIN: • …… • ; 定时中断0服务程序段=============================================== • T0ZD: • CLR TR0 ;关闭定时/计数中断0 • MOV TL0, #××H ;重赋定时初值 • MOV TH0, #××H ;重赋定时初值 • SETB TR0 ;重新启动定时/计数中断0 • PUSH PSW ;将PSW的内容压入堆栈进行现场保护 • PUSH ACC ;将A的内容压入堆栈进行现场保护 • SETB RS0 ;如果需要用到寄存器R时,选择寄存器工作组1 • CLR RS1 ;选择寄存器工作组1 • SETB EA ;CPU开启总中断 • 中断处理程序段(具体)…… • CLR EA ;关总中断 • POP ACC ;将A的内容弹出堆栈以实现现场恢复 • POP PSW ;将PSW的内容弹出堆栈以实现现场恢复 • RETI ;中断返回,恢复断点 • END
【学什么】 二、利用定时中断定时1秒的编程思路 • 中断服务程序入口地址 • 对定时中断T0中断初始化 • 设定定时器T0工作在方式1 • 计算定时初始值 • 软件计数器
实训要求:采用定时中断技术实现1位秒表的计时功能实训要求:采用定时中断技术实现1位秒表的计时功能 【怎样做】 一、绘制电路图 图6-3-1 1位秒表硬件电路连接图
T0中断入口000BH(T0ZD) 开始 判断50H是否已计时到10S? 40H单元是否够20次,即1S 重装定时初值,开始定时 设置向量表(T0中断入口地址000BH) 调用1位数码管显示子程序 变量初始化 软件计数器40H单元加1 设置T0定时工作方式、装初值TH0、TL0、开启内部中断ET0、允许总中断EA 否 等待(可以同时做其他事情) 是 计数器40H单元清零秒计时显示50H单元加1 图6-3-2主程序流程图 否 是 显示单元(50H)清0 (50ms到中断一次)现场保护 中断返回 图6-3-3中断服务子程序流程图 【怎样做】 二、绘制流程图 实训要求: 采用定时中断技术实现1位秒表的计时功能