360 likes | 477 Vues
中断系统与定时器 / 计数器. 中断的概念. 在程序的执行过程中,由于某种外界的原因,必须终止当前执行的程序,而去执行相应的处理程序,待处理结束后,再回来继续执行被终止的程序。这个过程叫中断。. 主程序. 中断响应. 执行主程序. 中断请求. 执行中断处理程序. 断点. 继续执行主程序. 中断返回. 中断系统结构. 5 个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向 CPU 请求中断。 有关的特殊功能寄存器( SFR )有: 中断允许寄存器 IE 中断优先级控制寄存器 IP
E N D
中断的概念 在程序的执行过程中,由于某种外界的原因,必须终止当前执行的程序,而去执行相应的处理程序,待处理结束后,再回来继续执行被终止的程序。这个过程叫中断。
主程序 中断响应 执行主程序 中断请求 执行中断处理程序 断点 继续执行主程序 中断返回
中断系统结构 • 5个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向CPU请求中断。 • 有关的特殊功能寄存器(SFR)有: 中断允许寄存器IE 中断优先级控制寄存器IP 中断源寄存器(TCON、SCON中的有关位) 注:均可位寻址。
INT0 T0 INT1 T1 TI RI 中断系统结构图 中断允许控制 中断优先级 中断请求标志 高级 内 部 查 询 入口地址 低级 内 部 查 询 ≥1 EA 入口地址 中断源
中断源 8051单片机共有5个中断源,分别是2个外部中断、 2个定时中断和1个串行中断。 外部中断是: 外部中断0--INT0,由P3.2提供, 外部中断1—INT1,由P3.3提供, 外部中断有两种触发方式,即低电平方式和负边沿方式。 定时器和串行口中断分别是: T0溢出中断; 由片内定时/计数器0提供 T1溢出中断; 由片内定时/计数器1提供 串行口中断RI/TI; 由片内串行口提供
中断方式 单片机的中断为向量中断,即一响应中断就转入固定入口地址执行中断服务程序。 具体如下: 中断源 入口地址 INT0 0003H T0 000BH INT1 0013H T1 001BH RI/TI 0023H 在这些单元中往往放一条跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。
与中断有关的特殊功能寄存器 与中断有关的特殊功能寄存器有四个: TCON----定时控制寄存器, IE----中断允许控制寄存器, IP----中断优先级控制寄存器, SCON----及串行口控制寄存器。 (1).定时控制寄存器TCON 触发方式选择 0 低电平1 下降沿 中断请求标志 • 注意:电平触发时,在中断返回前应撤除中断源。
(2).串行口控制寄存器SCON 串行中断 请求标志 注意:响应中断后,CPU并不清零中断标志位,必须软件清零。 (3).中断允许控制寄存器IE 0 禁止 1允许 • 实现两级控制 注意:复位时,禁止所有中断 (4).中断优先级控制寄存器(IP) 0 低级别 1高级别 • 每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套。默认的优先次序为:INT0、C/T0、INT1、C/T1、串行口中断(依次从高到低)
中断响应 响应条件----CPU要响应中断需满足下列条件: ① 无同级或高级中断正在服务; ② 当前指令周期结束,如果查询中断请求的机器 周期不是当前指令的最后一个周期,则不行; ③ 若现行指令是RETI、RET或访问IE、IP指令,则需要执行到当前指令及下一条指令方可响应。 响应过程--单片机响应中断后,自动执行下列操作: ①置位中断优先级有效触发器,即关闭同级和低级 中断: ② 调用入口地址,断点入栈,相当于LCALL指令; ③进入中断服务程序。
响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。 (1)最快响应时间 以外部中断的电平触发为最快。 从查询中断请求信号到中断服务程序需要三个机器周期: 1个周期(查询)+2个周期(长调用LCALL) (2)最长时间 若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期: 2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期。
中断返回—中断处理程序的最后一条指令是RETI,它使CPU结束中断处理程序的执行,返回到断点处,继续执行主程序。中断返回—中断处理程序的最后一条指令是RETI,它使CPU结束中断处理程序的执行,返回到断点处,继续执行主程序。
中断系统初始化 开相应中断源的中断;(IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式。
中断应用举例 8051单片机只有2个外部中断源和,当实际应用中需要多个外部中断源时,可采用硬件请求和软件查询相结合的办法进行扩展,把多个中断源通过“或非”门接到外部中断输入端,同时又连到某个I/O端口,这样每个中断源都能引起中断,然后在中断服务程序中通过查询I/O端口的状态来区分是哪个中断源引起的中断。若有多个中断源同时发出中断请求,则查询的次序就决定了同一优先级中断中的优先级。
汇编语言源程序清单 主程序 ORG 0000H ;复位入口 LJMP MAIN ;转到主程序 ORG 0003H ;外部中断 入口 LJMP INT_0 ;转到中断服务程序 ORG 0013H ;外部中断 入口 LJMP INT_1 ;转到中断服务程序 ORG 0030H ;主程序入口 MAIN: ANL P1, #55H ;主程序开始,熄灭LED,准备输入查询 SETB EX0 ;允许INT0中断 SETB IT0 ;负边沿触发方式 SETB EX1 ;允许INT1中断 SETB IT1 ;负边沿触发方式 SETB EA ;开中断 HERE: SJMP HERE ;等待中断
汇编语言源程序清单 中断服务程序 INT_0: JNB P1.0, L1 ;外中断0服务程序,开始查询 SETB P1.1 ;由外设1引起的中断 L1: JNB P1.2, L2 SETB P1.3 ;由外设2引起的中断 L2: JNB P1.4, L3 SETB P1.5 ;由外设3引起的中断 L3: RETI ;中断返回 INT_1: ANL P1, #55H ;外中断1服务程序,熄灭LED RETI
8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。 T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。
一、定时器/计数器的功能 定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 。 1. 定时功能----计数输入信号是内部时钟脉冲,每个机器周期使技数器的值加1。 2. 计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。 在特殊功能寄存器TMOD中,有一个控制位(C/T),分别用于控制定时/计数器工作在定时器方式还是计数器方式。
D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 C/T—计数/定时选择 二、定时器/计数器的特殊功能寄存器 与定时器/计数器有关的特殊功能寄存器有: (1).工作方式控制寄存器TMOD T1控制 T0控制 GATE—门控位 M1 M0—工作方式选择
(2).定时器控制寄存器TCON 启动定时/计数器 触发方式选择 中断请求标志 0 停止 1 启动 0 低电平1 下降沿
振荡器 1/12 C/T=0 TL0 TH0 TF0 C/T=1 T0 低5位 8位 TR0 & 1 ≥1 GATE INT0 三、定时器/计数器的工作方式 定时器/计数器共有四种工作方式 (1). 方式0—13位方式 定时器 13位计数器 计数器 计数脉冲输入
振荡器 1/12 C/T=0 8位 8位 TL0 TH0 TF0 16位计数器 C/T=1 T0 TR0 & 1 GATE ≥1 INT0 (2). 方式1—16位方式
振荡器 1/12 C/T=0 TL0 TF0 C/T=1 T0 TR0 & TH0 1 GATE ≥1 INT0 (3). 方式2—8位自动装入时间常数方式
(4). 方式3—双8位方式 仅T0可以工作在方式3—此时T0分成2个独立的计数器—TL0和TH0 ,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。
四、定时/计数器常数的计算 (1).计数器初值的计算 设计数器的最大计数值为M(根据不同工作方式,M可以是213、216或28),则计算初值X的公式如下: X=M-要求的计数值
(2).定时器初值的计算 在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数。因此,定时器定时初值计算公式: X=M-(要求的定时值)/(12/fosc) 式中,M为定时器模值(根据不同工作方式,M可以是213、216或28)
五、定时器/计数器的应用 定时器/计数器在应用前需要进行初始化: ①确定TMOD控制字:编程时将控制字送TMOD; ②计算计数器的计数初值: 编程时将计数初值送TH、TL; ③开中断(如果使用中断方式): 编程实置位EA、ET ④TR位置位控制定时器的启动和停止。
8051 500μs P1.0 例1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500μs的方波脉冲,并由P1.0输出。试以中断方式实现。
GATE C/T M1 M0 GATE C/T M1 M0 0 0 0 1 X X X X ① TMOD确定 T1控制 T0控制 控制字10H ② 计算定时器的初值; 要产生500μs的方波脉冲,只需在P1.0端以250μs为间隔,交替输出高低电平即可实现。为此,定时间应为250μs 。使用6MHz晶振,则一个机器周期为2μs,设待求定时器初值为X,则:
(216–X)×2×10 -6 =250×10 -6 即216–X=125 X=216-125=10000H-7DH =0FF83H 所以,初值为: TH1=0FFH,TL1=83H ③ 采用中断方式:编程时将IE控制字设置为 88H,实现开中断。 ④ 由定时器控制寄存器TCON中的TR1位控制定 时器的启动和停止。 TR1=1,启动; TR1=0,停止。
汇编语言源程序清单 ORG 0000H ;复位地址 LJMP MAIN ;跳转到主程序 ORG 000BH ;定时器T0中断入口 LJMP SQ ;跳转到定时器T0中断服务程序 ORG 0030H ;主程序入口地址 MAIN: MOV TMOD,#10H ;主程序,设置TMOD控制字 MOV TL1, #83H ;写入T0定时2毫秒初值 MOV TH1, #0FFH MOV IE, #88H ;开中断,设置IE控制字 SETB TR1 ;启动T0 HERE: SJMP HERE ;循环等待 SQ: CPL P1.0 ;T1中断服务程序,取反P1.0 MOV TL1, #83H ;重装T1定时初值 MOV TH1, #0FFH RETI ;中断返回 END
例2:假设单片机的振荡频率fosc=6MHz,现要求产生1ms的定时,试分别计算定时器T1在方式0、方式1和方式2时的初值。例2:假设单片机的振荡频率fosc=6MHz,现要求产生1ms的定时,试分别计算定时器T1在方式0、方式1和方式2时的初值。 方式0:最大计数值为M=213,因此定时器的初值应为 X = 213-(1×10-3)/(12/(6×10-6) = 7692D = 1111000001100B 其中高8位为TH1的初值,即F0H,低5位为TL1的初值 注意,这里TL1的初值应为00001100B即0CH,而不是60H,因为在方式0时,TL1的高3位是不用的,应都设为0。
方式1:最大计数值为M=216,因此定时器的初值应为方式1:最大计数值为M=216,因此定时器的初值应为 X = 216-(1×10-3)/(2×10-6) = 65036D = 1111111000001100B = FE0CH 此时高8位TH1的初值为FEH,低8位TL1的初值为0CH。
方式2:最大计数值为M=28,因此定时器的初值应为方式2:最大计数值为M=28,因此定时器的初值应为 X = 28-(1×10-3)/(2×10-6) = 256-500= -254 计算得到的初值为负值,说明当fosc=6MHz时,不能采用方式2(即常数自动装入)来产生1ms的定时,除非把单片机的时钟频率降得很低。