资源描述
MCS-51单片机的中断系统和定时计数器
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
MCS—51单片机的中断系统和定时/计数器
中断系统在计算机应用系统中起着十分重要的作用,良好的中断系统能提高计算机对外界异步事件的处理能力和响应速度,从而扩大计算机的应用范围。本章介绍MCS—51的单片机的中断系统和定时器/计数器.
1。1中断系统结构
1.1.1 MCS—51中断系统的总体结构
在单片机中,为了实现中断功能而配置的软件和硬件,称为中断系统。中断系统的处理过程包括中断请求、中断响应、中断处理和中断返回。如图5.1所示,MCS-51中断系统的总统结构,图中包括:5个中断请求源,4个用于中断控制和管理的可编程和可位寻址的特殊功能寄存器(中断请求源标志寄存器TCON及SCON,中断允许控制寄存器IE和中断优先级控制寄存器IP),提供两个中断优先级,可实现二级中断嵌套,且每一个中断源可编程为开放或屏蔽。
图5.1 中断系统总体结构
1.1。2 中断请求源及相关的特殊功能寄存器TCON和SCON
所谓中断源就是引起中断的原因或发出中断请求的中断来源。在51子系列中有五个中断源(52子系列为6个)它们是:
——外部中断0请求,低电平或脉冲下降沿有效。由P3。2引脚输入。
-—外部中断1请求,低电平或脉冲下降沿有效。由p3。3引脚输入。
T0——定时器/计数器0溢出中断请求。外部计数脉冲由P3.4引脚输入。
T1-—定时器/计数器1溢出中断请求。外部计数脉冲由P3。5引脚输入。
TX/RX——串行中断请求。当串行口完成一帧发送或接受时,请求中断。
每一个中断源都对应有一个中断请求标志位来反映中断请求状态,这些标志位分布在特殊功能寄存器TCON和SCON中。
1. 定时器/计数器控制寄存器TCON
TCON为定时器/计数器的控制寄存器,它同时也锁存T0、T1溢出中断源标志、外部中断请求标志,与这些中断请求源相关的位含义如下:
TCON(88H):
D7 D6 D5 D4 D3 D2 D1 D0
TF1
TF0
IE1
IT1
IE0
IT0
IT0(TCON。0):选择外部中断请求0()为边沿触发或电平触发方式的控制位。IT0=0,为电平触发方式, 引脚位低电平时向CPU申请中断;IT0=1,为边沿触发方式,输入脚上的高到低的负跳变时向CPU申请中断。IT0可由软件置“1”或清“0”.
IE0(TCON.1):外部中断0的中断申请标志。当IT0=0即电平触发方式时,每个机器周期的S5P2采样INT0,若INT0为低电平,则置“0”IE0.当IT0=1,即INT0程控为边沿触发方式时,则置“1”IE0。IE0为1表示外部中断0正在向CPU申请中断.当CPU响应该中断,转向中断服务程序时,由硬件清“0”IE0.
IT1(TCON.2):选择外部中断请求1()为边沿触发方式或电平触发方式的控制位,其作用和IT0类似。
IE1(TCON。3):外部中断1的中断申请标志。其意义和IE0相同。
TF0(TCON.5):8031片内定时器/计数器0溢出中断申请标志。当启动T0计数后,定时器/计数器0从初始值开始1计数,当最高位产生溢出时,由硬件置“1”TF0,向CPU申请中断,CPU 响应TF0中断时,会自动清“0”TF0。
TF1(TCON.7):8031片内定时器/计数器1溢出中断申请标志,功能和TF0类似。
当MCS—51系统复位后,TCON各位被清0。
2. 串行口控制寄存器SCON
SCON为串行口控制寄存器,SCON的低二位,锁存串行口的接收中断和发送中断标志,其格式如下:
SCON(98H)
D7 D6 D5 D4 D3 D2 D1 D0
TI
RI
TI(SCON。1):8031串行口的发送中断标志,TI=1表示串行口发送器正在向CPU申请中断,向串行口的数据缓冲器SBUF写入一个数据后,就立即启动发送器继续发送。值得注意的是,CPU响应发生器中断请求,转向执行中断服务程序时,并不清“0”TI,TI必须由用户的中断服务程序清“0”。
RI(SCON.0):串行口接收中断标志,RI为1表示串行口接收器正在向CPU申请中断,同样RI必须由用户的中断服务程序清“0”.
一般情况,以上五个中断源的中断请求标志是由中断机构硬件电路自动置位的,但也可以人为的通过指令(SETB BIT),对以上两个控制寄存器的中断标志位置位,即“软件代请中断”,这是单片机中断系统的一大特点.
1.2 中断控制
1。2.1中断允许寄存器IE
MCS—51单片机对中断的开放或屏蔽,是由片内的中断允许寄存器IE控制的.IE的格式如下图所示:
IE(0A8H)
D7 D6 D5 D4 D3 D2 D1 D0
EA
—
-
ES
ET1
EX1
ET0
EX0
IE寄存器各位功能如下:
EA(IE.7):CPU的中断开放/禁止总控制位。
EA=0时禁止所有中断;EA=1时,开放中断,但每个中断还受各自的控制位控制。
ES(IE.4)允许或禁止串行口中断。
ES=0时,禁止中断;ES=1时,允许中断.
ES(IE.3):允许或禁止定时/计数器1溢出中断.
ET1=0时,禁止中断;EX1=1时,允许中断。
ET1(IE.2):允许或禁止外部中断1()中断。
EX1=0时,禁止中断;EX1=1时,允许中断。
EX1(IE.1):允许或禁止定时器/计数器0溢出中断。
ET0=0时,禁止中断,ET0=1时允许中断。
EX0(IE.0):允许或禁止外部中断0()中断。
EX0=0时,禁止中断;EX0=1时,允许中断。
当MCS—51系统复位后,IE各位均被清0,所有中断被禁止。
1。2。2 中断优先级寄存器IP
MCS-51单片机设有两级优先级,高优先级中断和低优先级中断.中断源的中断优先级分别由中断控制寄存器IP的各位来设定。IP的格式如下:
IP (0B8H):
D7 D6 D5 D4 D3 D2 D1 D0
-
—
-
PS
PT1
PX1
PT0
PX0
1. IP 寄存器各位功能如下:
PS(IP。.4):串行口中断优先级控制位。
PS=1,为高优先级中断,PS=0,为低优先级中断。
PT1(IP.3):定时/计数器T1中断优先级控制位。
PT1=1,为高优先级中断,PT1=0,为低优先级中断。
PX1(IP.2):外部中断1中断优先级控制位。
PX1=1,为高优先级中断,PX1=0,为低优先级中断.
PT0(IP.1):定时器/计数器T0中断优先级控制位。
PT0=1,为高优先级中断,PT1=0,为低优先级中断。
PX0(IP.0):外部中断0中断优先级控制位。
PX0=1,为高优先级中断,PX0=0,为低优先级中断。
中断申请源的中断优先级的高低,由中断优先级控制寄存器IP的各位控制,IP的各位由用户用指令来设定。复位操作后,IP= ××000000B,即各中断源均设为低优先级中断。
2.中断系统规定
(1)若CPU正在对某一个中断服务。则级别低的或同级中断申请不能打断正在进行的服务.而级别高的中断申请则能中止正在进行的服务,使CPU转去更高级的中断服务,待服务处理完毕后,CPU再返回原中断服务程序继续执行。
(2)若多个中断源同时申请中断,则级别高的优先级先服务。
(3)若同时收到几个同一级别的中断请求时,中断服务取决于系统内部辅助优先顺序。在每个优先级内,存在着一个辅助优先级,其优先顺序如下:
中断源 中断级别
IE0 外部中断0 最高级别
TF0 定时/计数器0溢出中断
IE1 外部中断1
TF1 定时器/计数器1溢出中断
RI,TI 串行口中断 最低优先级
综上所述,可对中断系统的规定概括为以下两条基本规则:
① 低优先级中断系统的规定被高级中断系统中断,反之不能;
② 当多个中断源同时发出申请时,级别高的优先级先服务(先按高低优先级区分,再按辅助优先级区分).
1。3中断响应
1.3.1 CPU响应中断的条件及过程
1. 响应条件
MCS—51单片机在每个机器周期的S5P2期间顺序采样各中断请求标志位,如有置位,且下列三种情况都不存在,那么,在下一周期的S1期间响应中断。否则,采样的结果被取消,CPU不能立即响应中断.CPU不响应中断的三种情况是:
(1) CPU正在处理同级或高优先级的中断。
(2) 现行的机器周期不是所执行指令的最后一个机器周期。
(3) 正在执行的指令是RETI或访问IE、IP的指令。CPU在执行RETI或访问IE、IP的指令后,至少需要再执行一条其他指令后才会响应中断请求。
2.中断响应过程
CPU响应中断后,由硬件执行下列操作序列:
(1) 根据中断请求源的优先级高低,使相应的优先级状态触发器置1.
(2) 保留断点,即把程序计数器PC的内容推入堆栈保存.
(3) 清相应的中断请求标志位IE0、IE1、TF0或TF1。
(4) 把被响应的中断服务程序的入口地址送入PC,从而转入相应的中断服务程序。
各中断源所对应的中断服务程序的入口地址如下:
中断源 入口地址
外部中断0 0003H
定时器/计数器TO 000BH
外部中断1 0013H
定时器/计数器T1 001BH
串行口中断 0023H
从上述地址开始执行中断服务程序,中断服务程序的最后一条指令必须是中断返回指令RETI。CPU执行该指令时,先将相应的优先级状态触发器清零,然后从堆栈中弹出的两个字节到PC,从而返回到主程序断点处。
保护现场及恢复现场的工作必须由用户设计的中断服务程序处理.
5。3。2 中断请求的撤除
CPU响应中断的同时,该中断请求标志应被清除,否则将会引起另一次中断。中断标志的清除分为三种情况:
1. 对于定时器溢出的中断标志TF0(或TF1)及负跳变触发的外部中断标志IE0(或IE1),中断响应后,中断标志由硬件自动清除。
2. 对于电平触发的外部中断请求,中断请求标志不由CPU控制,在中断结束前必须由中断源撤消中断请求信号。
3. 串行口中断标志TI和RI在中断响应后不能由硬件自动清除,这就需要在中断服务程序中,由软件清除中断请求标志。
5.3。3 外部中断的响应时间
外部中断和的电平在每一个机器周期都被采样,并锁存在IE0和IE1中,这个置入的IE0和IE1的状态到下一个机器周期才被查询,如果中断被激活,并且满足响应条件,CPU接着执行一条硬件子程序调用指令,以转到相应的服务程序入口,该调用指令本身需要两个机器周期。这样,从产生外部中断请求到开始执行中断服务程序的第一条指令之间最少需要三个完整的机器周期.
如果中断请求遇到了上面所列三种情况之一,使CPU不能立即响应中断时,则中断响应的时间将更长.如果CPU正在处理同级或高级中断,而外的等待时间取决于中断服务程序的处理时间.
如果正在执行的指令没有执行到该指令的机器周期,所需的额外的等待时间不会多于3个机器周期(乘法指令和除法指令是最长的指令,需4个机器周期)。
如果正在处理的指令为RETI或访问IE、IP的指令,额外的等待时间不会多于5个机器周期(执行这些指令最多需一个机器周期,再执行一条指令最多为4个机器周期)。
由此看来,外部中断响应时间总是3—8个机器周期(不包括等待中断服务程序处理情况在内)。
1。4 定时/计数器的结构及工作原理
MCS—51单片机内部有两个16位可编程定时器/计数器,即定时器T0和定时器T1(8052提供3个,这第三个称为定时器T2).它们既可用作定时器方式,又可用作计数器方式,可编程设定4种不同的工作方式。
1。4.1 定时/计数器的结构
定时/计数器T0、T1的结构如图所示.它由加法计数器、TMOD、TCON寄存器等组成.
定时/计数器的核心是16位加法计数器,图中定时/计数器T0的加法计数器用特殊功能寄存器TH0,TL0表示,TH0表示加法计数器的高8位,TL0表示加法计数器的低8位。TH1、TL1则表示定时/计数器T1的加法计数器的高8位和低8位。这些寄存器可根据需要由程序读写.
当16位加法计数器的输入端每输入一个脉冲,16位加法计数器的值自动加1,当计数器的计数值超过加法计数器字长所能表示的2进制数的范围而向第17位进位,即计数溢出时,置位定时中断请求标志,向CPU申请中断。
16位加法计数器编程选择对内部时钟脉冲进行计数或对外部输入脉冲计数。对内部脉冲计数时称定时方式,对外部脉冲计数时称计数方式.
1.5定时器/计数器的工作方式
1. 工作方式寄存器TMOD
TMOD用于控制T0和T1的工作方式,其各位定义如下:
TMOD(89H)
D7 D6 D5 D4 D3 D2 D1 D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
定时器T1 定时器T0
各位功能如下:
M1、M0
工作方式控制位,可构成以下4种工作方式:
M1 M0 工作方式 说明
0 0 0 13位计数器
0 1 1 16位计数器
1 0 2 可自动再装载的8位计数器
1 1 3 T0分成两个独立的8位计数器;
T1在此方式下是关闭状态。
C/:计数工作方式/定时工作方式选择位。
C/=0,设置为定时工作方式。
C/=1,设置为计数工作方式.
GATE:门控位,用以决定是由软件还是硬件启动/停止计数.
GATE=0,/被封锁,只要用软件对TR0(或TR1)置1就启动了定时器。
GATE=1,定时器/计数器的计数受外部引脚输入电平的控制。在TR0(或TR1)置1时,若(或)引脚为高电平,启动定时器计数;为低电平时停止计数。
TMOD的所有位在复位后清0。TMOD不能位寻址,只能按字节操作设置工作方式。
1.5。2 控制寄存器TCON
TCON的高4位 用于控制定时器的启动、停止以及标明定时器的溢出和中断情况,TCON的低4位 用于两个外部中断源控制.各位的含义如下:
TCON(88H)
8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF1:定时器1溢出标志,T1溢出时由硬件置1,并申请中断,CPU响应中断后,又由硬件清0。TF1也可由软件清0。
TF0:定时器0溢出标志,功能与FT1相同。
TR1:定时器1运行控制位,可由软件置1或清0来启动或停止T1。
TR0:定时器0运行控制位,功能与TR1相同。
IE1:外部中断1请求标志.
IE0:外部中断0请求标志。
IT1:外部中断1触发方式选择位.
IT0:外部中断0触发方式选择位.
TCON中的低4位用于中断工作方式,在讲述中断的章节中已详细讨论过。单片机复位后,TCON中的各位均为0.
下面分别介绍4种工作方式的特点及工作情况.
1. 工作方式0——13位计数器
T0在工作方式0的逻辑结构如图5。3所示,在这种工作方式下,16位的计数器(TH0和TL0)只用了13位构成13位定时/计数器(为与MCS—48兼容).TL0的高3位未用,当TL0的低5位计满时,向TH0进位,而TH0溢出后对中断标志位FT0置1,并申请中断.T0是否溢出可用软件查询TF0是否为1.
图5.3工作方式0——13位计数器的逻辑结构图
当C/=0时,多路开关打到上位,定时/计数器的输入端接内部振荡器的12分频,即工作在定时方式,每个计数脉冲的周期等于机器周期,当定时/计数器溢出时,其定时时间为:
T=计数次数×机器周期
=( T0初值)×机器周期
C/=1时,多路开关打到下位,定时/计数器接外部T0引脚输入信号,即工作在计数方式,当外部输入信号电平发生从“1“到”0“跳变时,加1计数器加1。
2. 工作方式1——16位计数器
图5.4 工作方式1的逻辑结构
T0在工作方式1的逻辑结构如图5.4所示,它与工作方式0的差别仅在于工作方式1是以16位计数器参加计数,且定时时间为
T =计数次数× 机器周期
=(T0初值)×机器周期
3 工作方式2—-8位自动重装初值计数器
T0在工作方式2的逻辑结构如图5。5所示.TL0用作8位计数器,TH0用来保存初值,每当TL0计满溢出时,硬件自动将TH0中的值装入TL0中.工作方式2的定时时间为:
t=计数次数×机器周期
=(T0初值)× 机器周期
图5.5工作方式2的逻辑结构图
3.工作方式3-—2个独立8位计数器
工作方式3的逻辑结构如图5.6所示。该工作方式只适用于定时/计数器T0。T0在工作方式3被拆成两个相互独立的计数器,其中TL0使用原T0的各控制位、引脚和中断源:C/、GATE、TR0、和TF0。而TH0则只能作为定时器使用,但它占用了T1的TR1和TF1,即占用了T1的中断标志和运行控制位。
图5.6 工作方式3的逻辑结构图
一般在系统需增加一个额外的8位定时器时,T0可设置为工作方式3,此时T1虽仍可定义为工作方式0、工作方式1和工作方式2、但只能用在不需中断控制的场合.
1。6 综合举例
定时/计数器的应用编程应注意两点:
1. 初始化(正确写入控制字)
2. 时间常数(初值)的计算。
5。6.1初始化步骤为:
(1)向TMOD写工作方式控制字。
(2)向计数器TL、TH装入初值。
(3)置TRx=1,启动计数.
(4)置ETx=1,允许定时/计数器中断(若需要时)。
(5)置EA=1,CPU开中断。
1.6。2装载初值的计算:
当定时器/计数器工作于定时状态时,对机器周期进行计数,设单片机的晶振频率为Hz
则:
一个机器周期: T=
若定时时间为t, 则对应的计数次数N=
由于MCS-51单片机的定时器/计数器是加1计数器,计满回零,故对应定时时间t应装入的计数初值为:(n为工作方式选择所确定的定时器位数)
1。6。3 编程举例
例1:设T0为工作方式1,设置为定时时间为2ms,每当2ms到,申请中断,在中断服务程序中将P1.0的内容取反送出,即在P1。0引脚产生250Hz的方波(假设晶振为6MHz).
下面先计算定时的T0初始值。
以题意:6 t=2ms
则:机器周期 T===2μS
计数次数N===1000
对应的计数初值为: =64536D=FC18H
编程如下:
ORG 0000H ;
AJMP MAIN ;
ORG 000BH ;
INT: MOV TL0, #18H ;T0中断服务程序
MOV TH0, #0FCH ;送2ms计数初值
CPL P1。0 ;输出取反
RETI ;
MAIN: MO SP, #63H ;置堆栈指针
MOV TMOD, #01 ;T0初始化
MOV TL0;#18H ;
MOV TH0;#0FCH;
SETB TR0 ;启动T0计数
SETB ET0 ;允许T0中断
SETB EA ;CPU开中断
SJMP $ ;等待
例2:当GATE=1、TR0=1时,只有引脚上出现高电平时,T0才被允许计数。试利用这一功能测试引脚上脉冲的宽度(机器周期数)。
设外部待测脉冲由(P3.2)输入,T0工作在方式1,设置为定时状态,GATE置为“1”,测试时,在端为“0"时置TR0为“1”,当;端变为“1”时启动计数;端再次变为“0”时停止计数.此时的计数值就是被测正脉冲的宽度。编程如下:
ORG 0000H
MOV TMOD,#09H ;T0工作方式1定时,GATE=1
MOV TL0, #00H ;
MOV TH0, #00H ;
JB P3.2 $ ;等待变低
SETB TR0 ;启动T0
JNB P3。2, $ ;等待变高
JB P3。2, $ ;等待再变低
CLR TR0 ;T0停止计数
MOV A,TL0 ;存放计数值
MOV B,TH0 ;
… … …
C程序
#include <reg51.h〉
main()
{
TMOD=0X09;/*设置定时/计数器的工作方式*/
TH0=0;
TL0=0; /*设置初值*/
while(P3.2==1); /*等待P3.2变底*/
TR0=1; /*开始计数*/
while(P3.2==0); /*等待P3。2变高*/
while(P3.2==1); /*等待P3。2变低*/
TR1=0; /*停止计数*/
… … /*数据处理程序略*/
}
注,以上程序没考虑定时/计数器在脉冲测量过程中由于脉冲周期过大而引起的定时/计数器的溢出问题.这个问题留给读者思考。
思考题与习题
1 什么叫中断源?MCS-51有哪些中断源?各有什么特点?
2 什么叫中断嵌套?什么叫中断系统?中断系统的功能是什么?
3 8031的五个中断标志代号是什么?位地址是什么?它们在什么情况下被置位和复位?
4 写出并记住8031五级中断的入口地址。8031响应中断的最短时间是多少?
5 试写出INT0为边沿触发方式的中断初始化程序.
6 MCS—51有哪三种扩展外部中断源方法?各有什么特点?
7 8051单片机内部有几个定时/计数器?它们由哪些专用寄存器组成?
8 8051单片机的定时/计数器有哪几种工作方式?各有什么特点?
9 定时/计数器作定时用时,其定时时间与哪些因素有关?作计数用时,对输入信号频率有何限制?
10 编程,利用定时器T0(工作方式1)产生一个50Hz的方波,由P1。0输出,晶振频率为12MHz。
11 在8051单片机中,已知晶振频率为12MH,试编程使P1.0和P1.1分别输出周期为2ms和500ms的方波。
12 设晶振频率为6MHz,试用T0作为外部计数器,编程实现每当计到1000个脉冲,使T1开始2ms定时,定时时间到后,T0又开始计数,这样反复循环下去。
13 / 15
展开阅读全文