630 likes | 822 Views
第一讲 80C51 的中断系统. 第二讲 80C51 的中断处理过程. 第三讲 80C51 的定时 / 计数器. 本章学习目标. MCS-51 单片机中断源的种类及工作方式 中断控制寄存器 IE 、中断优先级寄存器 IP 及定时器 / 计数器及外部中断控制寄存器 TCON 的使用方法 MCS-51 型单片机中断响应过程 外部中断的结构及原理 熟练编制中断服务程序. 第一讲 80C51 的中断系统. 中断的概念. 一、 80C51 的中断系统结构. 实际生活. 计算机. 看电视. 主程序. 中断请求. 电话铃响. 事件发生. 接听电话.
E N D
第一讲 80C51的中断系统 第二讲 80C51的中断处理过程 第三讲 80C51的定时/计数器
本章学习目标 • MCS-51单片机中断源的种类及工作方式 • 中断控制寄存器IE、中断优先级寄存器IP及定时器/计数器及外部中断控制寄存器TCON的使用方法 • MCS-51型单片机中断响应过程 • 外部中断的结构及原理 • 熟练编制中断服务程序
中断的概念 一、80C51的中断系统结构 实际生活 计算机 看电视 主程序 中断请求 电话铃响 事件发生 接听电话 事件处理 中断处理 中断返回 看电视 主程序
中断的概念: 主程序 中断响应 执行主程序 执行中断处理程序 中断请求 断点 继续执行主程序 中断返回
INT0 T0 INT1 T1 TX RX MCS-51单片机的中断系统 中断允许控制 中断优先级 中断请求标志 高级 内 部 查 询 入口地址 低级 内 部 查 询 ≥1 EA 入口地址 中断源
二、中断源 1.中断源 共有五个中断源,分别是外部中断两个、定时中断两个和串行中断一个,它们是: 外部中断0--INT0,由P3.2提供, 外部中断1—INT1,由P3.3提供, 外部中断有两种信号方式,即电平方式和脉冲方式。(IT0 、IT1) T0溢出中断; 由片内定时/计数器0提供 T1溢出中断; 由片内定时/计数器1提供 串行口中断RI/TI; 由片内串行口提供
2、中断源入口地址 具体入口如下: 中断源 入口地址 INT0 0003H T0 000BH INT1 0013H T1 001BH RI/TI 0023H 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。
三、 中断控制的寄存器 与中断控制有关的控制寄存器有四个: TCON----定时控制寄存器, IE----中断允许控制寄存器, IP----中断优先级控制寄存器, SCON----及串行口控制寄存器。 定时控制寄存器TCON 触发方式选择 0 低电平1 下降沿 中断请求标志
串行口控制寄存器SCON 串行中断请求标志 中断允许控制寄存器IE 0 禁止,1允许 中断优先级控制寄存器(IP) 0 低级别,1高级别
例:IP=09H=0000 1001 PT1、PX0高 INT0、T1、T0、INT1、串行口 IP=55H=0101 0101 Ps px1 px0同级别,都为1 PT0 PT1同级别,都为0 处理顺序为PX0 PX1 PS PT0 PT1 INT0 INT1 RX/TX T0 T1
TCON的中断标志 • 1、中断请求标志 TCON (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 • IT0,外中断0触发方式控制位。 =0,电平触发方式。 =1,边沿触发方式(下降沿有效)。 • IE0,外中断0中断请求标志位。 • TF0,T0溢出中断请求标志位。 IT1 、IE1、 TF1类同
SCON (98H) • 2、SCON的中断标志 TI RI • RI,接收中断标志位。 • TI,发送中断标志位。 注意:RI和TI由硬件置位、由软件清除。 SETB TI SETB 99H
IE (A8H) EA ES ET1 EX1 ET0 EX0 • 3、中断允许控制 EX0,外中断0允许位; ET0,T0中断允许位; EX1,外中断0允许位; ET1,T1中断允许位; ES ,串口中断允许位; EA , CPU中断允许(总允许)位。
IP (B8H) PS PT1 PX1 PT0 PX0 • 4、中断优先级控制 PX0,外中断0优先级设定位; PT0,T0优先级设定位; PX1,外中断0优先级设定位; PT1,T1优先级设定位; PS ,串口优先级设定位。 MOV IP,#10H MOV 0B8H,#10H SETB PS
同时收到几个中断时,响应优先级别最高的 • 中断过程不能被同级、低优先级所中断 • 低优先级中断服务,能被高优先级中断 中断优先级三条原则: 有2个优先级状态触发器: • 高优先级状态触发器 • 低优先级状态触发器
一、中断响应条件和时间 • 中断响应条件 • 有中断请求; • 对应中断允许位为1; • 开中断(即EA=1)。 • 同时满足时,才可能响应中断。
硬件受阻,不产生LCALL的几种情况: • 正在处理同级或高优先级中断; • 当前查询的机器周期不是所执行指令的最后一个机器周期。 • 正执行的指令为RET、RETI或任何访问IE或IP的指令(只有在这些指令后面至少再执行一条指令时才能接受中断请求)。 受阻未得到响应的中断,若条件消失时该中断标志已不再有效,该中断将不被响应。
二、 中断响应过程 • 相应优先级状态触发器置1 • 执行硬件LCALL指令 • 把PC的内容入栈 • 相应中断服务程序的入口送PC • 执行中断服务程序。 中断响应过程的前两步是由中断系统内部自动完成的,而中断服务程序则要由用户编写程序来完成。
P1口 数据 P3.0 INT0 Q 1 CLR +5V D 8031 CLK 选通信号 例1:单外中断源 三、中断程序举例
主程序: ORG 0000H START:LJMP MAIN ;跳转到主程序 ORG 0003H LJMP EXXX;转中断服务程序 ORG 0030H ;主程序 MAIN:SETB EA ;CPU开放中断 SETB EX0;允许中断 MOV DPTR,#1000H ;设置数据区指针 SJMP $ ……
中断服务程序: ORG 0200H EXXX:CLR P3.0 ;由P3.0输出0 NOP NOP SETB P3.0 ;由P3.0输出1,撤除 MOV A,P1 ;输入数据 MOVX @DPTR,A ;存入数据存储器 INC DPTR ;修改指针,指向下一单元 …… RETi;中断返回
例2.中断和查询相结合 一个外中断扩展成多个外中断的原理图
由图可知: (1)4个外部扩展中断源通过 4个OC门电路组成线或取非后再与 P3.2相连; (2)4个外部扩展中断源EXINT0~EXINT3中有一个或几个出现高电平则输出为0,使.P3.2脚为低电平,从而发出中断请求。 (3)因此,这些扩充的外部中断源都是电平触发方式(高电平有效)。 (4)CPU执行中断服务程序时,先依次查询P1口的中断源输入状态,然后,转入到相应的中断服务程序,4个扩展中断源的优先级顺序由软件查询顺序决定,即最先查询的优先级最高,最后查询的优先级最低。
INT0 1 XI0 +5V 1 INT1 XI1 1 XI2 1 XI3 80C51 1 XI4 P1.3 P1.0 例3、5个外部中断源系统
ORG 0000H LJMP MAIN ORG 0003H LJMP INSE0 ;转外部中断0服务程序入口 ORG 0013H LJMP INSE1;转外部中断1服务程序入口 MAIN:SETB EA SETB EX0 SETB EX1 SJMP $ INSE0: PUSH PSW ;XI0中断服务程序 PUSH ACC POP ACC POP PSW RETI
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
实现定时常用的三种方法: • 软件定时:占用CPU时间,效率低。 • 用555电路:不可编程。 • 可编程芯片:功能强,需要另外扩展。 单片机内部有2个16位的定时/计数器:使用灵活,编程方便。--优先选用
一、定时/计数器的结构 1、定时/计数器的结构和工作原理 • 加1计数器(高8位、低8位) • TMOD,工作方式设置; • TCON,启动、停止及设置溢出标志。
2、定时/计数器的工作原理 • 计数器脉冲来源: • 振荡器脉冲经过12分频 • T0或T1引脚的外部脉冲 定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。 计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。 在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1工作在定时器方式还是计数器方式。
定时模式,对内部机器周期计数 定时时间 t =计数值N x Tcy • 计数模式,对外部事件脉冲计数 计数脉冲周期要大于2 Tcy • 计数值:溢出时计数器值-计数初值。 • 计数器全1时,再输入1个脉冲就回零,并发生溢出(TCON中TF0或TF1置1),发中断请求。
二、定时器/计数器的控制寄存器 与定时器/计数器有关的控制寄存器有: 定时器控制寄存器TCON 启动定时/计数器 触发方式选择 中断请求标志 0 停止 1 启动 0 低电平1 下降沿
D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/T M1 M0 C/T—计数/定时选择 工作方式控制寄存器TMOD T1控制 T0控制 GATE—门控位 M1 M0—工作方式选择
振荡器 1/12 C/T=0 TL0 TH0 TF0 C/T=1 T0 低5位 8位 TR0 & 1 ≥1 GATE INT0 三、、定时器/计数器的工作方式 1. 方式0—13位方式。由TL0的低5位和TH0的8位组成。TH0溢出时,置位TF0标志,向CPU发出中断请求。 定时器 13位计数器 计数器 计数脉冲输入 计数初值:X=213-N • 定时= (213–X)*12*1/fosc • 8*10-3=(213-x)*12*1/12*106 • 8192*10-6s=8.192ms • TMOD=0000 gate C/T M1M0 • =0000 0 1 00=04H • 0000 0 0 00=00H
振荡器 1/12 C/T=0 8位 8位 TL0 TH0 TF0 16位计数器 C/T=1 T0 TR0/TR1 & 1 GATE ≥1 INT0 2. 方式1—16位方式 16位计数,由TL0作为低8位、TH0作为高8位 。 16位计数,由TL1作为低8位、TH1作为高8位 初值:X=216-N 定时= (216–X)*12*1/fosc 1*10-3=(216-X)*12*1/6*106 1000=(65536-X)*2 X=65036 FE0CH
振荡器 1/12 C/T=0 TL0 TF0 C/T=1 T0 TR0 & TH0 1 GATE ≥1 INT0 3. 方式2—8位自动装入时间常数方式 自动重装初值的8位计数方式,适合于用作较精确的脉冲信号发生器。 初值:X=28-N
4. 方式3—2个8位方式 仅T0可以工作在方式3,T1处于方式3时停止计数。—此时T0分成2个独立的计数器—TL0和TH0 ,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。 (1)TH0由TR1启动/停止,溢出TF1 (2)TL0由TR0启动/停止,溢出TF0 (3)TH0只能定时,TL0可以定时/计数,且都是8位 定时T=(28-X)*12*1/fosc TL0计数初值 X=28-N
例:在方式3下,用TH0产生200US方波,TL0计算TH0产生的方波数。12MHZ。例:在方式3下,用TH0产生200US方波,TL0计算TH0产生的方波数。12MHZ。 (1)初值 TH0定时 100*10-6=(28-X)*12*(1/12*106) 100=256-X X=9CH TH0=9CH (2)TM0D GATE C/T M1M0 GATE C/T M1M0 0000 0 1 11
(3)ORG 0000H AJMP START ORG 30H START: CLR A MOV TL0,A MOV TH0,#9CH MO TMOD,#07H SETB TR0 SETB TR1 LOOP: JNB TF1,$ CLR TF1 CPL P3.4 ;TH0输出方波 MOV A,TL0 CPL A MOV P1,A AJMP LOOP END
设计数器最大计数值为M,选择不同的工作方式最大计数值不同。12MHZ设计数器最大计数值为M,选择不同的工作方式最大计数值不同。12MHZ 方式0:M=213=8192 , 8.192ms 方式1:M=216=65536, 65.536ms 方式2:M=28=256, 256us 方式3:M=28=256, 256us
四、应用举例 可编程器件在使用前需要进行初始化: ①确定TMOD控制字:编程时将控制字送TMOD; ②计算计数器的计数初值: 编程时将计数初值送THi、 TLi; ③开中断(如果使用中断方式): 编程实置位EA、ETi ④TRi位置位控制定时器的启动和停止。
【例1】: 用T0的方式1产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波。采用中断方式,设系统时钟频率为12 MHz。 • 解:1、计算计数初值X: 10*10-3=(216-x)*12*(1/12*106) 10 000=65536-x X=55536=D8 F0H TL0=0F0H TH0=0D8H 2、求T0的方式控制字TMOD: GATE C/T M1M0 GATE C/T M1M0 0 0 0 0 0 0 01 01H
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
ORG 0000H;T1 方式1 500US LJMP MAIN ORG 0100H MAIN:MOV TMOD,#10H LOOP:MOV TH1,#0FEH MOV TL1,#0CH SETB TR1 JNB TF1,$ CLR TF1 Sjmp LOOP END
【例2】若单片机晶振为12MHz,要求产生500μs的定时,试计算X的初值。 解:采用方式0: 500*10-6=(213-X)*12*1/fosc x=7692=1E0CH=1 1110 000 0 1100 F0H 0CH 即将F0H装入TH0,0CH装入TL0。 TMOD=GATE C/T M1M0 GATE C/T M1M0 0 0 0 0 0 0 00 00H 采用方式1: 500*10-6=(216-X )*12*1/fosc x=65036=FE0CH 即将FEH装入TH1,0CH装入TL1。 TMOD=GATE C/T M1M0 GATE C/T M1M0 0 0 01 0 0 0 0 10H
【例3】用定时器1,方式0实现1s的延时。 解:因方式0采用13位计数器,其最大定时时间为:8192*1μs=8192μs,因此,定时时间可选择为8ms,再循环125次;或者定时时间选择为5ms,再循环200次。本例我们选择前者。定时时间选定后,再确定计数值为5000,则定时器1的初值为 5*10-3 =(213-X)*12*1/fosc 5000=(8192-X)*12/12 X=8192-5000=3192 =0C78H = 0110 0 011 0001 1000 6 3 H ( TH1 ) 1 8 H(TL1) 又因采用方式0定时,故TMOD=00H。 TMOD=GATE C/T M1M0 GATE C/T M1M0 0 0 0 0 0 0 00