
微格教学课程教案
————单片机原理与应用及c51
程序设计(中断系统)
班级:
姓名:
学号:
微格教学课程教案
教研室:计算机应用 授课教师:
| 课程名称 | 单片机原理与应用及C51程序设计 | 授课时间 | 2课时 |
| 主 要 教 学 内 容 | 时间分配 | ||
| 第6章 第六章 MCS-51单片机的内部资源及编程(中断系统) 一、中断系统的基本概念 1 中断源及中断请求 2 中断优先权控制 3 中断允许与中断屏蔽 4 中断响应与中断返回 二、外部中断 1 外部中断的方式选择 2 外部中断的系统设计应用 3 多级外部中断的扩展应用; | " 10 10 15 10 15 15 15 | ||
| 教学目的 | 单片机的中断系统是单片机的一个重要组成部分,中断系统为单片机提供处理外部紧急事件的能力,使CPU不必总是处于查询状态,从而节省了系统的内部资源。 | ||
| 教学重点 | MCS-51单片机中断源的种类及工作方式;中断控制寄存器IE、中断优先级寄存器IP及定时器/计数器及外部中断控制寄存器TCON的使用方法。 | ||
| 教学难点 | 外部中断的结构及原理;中断服务程序的编写方法。 | ||
| 教学方法 使用教具 | 讲授与多媒体教学 | ||
| 拟留作业 | 6-3、6-4、6-5 | ||
| 授课过程 | 6.4 中断系统 6.4.1 中断的基本概念 1.中断源及中断请求 2.中断优先权控制 3.中断允许与中断屏蔽 4.中断响应与中断返回 6.4.2 MCS-51单片机的中断系统 1.中断源 1.外部中断 INT0和INT1 外部引脚P3.2和P3.3输入,有两种触发方式:电平触发及跳变(边沿)触发。由特殊功能寄存器TCON来管理. TCON D7 D6 D5 D4 D3 D2 D1 D0 (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 IT0(IT1):外部中断0(或1)触发方式控制位。IT0(或IT1)被设置为0,则选择外部中断为电平触发方式;IT0(或IT1)被设置为1,则选择外部中断为边沿触发方式。 IE0(IE1):外部中断0(或1)的中断请求标志位。 在电平触发方式时,CPU在每个机器周期的S5P2采样P3.2(或P3.3),若P3.2(或P3.3)引脚为高电平,则IE0(IE1)清0,若P3.2(或P3.3)引脚为低电平,则IE0(IE1)置1,向CPU请求中断;CPU响应后能够由硬件自动将IE0(或IE1)清零。在边沿触发方式时,若第一个机器周期采样到P3.2(或P3.3)引脚为高电平,第二个机器周期采样到P3.2(或P3.3)引脚为低电平时,由IT0(或IT1)置1,向CPU请求中断。 对于电平触发方式,只要P3.2(或P3.3)引脚为低电平,IE0(或IE1)就置1,请求中断,CPU响应后不能够由硬件自动将IE0(或IE1)清零。如果在中断服务程序返回时,P3.2(或P3.3)引脚还为低电平,则又会中断,这样就会出一次请求,中断多次的情况。为避免这种情况,只有在中断服务程序返回前撤消P3.2(或P3.3)的中断请求信号,即使P3.2(或P3.3)为高电平。通常通过下图所示外电路来实现 . 外部中断请求信号通过D触发器加到单片机P3.2(或P3.3)引脚上。当外部中断请求信号使D触发器的CLK端发生正跳变时,由于D端接地,Q端输出0,向单片机发出中断请求。CPU响应中断后,利用一根口线P1.0作应答线。 并在中断服务程序中加以下两条指令来撤除中断请求。 ANL P1.0,#0FEH ORL P1.0,#01H 2.定时/计数器T0和T1中断 当定时/计数器T0(或T1)溢出时,由硬件置TF0(或TF1)为“1”,向CPU发送中断请求,当CPU响应中断后,将由硬件自动清除TF0(或TF1)。 3.串行口中断 MCS-51的串行口中断源对应两个中断标志位:串行口发送中断标志位TI和串行口接收中断标志位RI。无论哪个标志位置“1”,都请求串行口中断,到底是发送中断TI还是接收中断RI,只有在中断服务程序中通过指令查询来判断。串行口中断响应后,不能由硬件自动清“0”,必须由软件对TI或RI清“0”。 2.中断允许控制 MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。中断允许寄存器IE的字节地址为A8H,可以进行位寻址. IE D7 D6 D5 D4 D3 D2 D1 D0 (A8H) EA ET2 ES ET1 EX1 ET0 EX0 EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。 ET2:定时器/计数器T2的溢出中断允许位 ES:串行口中断允许位。 ET1:定时器/计数器T1的溢出中断允许位。 EX1:外部中断 INT1的中断允许位。 ET0:定时器/计数器T0的溢出中断允许位。 EX0:外部中断 INT0的中断允许位。 3.优先权控制 每个中断源有两级控制:高优先级和低优先级。通过由内部的中断优先级寄存器IP来设置.中断优先级寄存器IP的字节地址为B8H,可以进行位寻址. IP D7 D6 D5 D4 D3 D2 D1 D0 (B8H) PT2 PS PT1 PX1 PT0 PX0 PT2:定时器/计数器T2的中断优先级控制位,只用于52子系列。 PS:串行口的中断优先级控制位。 PT1:定时器/计数器T1的中断优先级控制位。 PX1:外部中断INT1的中断优先级控制位。 PT0:定时器/计数器T0的中断优先级控制位。 PX0:外部中断INT0的中断优先级控制位。 如果某位被置“1”,则对应的中断源被设为高优先级;如果某位被清“0”,则对应的中断源被设为低优先级。对于同级中断源,系统有默认的优先权顺序, 中断源 优先级顺序 外部中断0 最高 定时/计数器T0中断 外部中断1 定时/计数器T1中断 串行口中断 定时/计数器T2中断 最低 通过中断优先级寄存器IP改变中断源的优先级顺序可以实现两个方面的功能:改变系统中断源的优先权顺序和实现二级中断嵌套。 对于中断优先权和中断嵌套,MCS-51单片机有以下三条规定。 (1)正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,一直到该中断服务程序结束,返回了主程序且执行了主程序中的一条指令后,CPU才响应新的中断请求。 (2)正在进行的低优先级中断服务程序能被高优先级中断请求所中断,实现两级中断嵌套。 (3)CPU同时接收到几个中断请求时,首先响应优先级最高的中断请求。 四.中断响应 1.中断响应的条件 (1) 无同级或高级中断正在处理。 (2) 现行指令执行到最后一个机器周期且已结束。 (3) 若现行指令为RETI或访问IE、IP的指令时,执行完该指令且紧随其后的另一条指令也已执行完毕。 2.中断响应过程 (1) 根据中断请求源的优先级高低,对相应的优先级状态触发器置“1”。 (2) 保护断点,即把程序计数器PC的内容压入堆栈保存。 (3) 清内部硬件可清除的中断请求标志位(IE0、IE1、TF0、TF1)。 (4) 把被响应的中断服务程序入口地址送入PC,从而转入相应的中断服务程序执行。 各中断服务程序的入口地址见表 中断源 入口地址 外部中断0 0003H 定时/计数器0 000BH 外部中断1 0013H 定时/计数器1 001BH 串行口 0023H 定时/计数器2(仅52子系列有) 002BH 3.中断响应时间 所谓中断响应时间是指CPU检测到中断请求信号到转入中断服务程序入口所需要的机器周期。 MCS-51单片机响应中断的最短时间为3个机器周期。 6.4.4 MCS-51中断系统的应用 【例6-9】某工业监控系统,具有温度、压力、PH值等多路监控功能,中断源的连接如图5.26所示。对于PH值,在小于7时向CPU申请中断,CPU响应中断后使P3.0引脚输出高电平,经驱动,使加碱管道电磁阀接通1秒钟,以调整PH值。 系统监控通过外中断INT0来实现,这里就涉及多个中断源的处理,处理时往往通过中断加查询的方法来实现。多个中断源通过“线或”接于 INT0上。那么无论哪个中断源提出请求,系统都会响应中断,响应后,进入中断服务程序,在中断服务程序中通过对P1口线的逐一检测来确定哪一个中断源的提出了中断请求,进一步转到对应的中断服务程序入口位置执行对应的处理程序。这里只针对PH<7时的中断构造了相应的中断服务程序INT02,接通电磁阀延时1秒钟的延时子程序DELAY已经构造好了,只须调用即可。 汇编程序如下:(只涉及中断程序,注意外中断INT0中断允许,且为电平触发) ORG 0003H ;外部中断0中断服务程序入口 JB P1.0,INT00 ;查询中断源,转对应的中断服务子程序 JB P1.1,INT01 JB P1.2,INT02 JB P1.3,INT03 ORG 0080H ;PH值超限中断服务程序 INT02:PUSH PSW ;保护现场 PUSH ACC SETB PSW.3 ;工作寄存器设置为1组,以保护原0组的内容 SETB P3.0 ;接通加碱管道电磁阀 ACALL DELAY ;调延时1秒子程序 CLR P3.0 ;1秒钟到关加碱管道电磁阀 ANL P1,#0BFH ORL P1,#40H ;这两条用来产生一个P1.6的负脉冲,用来撤除PH<7 ;的中断请求 POP ACC POP PSW RETI C语言程序: #include sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit P16=P1^6; sbit P30=P3^0; void int0() interrupt 0 using1 { void int00(); void int01(); void int01(); void int01(); if (P10= =1) {int00();} //查询调用对应的函数 else if (P11= =1) {int01();} else if (P12= =2) {int02();} else if (P13= =1) {int03();} } | ||
| 授课总结 | 中断系统是51单片机里最难懂也是最难理解的部分,学懂该部分对今后的学习起着至关重要的影响。 | ||
