5.1 80C51 的中断系统

45
5.1 80C51 的的的的5.2 80C51 的的的的的的的 5.3 80C51 的的的 / 的的的 的5的 80C51 的的的的 的的的 / 的的的 的的的的

description

5.1 80C51 的中断系统. 第 5 章 80C51 的中断系统及定时 / 计数器. 本章内容:. 5.2 80C51 的中断处理过程. 5.3 80C51 的定时 / 计数器. 5.1 80C51 的中断系统. 中断的概念. 5.1.1 80C51 的中断系统结构. 实际生活. 计算机. 看电视. 主程序. 中断请求. 电话铃响. 事件发生. 接听电话. 事件处理. 中断处理. 中断返回. 看电视. 主程序. 中断解决了快速主机与慢速 I/O 设备的数据传送,还具有如下优点:. - PowerPoint PPT Presentation

Transcript of 5.1 80C51 的中断系统

Page 1: 5.1  80C51 的中断系统

5.1 80C51 的中断系统5.2 80C51 的中断处理过程

5.3 80C51 的定时 / 计数器

第 5 章 80C51 的中断系统及定时 / 计数器

本章内容:

Page 2: 5.1  80C51 的中断系统

5.1 80C51的中断系统 5.1.1 80C51的中断系统结构

中断的概念

看电视

中断处理

中断请求

实际生活

中断返回

电话铃响

接听电话

看电视

主程序

计算机

事件发生

事件处理

主程序

Page 3: 5.1  80C51 的中断系统

A主程序

响应返回

断点

RETI

……

B中断服务程序

Page 4: 5.1  80C51 的中断系统

中断解决了快速主机与慢速 I/O 设备的数据传送,还具有如下优点:

分时操作。 CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用率;

实时响应。 CPU 能够及时处理应用系统的随机事件,系统的实时性大大增强;

可靠性高。 CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。

Page 5: 5.1  80C51 的中断系统

80C51 中断系统的结构

IE0

EX0

TF0

IE1

TF1

TI

ES

ET1

EX1

ET0

RI

IP硬件查询

高级

低级

中断入口中断源

INT0

INT1

中断入口中断源

1

0

IE

PX0

PS

PT1

PX1

PT0

1

1

1

1

1

1

1

1

1

10

0

0

0

0

EA 1

≥1

SCON

1

1

T0

T1RXTX

IT0

IT1

0

0

TCON

Page 6: 5.1  80C51 的中断系统

5.1.2 80C51 的中断源

INT1,由 IT1选择为低电平有效还是下降沿有效。此引脚上出现有效的中断信号时,中断标志 IE1置 1,申请中断。

INT0,由 IT0选择为低电平有效还是下降沿有效。此引脚上出现有效的中断信号时,中断标志 IE0置 1,申请中断。

中断源

Page 7: 5.1  80C51 的中断系统

TF0 , T0 溢出中断请求标志。当 T0 发生溢出时,置位 TF0,并向 CPU申请中断。

TF1, T1溢出中断请求标志。当 T1发生溢出时,置位 TF1,并向 CPU申请中断。

RI、 TI,串行口中断请求标志。当串行口接收完一帧数据时置位 RI或当串行口发送完一帧数据时置位 TI,向 CPU申请中断。

Page 8: 5.1  80C51 的中断系统

中断请求标志

IT0 ,外中断 0 触发方式控制位。 =0 ,电平触发方式。 =1 ,边沿触发方式(下降沿有效)。

IE0 ,外中断 0 中断请求标志位。 TF0 , T0 溢出中断请求标志位。

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON (88H)

IT1 IT1 、、 IE1IE1 、 、 TF1TF1 类同类同 IT1 IT1 、、 IE1IE1 、 、 TF1TF1 类同类同

TCON 的中断标志

Page 9: 5.1  80C51 的中断系统

SCON 的中断标志

RI ,接收中断标志位。 TI ,发送中断标志位。

TI RISCON (98H)

注意: RI 和 TI 由硬件置位、由软件清除。

Page 10: 5.1  80C51 的中断系统

