36
中中中 中中中中 / 中中中

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

  • Upload
    csilla

  • View
    143

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

Page 2: 中断系统与定时器 / 计数器

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

中断的概念

Page 3: 中断系统与定时器 / 计数器

执行主程序

主程序

继续执行主程序

断点中断请求

中断响应

执行中断处理程序

中断返回

Page 4: 中断系统与定时器 / 计数器

5 个中断源,具有二个中断优先级,可实现二级中断服务程序的嵌套。每个中断源均可软件编程为高优先级或低优先级中断,允许或禁止向 CPU 请求中断。

有关的特殊功能寄存器( SFR )有:中断允许寄存器 IE中断优先级控制寄存器 IP中断源寄存器( TCON 、 SCON 中的有关位)注:均可位寻址。

中断系统结构

Page 5: 中断系统与定时器 / 计数器

IE0

TF0

IE1

TF1

TI

RI

中断请求标志

EX0

ET0

EX1

ET1

ES≥1

PX0

PT0

PX1

PT1

PS

高级

低级

内部查询

内部查询 入口

地址

入口地址

INT0

INT1

T0

T1

TIRI

中断允许控制

中断优先级

EA

中断源

中断系统结构图

Page 6: 中断系统与定时器 / 计数器

8051 单片机共有 5 个中断源,分别是 2 个外部中断、 2 个定时中断和 1 个串行中断。外部中断是:外部中断 0--INT0 ,由 P3.2 提供,外部中断 1—INT1 ,由 P3.3 提供,外部中断有两种触发方式,即低电平方式和负边沿方式。

定时器和串行口中断分别是:T0 溢出中断; 由片内定时 / 计数器 0 提供T1 溢出中断; 由片内定时 / 计数器 1 提供串行口中断 RI/TI ; 由片内串行口提供

中断源

Page 7: 中断系统与定时器 / 计数器

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

Page 8: 中断系统与定时器 / 计数器

与中断有关的特殊功能寄存器

与中断有关的特殊功能寄存器有四个:TCON---- 定时控制寄存器, IE---- 中断允许控制寄存器,IP---- 中断优先级控制寄存器,SCON---- 及串行口控制寄存器。

(1) .定时控制寄存器 TCON D7 D6 D5 D4 D3 D2 D1 D0

TF1 TF0 IE1 IT1 IE0 IT0

中断请求标志触发方式选择

0 低电平 1 下降沿注意:电平触发时,在中断返回前应撤除中断源。

Page 9: 中断系统与定时器 / 计数器

(2) .串行口控制寄存器 SCON D7 D6 D5 D4 D3 D2 D1 D0

TI RI串行中断请求标志

(3) .中断允许控制寄存器 IE D7 D6 D5 D4 D3 D2 D1 D0

EA ES ET1 EX1

ET0 EX0

(4) .中断优先级控制寄存器( IP ) D7 D6 D5 D4 D3 D2 D1 D0

PS PT1 PX1

PT0 PX0

0 禁止1 允许

0 低级别1 高级别

实现两级控制 注意:复位时,禁止所有中断

每一中断源可编程为高优先级或低优先级中断,以实现二级嵌套。默认的优先次序为: INT0 、 C/T0 、 INT1 、 C/T1 、串行口中断(依次从高到低)

注意:响应中断后, CPU 并不清零中断标志位,必须软件清零。

Page 10: 中断系统与定时器 / 计数器

中断响应 响应条件 ----CPU 要响应中断需满足下列条件:① 无同级或高级中断正在服务;② 当前指令周期结束,如果查询中断请求的机器 周期不是当前指令的最后一个周期,则不行;③ 若现行指令是 RETI 、 RET 或访问 IE 、 IP 指令,则需要执行到当前指令及下一条指令方可响应。

响应过程 -- 单片机响应中断后,自动执行下列操作:① 置位中断优先级有效触发器,即关闭同级和低级 中断:② 调用入口地址,断点入栈,相当于 LCALL 指令;③ 进入中断服务程序。

Page 11: 中断系统与定时器 / 计数器

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

Page 12: 中断系统与定时器 / 计数器

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

Page 13: 中断系统与定时器 / 计数器

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

Page 14: 中断系统与定时器 / 计数器

中断应用举例

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

Page 15: 中断系统与定时器 / 计数器
Page 16: 中断系统与定时器 / 计数器

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

Page 17: 中断系统与定时器 / 计数器

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

Page 18: 中断系统与定时器 / 计数器

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

Page 19: 中断系统与定时器 / 计数器

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 。

Page 20: 中断系统与定时器 / 计数器

一、定时器 /计数器的功能

在特殊功能寄存器 TMOD中,有一个控制位( C/ T ),分别用于控制定时 /计数器工作在定时器方式还是计数器方式。

