《定时计数器与中断系统.ppt》由会员分享,可在线阅读,更多相关《定时计数器与中断系统.ppt(51页珍藏版)》请在三一办公上搜索。
1、第四章 定时/计数器与中断系统 中断系统结构 中断系统相关寄存器配置 应用程序设计 外部中断源扩展定时/计数器的工作方式特点定时/计数器的控制寄存器定时/计数器应用程序设计,中断系统基本概念:中断 中断源 中断优先级 中断嵌套,4.1 中断系统结构,2.中断响应过程,3.MCS-51的中断系统结构示意图,MCS-51中有5个中断源,包括两个外部中断源和三个内部中断源。52系列增加了一个中断源定时器计数器T2,即有6个中断源。两个外部中断源INT0和INT1,外部设备的中断请求信号、掉电等故障信号都可以从INT0或INT1引脚输入。三个内部中断源为定时/计数器T0和T1溢出中断以及串行口中断。,
2、5.2.1 中断源,4.中断源,1.外部中断外部中断是由外部信号引起的,共有两个外部中断,它们的中断请求信号分别从引脚INT0(P3.2)和INT1(P3.3)上引入。外部中断请求有两种信号触发方式,即电平触发方式和跳变触发方式,可通过设置有关控制位进行定义。当设定为电平有效方式时,若INT0或INT1引脚上采样到有效的低电平,则向CPU提出中断请求;当设定为跳变有效方式时,若INT0或INT1引脚上采样到有效负跳变,则向CPU提出中断请求。,5.中断入口地址,4.2 中断控制寄存器,1.定时器计数器控制寄存器TCON,IT0(TCON0)外部中断0触发方式控制位,IT00 时,低电平有效;当
3、IT01 时,下降沿有效。,IT1(TCON2)外部中断1触发方式控制位,IT10 时,低电平有效;当IT11 时,下降沿有效。,TF1(TCON7)T1溢出标志位,由硬件置位,响应中断时由硬件清0。不用中断时用软件清0。TF0(TCON5)T0溢出标志位,由硬件置位,响应中断时由硬件清0。不用中断时用软件清0。IE1(TCON3)IE11时,外部中断1中断标志位。IE0(TCONl)IE01时,外部中断0中断标志位。,2.中断允许控制寄存器IE,IE寄存器中各位设置:为0时,禁止中断;为 1时,允许中断。系统复位后IE寄存器中各位均为0,此时禁止所有中断。,与中断有关的控制位共6位,即:EX
4、0(IE0)外部中断0中断允许位。ET0(IE1)T0中断允许位。EX1(IE2)外部中断1中断允许位。ET1(IE3)T1中断允许位。ES(IE4)串行口中断允许位。EA(IE7)CPU中断允许位。当EA1,允许所有中断开放,此时各中断的允许或禁止由各中断源的中断允许控制位进行设置;当EA0时,屏蔽所有中断。,IP寄存器中各位设置:为0时,为低中断优先级;为1时,设为高中断优先级。系统复位后IP寄存器中各位均为0,即此时全部设定为低中断优先级。,3.中断优先级控制寄存器IP,在同一优先级内有一个由内部查询序列确定的笫二个优先级结构。其排列如下:中断源 中断优先级 外部中断0最高 定时器T0中
5、断 外部中断1 定时器T1中断 串行口中断最低,51单片机共有5个中断源,由4个特殊功能寄存器TCON、SCON、IE和IP进行管理和控制。在中断应用程序设计中,需要对以下几个内容进行设置:中断服务程序入口地址的设定。某一中断源中断请求的允许与禁止。对于外部中断请求,还需进行触发方式的设定。各中断源优先级别的设定。,4.3 中断服务程序的设计,中断响应很突出的一点是它的随机性,因此中断服务程序中常常要考虑以下几点:保护断点和现场、恢复断点和现场在中断响应过程中,断点的保护主要由硬件电路自动实现。它将断点压入堆栈,再将中断服务程序的入口地址送入程序计数器PC,使程序转向中断服务程序,即为中断源的
6、请求服务。,所谓现场是指中断发生时单片机中存储单元、工作寄存器、特殊功能寄存器中的数据或标志位等。一般包括累加器 A、工作寄存器 R0R7以及程序状态字PSW等。保护的方法可以有以下几种:通过堆栈操作指令PUSH direct;通过切换工作寄存器组;通过单片机内部存储器单元暂存。在结束中断服务程序返回断点处之前要恢复现场,与保护现场的方法相对应。而恢复断点也是由硬件电路自动实现的,中断服务程序的最后一条指令必须是RETI指令。,利用定时/计数器扩展外部中断源定时加查询方式扩展外部中断源,4.4 外部中断源的扩展,利用T0或T1的外部事件输入引脚T0、T1作为边沿触发的外部中断源。这时应设置定时
7、/计数器为计数器方式,而计数常数为满刻度值。外部输入的脉冲在负跳变时有效,计数器加1后即溢出,向CPU申请中断。,定时/计数器扩展外部中断源,外部中断源的扩展电路,中断加查询扩展外部中断源,外部中断源查询流程图,INT0的中断服务程序如下:PINTO:PUSH PSW;保护现场PUSH ACC JB P1.0,LOOP1;转向中断服务程序1 JB P1.l,LOOP2;转向中断服务程序2 JB P1.2,LOOP3;转向中断服务程序3 JB P1.3,LOOP4;转向中断服务程序4,INTEND:POP ACC;恢复现场 POP PSW RETILOOP1:;中断服务程序1 AJMP INTE
8、NDLOOP2:;中断服务程序2 AJMP INTENDLOOP3:;中断服务程序3 AJMP INTENDLOOP4:;中断服务程序4 AJMP INTEND,外部中断应用举例,中断控制1盏灯闪烁,4.5 定时/计数器结构和工作原理,本质是一致的,都是相当于加法计数器,来一个有效信号,计数单元自动加1,加满后溢出引发中断。计数源不一样:定时器模式下,T0/T1对系统内部时钟计数,即启动T0/T1后,每过一个机器周期,计数单元自动加1。计数器模式下,T0/T1对外部引脚(P3.4/P3.5)信号计数,启动T0/T1后,每次检测到引脚上有一个下降沿信号,计数单元自动加1。,51单片机内部有两个定
9、时/计数器T0/T1,既可以工作在定时器模式,也可以工作在计数器模式。,定时器、计数器区别与联系:,6.2 定时器/计数器的控制寄存器1.定时器控制寄存器(TCON)TCON寄存器有关定时的控制位共有4位,TF0和TF1:计数溢出标志位。当计数器计数溢出(计满)时,该位置1。使用查询方式时,此位作状态位供查询,但应注意查询有效后应以软件方法及时将该位清0;使用中断方式时,此位作中断标志位,在转向中断服务程序时由硬件自动清0。TR0和TR1:定时器运行控制位。当TR0(TR1)=0,停止定时器/计数器工作;TR0(TR1)=1,启动定时器/计数器工作。该位根据需要以软件方法使其置1或清0。,2.
10、工作方式控制寄存器(TMOD)TMOD用于设定定时器/计数器的工作方式,不能位寻址,它的低4位定义T0,高4位定义T1。GATE:门控位。GATE=0时,以运行控制位TRx=1启动定时器;GATE=1,且TRx=1时,以外中断请求信号启动定时器。:工作模式选择位。=0,定时器模式;=1,计数器模式。M1M0:工作方式选择位,其对应关系如表6-1所示。,表6-1 定时器/计数器工作方式选择,3.中断允许控制寄存器(IE)与定时器/计数器有关的位是:EA、ET0、ET1。EA:中断允许总控制位。ET0和ET1:定时计数中断允许控制位。ET0(ET1)=0,禁止定时(或计数)中断;ET0(ET1)=
11、1,允许定时(或计数)中断。,方式0:几乎不用方式1:重点掌握方式2:重点掌握方式3:很少用,6.3 定时/计数器工作方式,1.方式0 方式0下的电路逻辑结构如图6-2所示,以T0为例。内部计数器是13位,由TH0的8位和TL0的低5位构成。当TL0低5位计数溢出时向TH0进位,TH0计数满时则将TF0置1。,如图所示,当=0时,多路开关接通振荡脉冲的12分频输出,为定时工作方式。当=l时,多路开关接通计数引脚(TO),外部计数脉冲由引脚TO输入,为计数工作方式。当GATE=0时,由TR0控制计数器的接通与断开,TR0=,T0工作;TR0=0,T0停止工作。当GATE=1,且TR0=1时,由I
12、NTO 控制计数器的接通与断开,INT0=1,T0工作;INT0=0,T0停止工作。当为计数工作方式时,计数值的范围是:1213 当为定时工作方式时,定时时间的计算公式为:(213-计数初值)晶振周期(振荡周期)12 或(213-计数初值)机器周期,2.方式1方式1是16位计数结构的工作方式,与方式0的区别仅在于计数器的位数不同,由TH0的8位和TL0的8位构成。如图6-3所示。当为计数工作方式时,计数值的范围是:1216当为定时工作方式时,定时时间的计算公式为:(216-计数初值)晶振周期12 或(216-计数初值)机器周期,3.方式2方式2具有自动重新加载计数初值的8位计数器,即以TL作计
13、数器,TH作预置寄存器,初始化时把计数初值分别装入TL和TH中。当计数溢出后,置TF为1的同时,由TH自动给TL重新加载。这样,可以省去在程序中重装常数的操作。但方式3计数位数少,计数范围小,最大只能到255。如图6-4所示。当为计数工作方式时,计数值的范围是:128当为定时工作方式时,定时时间的计算公式为:(28-计数初值)晶振周期12 或(2n-计数初值)机器周期,4.方式3 在工作方式3下,T0拆成两个独立的8位计数器TL0和TH0。TL0使用T0的各控制位和引脚信号,其工作情况与方式0或方式1完全相同。而TH0只能作为简单的定时器使用,借用TR1作为运行控制位,计数溢出置位TF1。如果
14、T0已工作在工作方式3,则T1只能工作在方式0、方式l或方式2下,因为TR1、TF1已被T0借用,T1没有运行控制和溢出中断功能,此时定时器T1仅由控制位切换其定时或计数功能,当计数器计数满溢出时,只能将输出送往串行口。所以,T1常作为串行口的波特率发生器使用,或不需要中断的场合。因定时器1的TR1被占用,因此其启动和关闭较为特殊,当设置好工作方式时,定时器1即自动开始运行。若要停止操作,只需送入一个设置定时器1为方式3的方式字即可。,工作方式3,5,位,T0工作于方式3时T1工作于方式0的功能框图,6.4 定时/计数器应用举例 MCS-51的定时器/计数器是可编程的,因此,在利用定时器/计数
15、器进行定时或者计数之前,首先要通过软件对它进行初始化。初始化包括下述几个步骤:(1)配置定时/计数器工作方式(TMOD);(2)计数单元赋初值(THx,TLx);(3)是否开中断(EA,ETx);(4)启动定时/计数器(TRx)。,一、确定工作模式、工作方式,计算初始值,定时器模式:,t定时时间Tc 机器周期TC定时/计数器初始值Fosc晶体振荡器频率L计数单元的长度,计数器模式:,S=2L-TC,S脉冲信号计数值 L计数单元的长度 TC计数单元初始值,二、初始化定时/计数器,三、设计程序流程图,四、编程实现,调试,例6-1:电路如图所示,编程实现单片机控制8盏灯循环闪烁,每盏灯点亮时间为50
16、ms,系统晶振为12MHz,ORG 0000H AJMP START;跳转到程序开始处 ORG 0030HSTART:MOV SP,#68H;堆栈指针上移 MOV P2,#0FFH;初始化,LED全灭 MOV A,#0FEH;初始化,累加器A保存LED状态信息 MOV TMOD,#10H;设置T1工作在定时模式,方式1 MOV TH1,#3CH;定时器计数单元赋初值 MOV TL1,#0B0H SETB TR1;启动定时器LED_LOOP:JNB TF1,$;定时时间没有到,继续等待 CLR TF1;手动清除中断标志位 MOV P2,A;改变LED状态 RL A;循环左移一位 MOV TH1,
17、#3CH MOV TL1,#0B0H SJMP LED_LOOP END,中断方式,程序代码如下:ORG 0000H AJMP START;跳转到程序开始处 ORG 001BH AJMP INT_T1;跳转到定时中断1处理程序处 ORG 0030HSTART:MOV SP,#68H;堆栈指针上移 MOV P2,#0FFH;初始化,LED全灭 MOV A,#0FEH;初始化,累加器A保存LED状态信息 MOV TMOD,#10H;设置T1工作在定时模式,方式1 MOV TH1,#3CH;定时器计数单元赋初值 MOV TL1,#0B0H SETB TR1;启动定时器 SETB EA;开总中断 SE
18、TB ET1;开定时中断T1 SJMP$;等待中断INT_T0:PUSH PSW;本次需要利用累加器A传递LED状态,;故不必将A的内容压入堆栈 MOV TH1,#3CH;重新赋初值 MOV TL1,#0B0H MOV P2,A;改变LED状态 RL A;循环左移一位POPPSW RETI END,例6-2:电路如图所示,系统晶振为12MHz,程序控制8盏灯轮流点亮,但要求看起来8盏灯同时点亮。,分析:人眼的视觉停留时间大约20ms左右,要想8盏灯轮流点亮而看起来一齐亮,则每盏灯第一次点亮和第二次点亮的时间间隔不能超过20ms,不妨设计为每盏灯点亮200us,然后依次循环,则每盏灯中途熄灭的时
19、间间隔大约1.4ms,远远小于人眼视觉停留时间,这样人眼将不会分辨出灯曾经熄灭过,从而达到看起来一齐亮的效果。这一设计思路在数码管动态扫描显示中常常用到。选择定时器T1,短时间定时采用方式2,定时200us,初始值计算:TC=2L t*Fosc/12=28 200*10-6*12*106/12=56=38H,中断方式程序代码如下:ORG 0000H AJMP START;跳转到程序开始处 ORG 001BH AJMP INT_T1;跳转到定时中断1处理程序处 ORG 0030HSTART:MOV SP,#68H;堆栈指针上移 MOV P2,#0FFH;初始化,LED全灭 MOV A,#0FEH
20、;初始化,累加器A保存LED状态信息 MOV TMOD,#20H;设置T1工作在定时模式,方式2 MOV TH1,#38H;定时器计数单元赋初值 MOV TL1,#38H SETB TR1;启动定时器 SETB EA;开总中断 SETB ET1;开定时中断T1 SJMP$;等待中断INT_T0:PUSH PSW MOV P2,A;改变LED状态 RL A;循环左移一位 POP PSW RETI END,例6-3:系统晶振为12MHz,利用定时器T0的工作方式1实现P1.0管脚输出周期为2s的方波。,分析:在晶振为12MHz时,方式1最大能实现的定时时间为216*1us=65536us,要使P1
21、.0输出周期为2s的方波,定时时间为1s,对于类似的长时间定时要求,可以采用基准定时加循环的方法,比如要求定时1s,选择T0的方式1,基准定时50ms,循环20次即为1s。,ORG 0000H AJMP START;跳转到程序开始处 ORG 000BH AJMP INT_T0;跳转到定时中断0处理程序处 ORG 0030HSTART:MOV SP,#68H SETBP1.0;初始化P1.0 MOV R7,#20;循环次数赋初值 MOV TMOD,#01H;设置T0工作在定时模式,方式1 MOV TH0,#3CH;定时器计数单元赋初值 MOV TL0,#0B0H SETB TR0;启动定时器 SETB EA;开总中断 SETB ET0;开定时中断T0 SJMP$,/*中断服务程序*/INT_T0:PUSHACCPUSHPSW MOV TH0,#3CH;重新赋初值 MOV TL0,#0B0HDJNZR7,EXIT;未到1s,退出中断MOVR7,#20;循环次数重新赋初值 CPLP1.0;1s定时时间到,改变P1.0状态EXIT:POPPSWPOPACC RETI END,
链接地址:https://www.31ppt.com/p-5960812.html