中断允许控制

5.1.3 80C51中断的控制

EX0 ,外中断 0 允许位;ET0 , T0 中断允许位; EX1 ,外中断 0 允许位;ET1 , T1 中断允许位;ES ,串口中断允许位;EA , CPU 中断允许(总允许)位。

EA ES ET1 EX1 ET0 EX0 IE (A8H)

Page 11: 5.1  80C51 的中断系统

中断优先级控制

PX0 ,外中断 0 优先级设定位;PT0 , T0 优先级设定位;PX1 ,外中断 0 优先级设定位;PT1 , T1 优先级设定位;PS ,串口优先级设定位。

PS PT1 PX1 PT0 PX0 IP (B8H)

Page 12: 5.1  80C51 的中断系统

同一优先级的优先权排队如下表:

Page 13: 5.1  80C51 的中断系统

中断优先级三条原则: 同时收到几个中断时,响应优先级别最高的 中断过程不能被同级、低优先级所中断 低优先级中断服务,能被高优先级中断

有 2 个优先级状态触发器 : 高优先级状态触发器 低优先级状态触发器

Page 14: 5.1  80C51 的中断系统

5.2 80C51 单片机中断处理过程

中断响应条件 有中断请求; 对应中断允许位为 1 ; 开中断(即 EA=1 )。

同时满足时,才可能响应中断。

5.2.1 中断响应条件和时间

Page 15: 5.1  80C51 的中断系统

中断服务的进入: 每个周期的 S5P2 ,采样各中断源。采样

值在下一个周期按优先级和内部顺序查询。

某中断在上一个周期的 S5P2 被置 1 ,它将于查询周期被发现。 CPU 便执行一条硬件 LCALL 指令,转向中断向量的特定地址单元,进入相应的中断程序。

Page 16: 5.1  80C51 的中断系统

硬件受阻,不产生 LCALL 的几种情况: 正在处理同级或高优先级中断; 当前查询的机器周期不是所执行指令的最后一个机

器周期。 正执行的指令为 RET 、 RETI 或任何访问 IE 或 IP

的指令(只有在这些指令后面至少再执行一条指令时才能接受中断请求)。

受阻未得到响应的中断,若条件消失时该中断标志已不再有效,该中断将不被响应。

Page 17: 5.1  80C51 的中断系统

中断响应时间

S1

保护断点,长调用至入口 中断服务

S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6

标志查询标志锁存

ε中断有效

M1 M2 M3 M4 M5

中断响应(从标志置 1 到进入相应的中断服务),至少要 3 个完整的机器周期。

Page 18: 5.1  80C51 的中断系统

相应优先级状态触发器置 1

执行硬件 LCALL 指令 把 PC 的内容入栈 相应中断服务程序的入口送 PC

执行中断服务程序。

5.2.2 中断响应过程

中断响应过程的前两步是由中断系统内中断响应过程的前两步是由中断系统内部自动完成的,而中断服务程序则要由用部自动完成的,而中断服务程序则要由用户编写程序来完成。户编写程序来完成。

中断响应过程的前两步是由中断系统内中断响应过程的前两步是由中断系统内部自动完成的,而中断服务程序则要由用部自动完成的,而中断服务程序则要由用户编写程序来完成。户编写程序来完成。

Page 19: 5.1  80C51 的中断系统

5.2.3 中断返回

RETI 的功能: 将压入堆栈的断点地址从栈顶弹回 PC

将优先级状态触发器清 0

注意:不能用 RET 指令代替 RETI 指令。中断服务程序中 PUSH 与 POP须成对使用

Page 20: 5.1  80C51 的中断系统

电平触发方式: 中断标志随中断引脚电平而变化,中断请

求的响应速度快。 但有效电平必须保持到响应时,避免漏掉;

在中断服务程序结束之前,必须撤消该有效电平,避免中断返回后再次产生中断。

此方式适于外中断输入低电平,且中断服务程序能清除外中断请求源的情况。(如, 8255 的中断请求线在读或写后即被复位,以其去请求电平触发方式的中断比较方便)。

