1 / 36

中断系统与定时器 / 计数器

中断系统与定时器 / 计数器. 中断的概念. 在程序的执行过程中,由于某种外界的原因,必须终止当前执行的程序,而去执行相应的处理程序,待处理结束后,再回来继续执行被终止的程序。这个过程叫中断。. 主程序. 中断响应. 执行主程序. 中断请求. 执行中断处理程序. 断点. 继续执行主程序. 中断返回. 中断系统结构. 5 个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向 CPU 请求中断。 有关的特殊功能寄存器( SFR )有: 中断允许寄存器 IE 中断优先级控制寄存器 IP

csilla
Download Presentation

中断系统与定时器 / 计数器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 中断系统与定时器/计数器

  2. 中断的概念 在程序的执行过程中,由于某种外界的原因,必须终止当前执行的程序,而去执行相应的处理程序,待处理结束后,再回来继续执行被终止的程序。这个过程叫中断。

  3. 主程序 中断响应 执行主程序 中断请求 执行中断处理程序 断点 继续执行主程序 中断返回

  4. 中断系统结构 • 5个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向CPU请求中断。 • 有关的特殊功能寄存器(SFR)有: 中断允许寄存器IE 中断优先级控制寄存器IP 中断源寄存器(TCON、SCON中的有关位) 注:均可位寻址。

  5. INT0 T0 INT1 T1 TI RI 中断系统结构图 中断允许控制 中断优先级 中断请求标志 高级 内 部 查 询 入口地址 低级 内 部 查 询 ≥1 EA 入口地址 中断源

  6. 中断源 8051单片机共有5个中断源,分别是2个外部中断、 2个定时中断和1个串行中断。 外部中断是: 外部中断0--INT0,由P3.2提供, 外部中断1—INT1,由P3.3提供, 外部中断有两种触发方式,即低电平方式和负边沿方式。 定时器和串行口中断分别是: T0溢出中断; 由片内定时/计数器0提供 T1溢出中断; 由片内定时/计数器1提供 串行口中断RI/TI; 由片内串行口提供

  7. 中断方式 单片机的中断为向量中断,即一响应中断就转入固定入口地址执行中断服务程序。 具体如下: 中断源 入口地址 INT0 0003H T0 000BH INT1 0013H T1 001BH RI/TI 0023H 在这些单元中往往放一条跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。

  8. 与中断有关的特殊功能寄存器 与中断有关的特殊功能寄存器有四个: TCON----定时控制寄存器, IE----中断允许控制寄存器, IP----中断优先级控制寄存器, SCON----及串行口控制寄存器。 (1).定时控制寄存器TCON 触发方式选择 0 低电平1 下降沿 中断请求标志 • 注意:电平触发时,在中断返回前应撤除中断源。

  9. (2).串行口控制寄存器SCON 串行中断 请求标志 注意:响应中断后,CPU并不清零中断标志位,必须软件清零。 (3).中断允许控制寄存器IE 0 禁止 1允许 • 实现两级控制 注意:复位时,禁止所有中断 (4).中断优先级控制寄存器(IP) 0 低级别 1高级别 • 每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套。默认的优先次序为:INT0、C/T0、INT1、C/T1、串行口中断(依次从高到低)

  10. 中断响应 响应条件----CPU要响应中断需满足下列条件: ① 无同级或高级中断正在服务; ② 当前指令周期结束,如果查询中断请求的机器 周期不是当前指令的最后一个周期,则不行; ③ 若现行指令是RETI、RET或访问IE、IP指令,则需要执行到当前指令及下一条指令方可响应。 响应过程--单片机响应中断后,自动执行下列操作: ①置位中断优先级有效触发器,即关闭同级和低级 中断: ② 调用入口地址,断点入栈,相当于LCALL指令; ③进入中断服务程序。

  11. 响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。 (1)最快响应时间 以外部中断的电平触发为最快。 从查询中断请求信号到中断服务程序需要三个机器周期: 1个周期(查询)+2个周期(长调用LCALL) (2)最长时间 若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期: 2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期。

  12. 中断返回—中断处理程序的最后一条指令是RETI,它使CPU结束中断处理程序的执行,返回到断点处,继续执行主程序。中断返回—中断处理程序的最后一条指令是RETI,它使CPU结束中断处理程序的执行,返回到断点处,继续执行主程序。

  13. 中断系统初始化 开相应中断源的中断;(IE) 设定中断优先级;(IP) 若为外部中断,设定外部中断的触发方式。

  14. 中断应用举例 8051单片机只有2个外部中断源和,当实际应用中需要多个外部中断源时,可采用硬件请求和软件查询相结合的办法进行扩展,把多个中断源通过“或非”门接到外部中断输入端,同时又连到某个I/O端口,这样每个中断源都能引起中断,然后在中断服务程序中通过查询I/O端口的状态来区分是哪个中断源引起的中断。若有多个中断源同时发出中断请求,则查询的次序就决定了同一优先级中断中的优先级。

  15. 汇编语言源程序清单 主程序 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 ;等待中断

  16. 汇编语言源程序清单 中断服务程序 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

  17. 定时器/计数器的工作方式与控制

  18. 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。

  19. 一、定时器/计数器的功能 定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 。 1. 定时功能----计数输入信号是内部时钟脉冲,每个机器周期使技数器的值加1。 2. 计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。 在特殊功能寄存器TMOD中,有一个控制位(C/T),分别用于控制定时/计数器工作在定时器方式还是计数器方式。

  20. 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—工作方式选择

  21. (2).定时器控制寄存器TCON 启动定时/计数器 触发方式选择 中断请求标志 0 停止 1 启动 0 低电平1 下降沿

  22. 振荡器 1/12 C/T=0 TL0 TH0 TF0 C/T=1 T0 低5位 8位 TR0 & 1 ≥1 GATE INT0 三、定时器/计数器的工作方式 定时器/计数器共有四种工作方式 (1). 方式0—13位方式 定时器 13位计数器 计数器 计数脉冲输入

  23. 振荡器 1/12 C/T=0 8位 8位 TL0 TH0 TF0 16位计数器 C/T=1 T0 TR0 & 1 GATE ≥1 INT0 (2). 方式1—16位方式

  24. 振荡器 1/12 C/T=0 TL0 TF0 C/T=1 T0 TR0 & TH0 1 GATE ≥1 INT0 (3). 方式2—8位自动装入时间常数方式

  25. (4). 方式3—双8位方式 仅T0可以工作在方式3—此时T0分成2个独立的计数器—TL0和TH0 ,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。

  26. 四、定时/计数器常数的计算 (1).计数器初值的计算 设计数器的最大计数值为M(根据不同工作方式,M可以是213、216或28),则计算初值X的公式如下: X=M-要求的计数值

  27. (2).定时器初值的计算 在定时器模式下,计数器由单片机主脉冲fosc经12分频后计数。因此,定时器定时初值计算公式: X=M-(要求的定时值)/(12/fosc) 式中,M为定时器模值(根据不同工作方式,M可以是213、216或28)

  28. 五、定时器/计数器的应用 定时器/计数器在应用前需要进行初始化: ①确定TMOD控制字:编程时将控制字送TMOD; ②计算计数器的计数初值: 编程时将计数初值送TH、TL; ③开中断(如果使用中断方式): 编程实置位EA、ET ④TR位置位控制定时器的启动和停止。

  29. 8051 500μs P1.0 例1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500μs的方波脉冲,并由P1.0输出。试以中断方式实现。

  30. 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,则:

  31. (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,停止。

  32. 汇编语言源程序清单 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

  33. 例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。

  34. 方式1:最大计数值为M=216,因此定时器的初值应为方式1:最大计数值为M=216,因此定时器的初值应为 X = 216-(1×10-3)/(2×10-6) = 65036D = 1111111000001100B = FE0CH 此时高8位TH1的初值为FEH,低8位TL1的初值为0CH。

  35. 方式2:最大计数值为M=28,因此定时器的初值应为方式2:最大计数值为M=28,因此定时器的初值应为 X = 28-(1×10-3)/(2×10-6) = 256-500= -254 计算得到的初值为负值,说明当fosc=6MHz时,不能采用方式2(即常数自动装入)来产生1ms的定时,除非把单片机的时钟频率降得很低。

More Related