1、单片微机原理及应用单片微机原理及应用教案东北电力大学电气工程学院单片微机原理及应用课程组 第五章80C51单片机中断系统课前复习:1、查表指令的功能2、查表程序设计的步骤新课内容:一、 中断(Interrupt)概述1 中断的概念 所谓中断是指CPU正在处理某件事时,外部发生了某一事件(如定时器溢出),请求(Requle)CPU迅速处理(Process),CPU暂时中断当前的工作,转入处理所发生的事件,处理完毕后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,产生中断的请求源称为中断源。2中断的调用过程二、与中断系统有关的SFRa) 定时/计数器控
2、制寄存器TCON(88H)IE1IT1IE0IT08BH8AH89H88HTCON(Time Control)的字节地址为88H,表明该寄存器的每一位可位寻址。其中:IT0:外部中断0的触发方式选择位,当IT0=0时为电平触发(Lever Triggering),IT0=1时为边沿触发(Edge Triggering)。IE0:为外部中断0的标志位。IT1:同IT0类似。IE1:同IE0类似。CPU是怎么知道中断请求的尼?CPU会在每个机器周期的S5P2采样外部中断引脚,根据以下两种情况置中断标志:i. 当IT0=0时,CPU查到外引脚为低电平,置“1”中断标志,外引脚为高电平时清“0” 中断
3、标志。ii. 当IT0=1时,CPU是根据前后两次检查外引脚的情况判断是否有中断请求,当前一次为高,后一次为低,置“1”中断标志。其他情况不置中断标志。CPU响应(Respond)中断,转向执行中断服务程序时会自动由硬件清“0”中断标志。b) 中断允许控制寄存器IE(A8H)IE的地址末位为8,说明它也可位寻址。EAESET1EX1ET0EX0AFHACHABHAAHA9HA8HEA:所有中断总的控制位。(E: Enable A:All)ES:串行口中断允许位。 (E: Enable S: Series)ET1:定时/计数器1中断允许位。EX1:外部中断1中断允许位。ET0:定时/计数器0中断
4、允许位。EX0:外部中断0中断允许位。c) 中断优先级控制寄存器IP(I:Interrupt,P:Priority)(B8H)也可位寻址。PSPT1PX1PT0PX0BCHBBHBAHB9HB8H通过对相应位设置可以改变该中断的优先级。MCS-51中断系统只有两级优先级,在同优先级内中断的优先顺序为:外部中断0、T0、外部中断1、T1、串行口。低级中断可以被高级中断所打断。MCS-51中断嵌套如下图所示:三、中断的处理过程中断的处理过程包括:中断请求、中断响应、中断服务和中断返回。1 中断请求当某个中断源要求CPU服务时,必须发出中断请求信号。内部中断源和外部中断源请求的方式不同。(1) 若是
5、外部中断源,需要将请求信号加到该中断的外部引脚上,CPU会在执行指令的每个机器周期内检查外部中断引脚,有请求信号时置“1”该中断标志位。分为两种情况。具体上面已详细讲过。(2) 若是内部中断源,CPU内部的硬件电路会自动置位该中断标志位,具体内容我们学习定时器和串行口时再讲。2 中断响应有了中断请求,CPU也不一定会响应该中断,要响应中断还必须满足一定的条件。中断响应的条件如下:(1) 该中断已“开中断”。(2) 此时CPU没有响应同级或更高级中断。(3) 当前正处在所执行指令的最后一个机器周期。(4) 正在执行的指令不是RETI或是访问IE、IP的指令。满足上述条件CPU就会响应该中断,响应
6、中断,在执行中断服务程序前还要执行以下几项操作:(1) 保护断点(Breakpoint)地址,将断点地址压入堆栈。(2) 撤消(Cancel)该中断源的中断请求标志(串行口除外)。(3) 关闭(Close)同级中断。(4) 将该中断源的入口地址送入PC。执行以上几项操作后就进入执行中断服务程序。3 中断服务(1) 保护现场(把断点地址信息压入堆栈保护)(2) 中断服务程序主体(3) 恢复现场4 中断返回中断服务内容完成,现场恢复,就可以回到原来被打断的地方继续运行。这个过程通过执行RETI指令自动完成,主要做下面两项工作。(1) 恢复断点地址。将响应中断时压入堆栈的断点地址弹出,送入PC。(2
7、) 开放同级中断定时/计数器概述课前复习:1、键盘的作用、分类、扫描方式2、外部中断源新课内容:一、 定时/计数器概述1 80C51有两个16位的定时/计数器,T0和T1。2 本质上讲都是计数器。对外部事件脉冲计数就作为计数器使用对内部的机器周期计数就作为定时器使用。(对外部脉冲计数时,信号脉冲应加到相应的外引脚上T0(P3.4),T1(P3.5))3 他们都是加法计数器,计满后就会溢出(Overflow),溢出时产生中断标志。二、与定时/计数器有关的SFR1定时/计数器工作方式控制寄存器TMOD(T:Timer,M:Mode)(89H)GATEC/TM1M0GATEC/TM1M0 高4位控制
8、T1 低4位控制T0TMOD不可位寻址,高4位和低4位分别控制T1和T0。(1)M1M0工作方式选择位。 M1M0 方式 功能 00 方式0 13位的计数器01 方式1 16位的计数器10 方式2 8位的计数器,初值自动重装11 方式3 两个8位的计数器,仅适用T0(2)C/T计数/定时方式选择位。C/T=1,为计数工作方式,对外部事件脉冲计数,作为计数器用(负跳变有效)。C/T=0,为定时工作方式,对内部机器脉冲计数,作定时器用。(3)GATE门控位。一般取GATE=0,在后面的定时器工作方式结构中分析原因。2 TCON:定时/计数器控制寄存器(88H)TF1TR1TF0TR0IE1IT1I
9、E0IT08FH8EH8DH8CH8BH8AH89H88HTCON可位寻址。低4位我们在中断部分已讲过,不再重复。高4位的功能与定时器有关,含义如下:TF0:定时/计数器T0溢出标志。 (T:Timer,F:Flag)TR0:定时/计数器T0运行控制位。(T:Timer,R:Run)TR0=1,T0运行TR0=0,T0停TF1:功能与TF0相同。TR1:功能与TR0相同。3计数寄存器TH0、TL0是T0的两个8位计数器,TH1、TL1是T1的两个8位计数器,并且高8位数存放在TH中,低8位数存放在TL中。三、定时/计数器的工作方式1方式0(自学)2方式1当M1M0=01时,定时/计数器工作在方
10、式1,逻辑结构如上图所示。内部为16位计数器,有TL0作低8位和TH0 作8位,16位计满溢出,溢出置位TF0。最大计数值为216=65536。原理分析总结:GATE=0,TR0=1,控制开关闭合,开始计数。GATE=1,同时 TR=1INT0=1时,才开始运行。总上分析,得出取GATE=03方式2 当M1M0=10时,定时/计数器工作在方式2,逻辑结构如上图所示。定时/计数器工作为8位,能自动恢复定时/计数器初值。即用TL0计数,计满溢出时自动将TH0中的值送入TL0,自动恢复初值。计数的最大值为256。初值的计算方法例 用定时器T0产生1ms的定时,系统的fosc=12MHZ分析:机器周期
11、=1us要产生1ms的定时,要数1ms/1us=1000个机器周期的脉冲,那么数机器周期的方法有两种方法 1000 10000 65536 初值(1)从0开始计数,计到1000即可,但是总要去看什么时候到1000?(2)从某个平台(初值)开始计数,计满刚好溢出,产生中断标志,请求中断具体计算:65536-1ms/1us=65536-1000=64536转换后存到计数寄存器中即可。四、定时/计数器的应用步骤1、初始化选择工作模式 MOV TMOD, .计数器付初值 MOV TH0, . MOV TL0, .启动计数器 SETB TR0开中断 SETB ET0 SETB EA2、提供中断入口地址3
12、、编写中断服务程序。(1)保护现场、恢复现场(2)重新赋初值(方式2除外)例:设计一程序,在P1.0引脚上输出周期为2ms方波。fOSC=6MHz.分析:要在P1.0引脚上输出方波,只要在P1.0引脚上交替输出高电平和低电平即可,用定时/计数器产生1ms定时,定时到改变输出信号。计算1ms定时的计数初值,1ms需要数500机器周期。初值=65536-500=6503665036/256 得整数部分为254,余数为12。程序如下: ORG 0000H LJMP SETUP ORG 000BH LJMP INET0P ORG 0030HSETUP: MOV TMOD,#01 MOV TH0,#25
13、4 MOV TL0,#12 SETB TR0 SETB ET0 SETB EAMAIN: SJMP $INET0P: CLR TR0 MOV TH0,#254 MOV TL0,#12 SETB TR0 CPL P1.0 RETI END从方式0和方式1的应用看,方式1比方式0有优点,计数范围大,初值计算不须换算,使用方便,建议采用。例:设计一程序,在P1.0引脚上输出400us方波。fOSC=6MHz. 用方式2实现分析:由于400us需要计数200个机器脉冲数,而8位计数器就能计数256,因此用方式2可以实现。初值=256-200=56程序如下: ORG 0000H LJMP SETUPOR
14、G 000BH LJMP INET0P ORG 0030HSETUP: MOV TMOD,#02 MOV TH0,#56 MOV TL0,#56 SETB TR0 SETB ET0 SETB EA MAIN: SJMP MAININET0P: CPL P1.0 RETI END4方式3 (略)定时/计数器的应用定时/计数器工作方式总结:1 根据实际需要选择合适的定时器及其工作方式。2 根据工作方式计算计数器的初值。3 编制程序注意以下几点。以T0为例(1) 对其初始化选择工作模式 MOV TMOD, .计数器付初值 MOV TH0, . MOV TL0, .启动计数器 SETB TR0开中断
15、SETB ET0 SETB EA(2) 提供中断入口地址(3) 编写中断服务程序。在中断服务程序里如需保护现场应保护,将有关的量压入堆栈,在中断返回之前还需恢复现场。如果不是方式2工作状态,还需重新赋初值。小结:重点掌握定时/计数器的应用步骤 定时/计数器的应用课前复习:1、定时/计数器的基础知识2、定时/计数器应用的步骤新课内容:一、产生方波二、产生任意矩形波例:设计一程序,在P1.0引脚上输出如下方波。fOSC=6MHz.P1.0 3ms 7ms方法一:采用两个定时器实现 T0、T1 T0定时 3ms T1定时7ms分析:T0先启动定时3ms,3ms计满产生中断,在T0的中断程序中启动T1
16、,同时关闭T0,同时把P1.0引脚取反,接着T1定时7ms,计满产生T1中断,在T1的中断程序中启动T0,同时关闭T1,同时把P1.0引脚取反,这样即产生了一个周期的波形。方法二:采用两个定时器实现 T0、T1 T0定时 3ms T1定时10ms分析:T0、T1同时启动分别定时3ms和10 ms,T0定时的3ms先计满,然后产生中断,在T0的中断程序中关闭T0,同时把P1.0引脚取反,而T1继续定时,直到定时10ms,计满产生T1中断,在T1的中断程序中启动T0,同时把P1.0引脚取反,这样即产生了一个周期的波形。方法三:采用一个定时器实现 T0或T1分析:产生波形的高电平都是3ms,低电平都
17、是7ms,所以用一个位信息来控制高、低电平这两种状态,用一个定时器就可以实现方法一程序如下: ORG 0000H LJMP SETUP ORG 000BH LJMP INET0PORG 001BH LJMP INET1P ORG 0030HSETUP: MOV TMOD,#11 MOV TH0,# MOV TL0,# ;3ms的初值 MOV TH1,# MOV TL0,# ;7ms的初值 SETB TR0 SETB ET0 SETB ET1 SETB EA SETB P1.0MAIN: SJMP $INET0P: CPL P1.0 SETB TR1 CLR TR0 MOV TH0,# ;3ms
18、的初值 MOV TL0,# RETIINET1P: CPL P1.0 SETB TR0 CLR TR1 MOV TH1,# MOV TL1,# ;7ms的初值 RETI END方法二程序如下: ORG 0000H LJMP SETUP ORG 000BH LJMP INET0PORG 001BH LJMP INET1P ORG 0030HSETUP: MOV TMOD,#11 MOV TH0,# MOV TL0,# ;3ms的初值 MOV TH1,# MOV TL0,# ;10ms的初值 SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA SETB P1.0
19、MAIN: SJMP $INET0P: CPL P1.0 CLR TR0 MOV TH0,# ;3ms的初值 MOV TL0,# RETIINET1P: CPL P1.0 SETB TR0 MOV TH1,# MOV TL1,# ;10ms的初值 RETI END 方法三程序如下: ORG 0000H LJMP SETUP ORG 000BH LJMP INET0P ORG 0030HSETUP: MOV TMOD,#01 MOV TH0,# MOV TL0,# SETB TR0 SETB ET0 SETB EA SETB P1.0 SETB 50HMAIN: SJMP MAININET0P:
20、 CPL P1.0 CPL 50H JB 50H, J3msMOV TH0,# MOV TL0,# ;7ms的初值 RETIJ3ms:MOV TH0,# MOV TL0,# ;3ms的初值 RETI END三、用定时器T0设计一个时钟思路:本次实验是在动态扫描电路基础上完成的,用数码管显示时钟,低两位显示秒,高两位显示分。时钟计数的信号就是1秒信号,那么主要是如何产生1s的信号呢?先用定时器T0定时0.1s,然后数10次即为1s 73H 72H 71H 70H 分 秒程序如下:ORG 0000HLJMP SETUPORG 000BHLJMP INET0PORG 0030HSETUP: MOV
21、70H,#0 MOV 71H,#0 MOV 72H,#0 MOV 73H,#0MOV TMOD,#01HMOV TH0,#60MOV TL0,#176SETB TR0SETB ET0SETB EAMAIN: LCALL DIS LJMP MAINDIS: . RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDELAY: MOV R2,#80HDEL: DJNZ R2,DEL RETINET0P: MOV TH0, #60MOV TL0,#176INC R5CJNE R5,#10,N1SMOV R5,#0INC 70HMOV R4,70HCJN
22、E R4,#10,N1SMOV 70H,#0INC 71HMOV R4,70HCJNE R4,#6,N1SMOV 71H,#0INC 72HMOV R4,72HCJNE R4,#10,N1SMOV 72H,#0INC 73HMOV R4,73HCJNE R4,#6,N1SMOV 73H,#0N1S : RETI END四、测量脉冲信号的频率 1s思路:采用T1计数,T0定时主要产生1s定时信号,然后测有多少个1s即可测出频率。产生1s的信号(0.1s数脉冲的个数)10=1s测得的频率ORG 0000H LJMP SETUP ORG 000BH LJMP INET0PORG 001BH LJMP
23、 INET1P ORG 0030HSETUP: MOV TMOD,#11 MOV TH0,#60 MOV TL0,#176 ;0.1ms的初值 MOV TH1,# 0 MOV TL1,# 0 ;计数的初值 SETB TR0 SETB TR1 SETB ET0 SETB EA MAIN: SJMP $INET0P: CLR TR1 ;T1停止计数 CLR TR0 ;T0停止定时 MOV R2,TH1 MOV R3,TL1 ;把数的脉冲频率数取出 MOV TH1,# 0 MOV TL1,# 0 MOV TH0,#60 ;重新赋初值,为下一次测量做准备 MOV TL0,#176 SETB TR0 SETB TR1 RETI END
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1