Page 21: 5.1  80C51 的中断系统

边沿触发方式: 采到有效边沿后,则在 IE0 或 IE1 中将锁存一个 1 。即便是 CPU暂时不能响应,该标志也不会丢失,直到响应此中断时才清零。

负脉冲宽度至少要保持一个机器周期。

此方式适于以负脉冲形式输入的外部中断请求(如ADC0809 的 EOC 为正脉冲,经反相后就可以作为80C51 的中断输入)。

Page 22: 5.1  80C51 的中断系统

5.2.4 中断程序举例

P1

P3.0

Q

D

CLK

CLR

选通信号

+5V

INT0

数据

80C51Vcc

例 :单外中断源

Page 23: 5.1  80C51 的中断系统

ORG 0000HSTART : LJMP MAIN ;跳转到主程序 ORG 0003H LJMP INTO ;转中断服务程序 ORG 0030H ;主程序 MAIN : CLR IT0 ;设为电平触发方式 SETB EA ; CPU 开放中断 SETB EX0 ;允许中断 MOV DPTR , #1000H ;设置数据区指针 … …

主程序:

Page 24: 5.1  80C51 的中断系统

ORG 0200H INT0 : PUSH PSW ;保护现场 PUSH ACC CLR P3.0 ;由 P3.0输出 0 NOP NOP SETB P3.0 ;由 P3.0输出 1 ,撤除 MOV A, P1 ;输入数据 MOVX @DPTR , A ;存入数据存储器 INC DPTR ;修改指针,指向下一单元 … … POP ACC ;恢复现场 POP PSW RETI ;中断返回

中断服务程序:

Page 25: 5.1  80C51 的中断系统

例 5 个外部中断源系统

P1.3

XI0

80C51

1

1

1

1

1

P1.0

INT0

INT1 XI1

XI2

XI3

XI4

+5V

Page 26: 5.1  80C51 的中断系统

ORG 0003H LJMP INSE0 ;转外部中断 0 服务程序入口 ORG 0013H LJMP INSE1 ;转外部中断 1 服务程序入口 … … … …INSE0 : PUSH PSW ; XI0 中断服务程序 PUSH ACC … … … … POP ACC POP PSW RETI

Page 27: 5.1  80C51 的中断系统

INSE1 : PUSH PSW ;中断服务程序 PUSH ACC JB P1.0 , DV1 ; P1.0 为 1 ,转 XI1 中断服务程序 JB P1.1 , DV2 ; P1.1 为 1 ,转 XI2 中断服务程序 JB P1.2 , DV3 ; P1.2 为 1 ,转 XI3 中断服务程序 JB P1.3 , DV4 ; P1.3 为 1 ,转 XI4中断服务程序INRET : POP ACC POP PSW RETI DV1 :… … ; XI1 中断服务程序 AJMP INRET DV2 :… … ; XI2 中断服务程序 AJMP INRET DV3 : … … ; XI3 中断服务程序 AJMP INRET DV4:… … ; XI4中断服务程序 AJMP INRET

Page 28: 5.1  80C51 的中断系统

5.3 80C51 的定时 / 计数器 实现定时常用的三种方法:

软件定时:占用 CPU 时间,效率低。用 555 电路:不可编程。可编程芯片:功能强,需要另外扩展。

单片机内部有 2 个 16 位的定时 / 计数器:使用灵活,编程方便。--优先选用

Page 29: 5.1  80C51 的中断系统

5.3.1 定时 /计数器的结构和工作原理

加 1 计数器(高 8 位、低 8 位) TMOD ,工作方式设置; TCON ,启动、停止及设置溢出标志。

GATE

C/T

M1 M0 GATE

C/T

M1 M0

TH1 TL1 TH0 TL0

T1方式 T0方式

T1引脚 T0引脚 机器周期脉冲

内部总线

TMODTCON

外部中断相关位

TF1

TR1

TF0

TR0

定时 / 计数器的结构

Page 30: 5.1  80C51 的中断系统

定时 / 计数器的工作原理