1. 定时功能 ----计数输入信号是内部时钟脉冲,每个机器周期使技数器的值加 1 。2. 计数功能 ----计数脉冲来自相应的外部输入引脚, T0 为 P3.4 , T1 为 P3.5。

定时 /计数器的核心部件是二进制加 1计数器 (TH0 、 TL0 或 TH1 、 TL1) 。

Page 21: 中断系统与定时器 / 计数器

二、定时器/计数器的特殊功能寄存器 与定时器/计数器有关的特殊功能寄存器有:(1) .工作方式控制寄存器 TMOD

T1 控制 T0 控制

M0M1C/TGATEM0M1C/TGATE

D0D1D2D3D4D5D6D7

GATE—门控位C/T—计数 / 定时选择M1 M0—工作方式选择

Page 22: 中断系统与定时器 / 计数器

(2) .定时器控制寄存器 TCON

D7 D6 D5 D4 D3 D2 D1 D0

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

中断请求标志 触发方式选择启动定时 /计数器0 低电平 1 下降沿

0 停止1 启动

Page 23: 中断系统与定时器 / 计数器

计数脉冲输入

三、定时器/计数器的工作方式

定时器/计数器共有四种工作方式

(1). 方式 0—13 位方式

TF0T0TR0

GATE

INT0

1 ≥1&

C/T=1

振荡器 1/12 C/T=0

TL0 TH08位

低 5 位

13 位计数器

定时器

计数器

Page 24: 中断系统与定时器 / 计数器

(2). 方式 1—16位方式

振荡器 1/12

TL0 TH0 TF0

1 ≥1&

T0TR0

GATE

INT0

C/T=0

C/T=1 8 位8 位

16位计数器

Page 25: 中断系统与定时器 / 计数器

(3). 方式 2—8 位自动装入时间常数方式

TF0

振荡器 1/12

1 ≥1&

T0TR0

GATE

INT0

C/T=0

C/T=1TL0

TH0

Page 26: 中断系统与定时器 / 计数器

(4). 方式 3—双 8 位方式

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

Page 27: 中断系统与定时器 / 计数器

(1) .计数器初值的计算 设计数器的最大计数值为 M(根据不同工作

方式, M 可以是 213 、 216 或 28) ,则计算初值 X 的公式如下:

X=M- 要求的计数值

四、定时 /计数器常数的计算

Page 28: 中断系统与定时器 / 计数器

(2) .定时器初值的计算 在定时器模式下,计数器由单片机主脉冲 fosc 经 12 分频后计数。因此,定时器定时初值计算公式:

X=M-( 要求的定时值 )/(12/fosc) 式中,M为定时器模值 (根据不同工作方式,

M 可以是 213 、 216 或 28)

Page 29: 中断系统与定时器 / 计数器

五、定时器 /计数器的应用定时器 /计数器在应用前需要进行初始化:

①确定 TMOD控制字:编程时将控制字送 TMOD;

②计算计数器的计数初值 : 编程时将计数初值送 TH、 TL ; ③ 开中断(如果使用中断方式) : 编程实置位 EA 、 ET④TR 位置位控制定时器的启动和停止。

Page 30: 中断系统与定时器 / 计数器

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

8051

P1.0

500μs

Page 31: 中断系统与定时器 / 计数器

① TMOD确定T1 控制 T0 控制

XXXX1000

M0M1C/TGATEM0M1C/TGATE

控制字 10H

要产生 500μs 的方波脉冲,只需在 P1.0 端以250μs为间隔,交替输出高低电平即可实现。为此,定时间应为 250μs 。使用 6 MH z晶振,则一个机器周期为 2μs,设待求定时器初值为X,则:

② 计算定时器的初值;

Page 32: 中断系统与定时器 / 计数器

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

Page 33: 中断系统与定时器 / 计数器

汇编语言源程序清单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 ;启动 T0HERE: SJMP HERE ;循环等待SQ: CPL P1.0 ; T1 中断服务程序,取反 P1.0 MOV TL1, #83H ;重装 T1 定时初值 MOV TH1, #0FFH RETI ;中断返回

END

Page 34: 中断系统与定时器 / 计数器

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

Page 35: 中断系统与定时器 / 计数器

方式 1 :最大计数值为 M=216 ,因此定时器的初值应为

X = 216-(1×10-3)/(2×10-6) = 65036D

= 1111111000001100B = FE0CH

此时高 8 位 TH1 的初值为 FEH ,低 8 位 TL1 的初值为 0CH 。

Page 36: 中断系统与定时器 / 计数器

方式 2 :最大计数值为 M=28 ,因此定时器的初值应为 X = 28-(1×10-3)/(2×10-6) = 256-500= -254

计算得到的初值为负值,说明当 fosc=6MHz 时,不能采用方式 2( 即常数自动装入 ) 来产生 1ms的定时,除非把单片机的时钟频率降得很低。