计数器脉冲来源:振荡器脉冲经过 12 分频T0 或 T1引脚的外部脉冲

计数值:溢出时计数器值-计数初值。

计数器全 1 时,再输入 1 个脉冲就回零,并发生溢出( TCON 中 TF0 或 TF1 置 1 ), 发中断请求。

Page 31: 5.1  80C51 的中断系统

定时模式,对内部机器周期计数 定时时间 t =计数值 N x Tcy

计数模式,对外部事件脉冲计数 计数脉冲周期要大于 2 Tcy

Page 32: 5.1  80C51 的中断系统

5.3.2 定时 / 计数器的控制

TMOD :工作方式; TCON 控制启动和中断申请。

工作方式寄存器 TMOD

GATE C / T M1 M0 GATE C / T M1 M0TMOD (89H)

T0T1

M1 、 M0 :工作方式设置位 0 0 : 13 位计数器 0 1 : 16 位计数器 1 0 :可自动重装的 8 位计数器 1 1 : T0 分为 2 个 8 位计数器; T1此时停止工作

Page 33: 5.1  80C51 的中断系统

C/T :计数器 / 定时器选择位 = 0 , 片内时钟定时器 = 1 , 外部事件计数器

GATE :门控位 = 0 ,启动 /停止仅由软件对 TRx 位写“ 1”/“0” 控制

= 1 ,启动 /停止由软件对 TRx 位写“ 1”/“0” 和在外中断 INTx引脚出现信号的高 / 低共同控制

Page 34: 5.1  80C51 的中断系统

控制寄存器 TCON

TCON (88H)

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TFx: 溢出标志位 = 0 , 计数未满 = 1 ,计数溢出 在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。

TRx: 运行控制位 =0 ,停止计数=1 ,启动计数;

Page 35: 5.1  80C51 的中断系统

5.3.3 定时 / 计数器的工作方式

TF1

TR1

TF0

TR0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

0

0

机器周期

TH0 TL0

8位 5位

溢出

TCONTMOD

D0

D7

D7

D0申请中断

1

方式 0 13 位计数。由 TL0 的低 5 位和 TH0 的 8 位组成。 TH0溢出时,置位 TF0 标志,向 CPU 发出中断请求。

Page 36: 5.1  80C51 的中断系统

计数个数: N= t / Tcy

初值: X= 213- N

GATE=0 时,仅由 TR0 控制与门的开启; GATE=1 时,与门开启由 INTx引脚信号和 T

R0共同控制。 TR0=1 时, INTx引脚的高电平启动计数,低电平停止计数。

门控位 GATE 具有特殊的作用(测量外中断引脚上正脉冲的宽度)

Page 37: 5.1  80C51 的中断系统

方式 1 16 位计数,由 TL0 作为低 8 位、 TH0 作为高 8 位 。

TF1

TR1

TF0

TR0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

1

0

机器周期

TH0 TL0

8位 8位

溢出

TCONTMOD

D0

D7

D7

D0申请中断

初值: X= 216- N

Page 38: 5.1  80C51 的中断系统

方式 2

自动重装初值的 8 位计数方式 ,适合于用作较精确的脉冲信号发生器。

TF1

TR1

TF0

TR0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

10

机器周期

TH0

TL0

8位

溢出

TCONTMOD

D0

D7

D7

D0申请中断

初值: X= 28- N

Page 39: 5.1  80C51 的中断系统

方式 3 T0 分成为两个独立的 8 位计数器 TL0 和 TH0 , T1 处于方式 3 时停止计数。

TF1

TR1

TF0

TR0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

11

机器周期

TH0

TL0

8位

溢出

TCONTMOD

D0 D7

D0申请中断

机器周期

8位申请中断

溢出

Page 40: 5.1  80C51 的中断系统

5.3.4 定时 / 计数器用于外部中断扩展

例:用 T0扩展外部中断源 MOV TMOD , #06H

MOV TL0 , #0FFH

MOV TH0 , #0FFH

SETB TR0

SETB EA

  SETB ET0

在计数方式下,初值设为满程,外部中断源接计数引脚。输入一下降沿信号,计数器加 1后便产溢出中断。

;置 T0 为计数器方式 2

;置计数初值 ; ;启动 T0工作 ; CPU 开中断 ;允许 T0 中断

Page 41: 5.1  80C51 的中断系统

5.3.5 定时 / 计数器应用举例

初始化程序应完成如下工作:确定工作方式(对 TMOD赋值)计算初值(写入 TH0 、 TL0 或 TH1 、 TL1 )开中断(对 IE赋值)启动定时 / 计数器( TR0 或 TR1 置位)

例: 用 T0 的方式 1 产生 10ms 的定时,并使 P1.0引脚上输出周期为 20ms 的方波。采用中断方式,设系统时钟频率为 12 MHz 。

Page 42: 5.1  80C51 的中断系统

解: 1 、计算计数初值 X : 晶振为 12 MHz ,所以 Tcy 为 1 s 。 N= t/ Tcy = 10×10-3/1×10-6= 10000

X= 65536- 10000= 55536= D8F0H

即应将 D8H 送入 TH0 中, F0H 送入 TL0 中

2 、求 T0 的方式控制字 TMOD : M1M0=01 , GATE=0 , C/T=0 ,可取方式

控制字为 01H ;

Page 43: 5.1  80C51 的中断系统

ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ; T0 的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H MAIN :MOV TMOD, #01H ;置 T0工作于方式 1 MOV TH0 , #0D8H ;装入计数初值 MOV TL0 , #0F0H SETB ET0 ; T0 开中断 SETB EA ; CPU 开中断 SETB TR0 ;启动 T0 SJMP $ ;等待中断 DVT0 : CPL P1.0 ; P1.0取反输出 MOV TH0 , #0D8H ;重新装入计数值 MOV TL0 , #0F0H RETI ;中断返回 END

Page 44: 5.1  80C51 的中断系统

思考题及习题1 、 80C51 有几个中断源?各中断标志是如何产生的?又是如何复位的? CPU 响应各中断时,其中断入口地址是多少?2 、某系统有三个外部中断源 1 、 2 、 3 ,当某一中断源变低电平时便要求 CPU 处理,它们的优先处理次序由高到低为 3 、2 、 1 ,处理程序的入口地址分别为 2000H 、 2100H 、 2200H 。试编写主程序及中断服务程序(转至相应的入口即可)。3 、外部中断源有电平触发和边沿触发两种触发方式,这两种触发方式所产生的中断过程有何不同?怎样设定?4 、定时 / 计数器工作于定时和计数方式时有何异同点?5 、定时 / 计数器的 4 种工作方式各有何特点?6 、要求定时 / 计数器的运行控制完全由 TR1 、 TR0确定和完全由、高低电平控制时,其初始化编程应作何处理?7 、当定时 / 计数器 T0 用作方式 3 时,定时 / 计数器 T1 可以工作在何种方式下?如何控制 T1 的开启和关闭?

Page 45: 5.1  80C51 的中断系统

8 、利用定时 / 计数器 T0 从 P1.0输出周期为 1s ,脉宽为 20ms 的正脉冲信号,晶振频率为 12MHz 。试设计程序。9 、要求从 P1.1引脚输出 1000Hz 方波,晶振频率为 12MHz 。试设计程序。10 、试用定时 / 计数器 T1 对外部事件计数。要求每计数 100 ,就将 T1改成定时方式,控制 P1.7输出一个脉宽为 10ms 的正脉冲,然后又转为计数方式,如此反复循环。设晶振频率为 12MHz 。11 、利用定时 / 计数器 T0 产生定时时钟 , 由 P1 口控制 8 个指示灯。编一个程序 , 使 8 个指示灯依次一个一个闪动,闪动频率为 20次 /秒 (8 个灯依次亮一遍为一个周期 ) 。12 、若晶振频率为 12MHz ,如何用 T0来测量 20~ 1s之间的方波周期?又如何测量频率为 0.5MHz左右的脉冲频率?