500 likes | 638 Views
单片机原理及应用. 第五章 中断与定时. §5.1 MCS-51 单片机的 中断系统. 一、单片机中断技术概述 1 、有关中断术语: 中断源、断点、中断服务程序 开中断、关中断、中断优先级 2 、 中断技术:中断技术是解决资源竞争实现资 源共享的方法 3 、 程序中断与调用子程序的区别: 在于是否可预知 4 、中断的功能 实现 CPU 与外设的速度匹配 实时控制 故障及时发现. §5.1 MCS-51 单片机的 中断系统. 二、中断源 5 个中断源,分高低两级中断优先级别
E N D
单片机原理及应用 第五章 中断与定时
§5.1 MCS-51单片机的中断系统 • 一、单片机中断技术概述 1、有关中断术语: 中断源、断点、中断服务程序 开中断、关中断、中断优先级 2、中断技术:中断技术是解决资源竞争实现资 源共享的方法 3、程序中断与调用子程序的区别:在于是否可预知 4、中断的功能 • 实现CPU与外设的速度匹配 • 实时控制 • 故障及时发现 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 二、中断源 5个中断源,分高低两级中断优先级别 1、外中断:2个,/INT0、/INT1 • 产生原因:P3.2、P3.3的引脚电平变化 • 可控制为:低电平或边沿(下降沿)触发中断 • CPU根据控制方式和P3.2、P3.3引脚电平置有关标志位 • 转向中断服务程序时,自动清除标志位 • 中断入口地址:0003H、0013H • 撤销方式: 边沿方式自动撤销;电平方式外加硬件电路撤销中断 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 二、中断源 5个中断源,分高低两级中断优先级别 2、定时器中断:2个,T0、T1 • 产生原因:计数溢出 • 可控制为:4种方式(计8192、65536、256、256 ) • CPU根据溢出置有关标志位 • 转向中断服务程序时,自动清除标志位 • 中断入口地址:000BH、001BH • 撤销方式:自动撤销 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 二、中断源 5个中断源,分高低两级中断优先级别 3、串行口中断:1 个 • 产生原因:串行口(P3.0、P3.1)接收或发送完一组(帧)数据。 • 可控制为:4种方式 • CPU置有关标志位 • 转向中断服务程序时,不自动清除标志位,软件清除 • 中断入口地址:0023H • 撤销方式:标志清除后撤销 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 三、单片机对中断源的管理 由IE寄存器控制中断是否被允许 由IP寄存器控制各中断源的中断优先级别 由TCON寄存器控制外中断的触发方式、外中断及定时器中断的标志位设置 由SCON寄存器控制串行口中断的工作方式及其标志设置。 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 三、单片机对中断源的管理 1、TCON:定时器控制寄存器 定时器 外中断 • TF:定时器溢出标志, TF=1时表示溢出 如:TF1=1,T1溢出; TF0=1,T0溢出 • TR:定时器启动标志, TR =1时启动 如:TR1=1,启动T1计数; TR0=1,启动T0计数 • IE:外中断标志位,IE=1,表示有外中断 • IT:外中断触发控制(0:低电平触发;1:边沿触发) yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 三、单片机对中断源的管理 1、TCON:定时器控制寄存器 定时器 外中断 例:TCON=11001010B,即CAH 表示: yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 三、单片机对中断源的管理 2、IE:中断允许寄存器 • EA:EA=1 ,允许CPU响应中断,中断总允许 • ES:ES=1 ,允许串行口中断 • ET1: ET1=1 ,允许定时器1中断 • EX1: EX1=1 ,允许外中断1中断 • ET0: ET0=1 ,允许定时器0中断 • EX0: EX0=1,允许外中断0中断 例如:若要允许T0产生中断,必须ET0=1且EA=1 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 • 三、单片机对中断源的管理 3、IP:中断允许寄存器 某位=1,对应中断源处于高优先级 • PS:PS=1 ,串行口中断处于高优先级 • PT1: PT1=1 ,定时器1中断处于高优先级 • PX1: PX1=1 ,外中断1中断处于高优先级 • PT0: PT0=1 ,定时器0中断处于高优先级 • PX0: PX0=1,外中断0中断处于高优先级 注意:复位后,IE=00H,IP=00H,表示。。。。 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 四、中断优先级的控制原则: MCS-51具有两级优先级,两级中断服务嵌套功能,控制原则是: • 低优先级的中断请求不能打断高优先级的服务,高优先级的中断请求可以打断低优先级的服务。 • 如果一个中断请求已被响应,则同级的中断服务将被禁止。 • 同级的中断同时出现,CPU响应中断的顺序是: 外中断0、T0、外中断1、T1、串行口 例如:若设置IP=12H,则CPU响应中断的顺序是: T0、串行口、外中断0、外中断1、T1 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 五、中断响应过程: 1、中断采样: 2、中断查询: 3、 中断响应:产生LCALL指令 • 中断响应时间:3~8个机器周期 (标志位查询) 1+(LCALL)2=3 (IE、IP、RET、RETI)2+(MUL、DIV)4+ (LCALL) 2=8 yjia@zjip.com
§5.1 MCS-51单片机的中断系统 五、中断请求的撤销: 目的:使一次中断请求执行中断服务一次 1、定时中断请求:转向中断服务程序自动撤销 2、串行中断请求:在中断服务程序中使用指令撤销 软件撤销。 3、 边沿触发方式的外中断请求:转向中断服务程序自动撤销 4、电平触发方式的外中断请求:外加硬件电路撤销 P145 图6.2 yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 • 一、定时方法种类: 1、软件定时、 2、硬件定时、 3、可编程定时器定时 • 二、定时和计数功能综述: 1、由两个16位的加法计数器(TH0TL0、TH1TL1)进行计数,通过对TH0TL0和TH1TL1的初值设置,可控制计数长度 2、定时功能是对内部机器周期计数,计数功能是对T0、T1引脚进行计数。 3、计数频率: 定时:一个机器周期,fosc/12 计数:外来信号,频率≤ fosc/24 yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 通过控制TCON 、IE、 IP、TMOD寄存器达到目的 1、 TCON 、IE 、 IP有关位的控制意义 yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 1、IP、IE、TCON有关位的控制意义 2、TMOD寄存器介绍 T0 T1 • GATE:门控位 GATE=0,当TR=1时,启动定时器,软启动 GATE=1,当TR=1且INT=1时,启动定时器,硬启动 • C/T=1,计数功能; C/T=0,定时功能。 • M1M0:定时器工作方式,00~11指定工作方式0~3 yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 1、IP、IE、TCON有关位的控制意义 2、TMOD寄存器介绍 • 3、初始化定时器/计数器的步骤: • 设置TMOD,控制定时器的工作方式 • 设置TH、TL计数初值 • 设置IE、IP yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 4、计数初值X的计算: • 计数方式:M-X=要计的数 例如:使用T0工作于方式1计数,每计1000就溢出 求计数初值 65536-X=1000,得X=64536D=FC18H 某种方式下最长计数值 方式0:M=8192 方式1:M=65536 方式2、3:M=256 系统要求 yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 4、计数初值X的计算: • 定时方式:(M-X)×机器周期=要定时的时间 例如:使用T1工作于方式1定时10mS,若fosc=6MHz, 则计数初值=? ( 65536-X)×2uS=10mS,得X=60536D=EC78H 某种方式下最长计数值 方式0:M=8192 方式1:M=65536 方式2、3:M=256 系统要求 系统给出 yjia@zjip.com
§5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 1、IP、IE、TCON有关位的控制意义 2、TMOD寄存器介绍 3、初始化定时器/计数器(T/C)的步骤 • 4、定时器/计数器(T/C)的使用步骤 • 初始化T/C(TMOD、THTL、IE、IP) • 启动T/C:SETB TR • 查询方式:判TF,若=1,则转相应处理 中断方式:当TF=1时硬件自动转向中断入口地址,在 中断入口地址处按排相应处理程序即可 yjia@zjip.com
初始化T/C 启动T/C TF=1? N Y 清TF位 重送TH、TL 溢出处理 §5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 4、定时器/计数器(T/C)的使用步骤 • 初始化T/C • 启动T/C:SETB TR • 查询方式:判TF,若=1,则转相应处理 yjia@zjip.com
初始化T/C 重送TH、TL 启动T/C 溢出处理 (其它处理),并等待中断 中断返回 §5.2 MCS-51定时器/计数器的控制 三、定时器/计数器的控制: 4、定时器/计数器(T/C)的使用步骤 • 初始化T/C • 启动T/C:SETB TR • 中断方式:当TF=1时硬件自动转向中断入口地址,在中断入口地址处按排相应处理程序即可 主程序: 中断服务程序: yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 一、方式0 1、13位计数器:TH8TL5 2、计数长度:1~8192 定时长度:(1~8192)×机器周期 例:设单片机晶体振荡频率为6MHz,使用定时器1以方式0产生500uS的等宽正方波连续脉冲,问计数初值应为多少? yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 一、方式0 例:设单片机晶体振荡频率为6MHz,使用定时器1以方式0产生500uS的等宽正方波连续脉冲,问计数初值应为多少? 解:(1)方式0最大的计数长度M=8192 (2)当fosc= 6MHz, 机器周期为2uS 设计数初值为X,则(8192-X)× 2uS =250 Us 解得X=8067D=11111100,00011B 所以,TH1=FCH,TL1=03H yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 二、方式1 1、16位计数器:TH8TL8 2、计数长度:1~65536 定时长度:(1~65536)×机器周期 例:设单片机晶体振荡频率为6MHz,使用定时器1以方式1产生500uS的等宽正方波连续脉冲,并从P1.0输出,试编程。 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 二、方式1 例:设单片机晶体振荡频率为6MHz,使用定时器1以方式1产生500uS的等宽正方波连续脉冲,并从P1.0输出,试编程。 解:(1)计算计数初值 设计数初值为X,则(65536-X)× 2uS =250 uS 解得X=65411D=11111111,10000011B 所以,TH1=FFH,TL1=83H (2)TMOD、IE、IP的确定 (3)查询方式编程、中断方式编程 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 二、方式1 例:设单片机晶体振荡频率为6MHz,使用定时器1以方式1产生500uS的等宽正方波连续脉冲,并从P1.0输出,试编程。 解:(2)TMOD、IE、IP的确定 TMOD:0001,XXXX 即10H IE:查询方式:00H; 中断方式:1XX0,1000 即88H IP:00H yjia@zjip.com
(3)查询方式编程 MOV TMOD,#10H MOV TH1,#0FFH MOV TL1,#83H MOV IE,#00H MOV IP,#00H SETB TR1 LOOP:JBC TF1,LOOP1 AJMP LOOP LOOP1:MOV TH1,#0FFH MOV TL1,#83H CPL P1.0 AJMP LOOP 初始化T/C 启动T/C TF1=1? N Y 清TF1位 重送TH1、TL1 溢出处理 例:设单片机晶体振荡频率为6MHz,使用定时器1以方式1产生500uS的等宽正方波连续脉冲,并从P1.0输出,试编程。 yjia@zjip.com
(3)中断方式编程 MOV TMOD,#10H MOV TH1,#0FFH MOV TL1,#83H MOV IE,#88H MOV IP,#00H SETB TR1 SJMP $ T1PRO:MOV TH1,#0FFH MOV TL1,#83H CPL P1.0 RETI 初始化T/C 重送TH1、TL1 启动T/C 溢出处理 (其它处理),并等待中断 中断返回 主程序: 中断服务程序: yjia@zjip.com
(3)中断方式编程 ORG 0000H AJMP MAIN ORG 001BH AJMP T1PRO ORG 0030H MAIN: MOV TMOD,#10H MOV TH1,#0FFH MOV TL1,#83H MOV IE,#88H MOV IP,#00H SETB TR1 SJMP $ T1PRO:MOV TH1,#0FFH MOV TL1,#83H CPL P1.0 RETI yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 1、8位计数器:TL8,TH8用来保存TL8的初值 2、计数长度:1~256 定时长度:(1~256)×机器周期 例:用定时器1方式2实现计数,每计100次,累加器加1,试编程。 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例:用定时器1方式2实现计数,每计100次,累加器加1,试编程。 解:(1)计算计数初值 设计数初值为X,则:256-X=100 解得X=156D=9CH 所以,TH1=9CH,TL1=9CH (2)TMOD、IE、IP的确定 (3)查询方式编程、中断方式编程 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例:用定时器1方式2实现计数,每计100次,累加器加1,试编程。 解:(2)TMOD、IE、IP的确定 TMOD:0110,XXXX 即60H IE:查询方式:00H; 中断方式:1XX0,1000 即88H IP:00H yjia@zjip.com
(3)查询方式编程 MOV TMOD,#60H MOV TH1,#9CH MOV TL1,#9CH MOV IE,#00H MOV IP,#00H SETB TR1 LOOP:JBC TF1,LOOP1 AJMP LOOP LOOP1: INC A AJMP LOOP 初始化T/C 启动T/C TF1=1? N Y 清TF1位 重送TH1、TL1 溢出处理 例1:用定时器1方式2实现计数,每计100次,累加器加1,试编程。 yjia@zjip.com
(3)中断方式编程 MOV TMOD,#60H MOV TH1,#9CH MOV TL1,#9CH MOV IE,#88H MOV IP,#00H SETB TR1 SJMP $ T1PRO: INC A RETI 初始化T/C 重送TH1、TL1 启动T/C 溢出处理 (其它处理),并等待中断 中断返回 主程序: 中断服务程序: yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例2:使用定时器0工作于方式2产生100uS的定时,从P1.0输出200uS的等宽正方波连续脉冲,单片机晶体振荡频率为6MHz,试编程。 解:(1)计算计数初值 设计数初值为X,则(256-X)× 2uS =100 uS 解得X=206D=CEH 所以,TH0=CEH,TL0=CEH (2)TMOD、IE、IP的确定 (3)查询方式编程、中断方式编程 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例2:使用定时器0工作于方式2产生100uS的定时,从P1.0输出200uS的等宽正方波连续脉冲,单片机晶体振荡频率为6MHz,试编程。 解:(2)TMOD、IE、IP的确定 TMOD: XXXX , 0010 即02H IE:查询方式:00H; 中断方式:1XX0,0010 即82H IP:00H yjia@zjip.com
(3)查询方式编程 MOV TMOD,#02H MOV TH1,#0CEH MOV TL1,#0CEH MOV IE,#00H MOV IP,#00H SETB TR1 LOOP:JBC TF1,LOOP1 AJMP LOOP LOOP1:CPL P1.0 AJMP LOOP 初始化T/C 启动T/C TF0=1? N Y 清TF0位 重送TH0、TL0 溢出处理 例2:使用定时器0工作于方式2产生100uS的定时,从P1.0输出200uS的等宽正方波连续脉冲,单片机晶体振荡频率为6MHz,试编程。 yjia@zjip.com
(3)中断方式编程 MOV TMOD,#02H MOV TH1,#0CEH MOV TL1,#0CEH MOV IE,#82H MOV IP,#00H SETB TR1 SJMP $ T1PRO:CPL P1.0 RETI 初始化T/C 重送TH0、TL0 启动T/C 溢出处理 (其它处理),并等待中断 中断返回 主程序: 中断服务程序: yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例3:有晶体振荡频率为12MHz的单片机,使用定时器0以方式2从P1.0输出周期占空比为1:10的矩形方波,试编程。 • 思路: • 即所求矩形方波高电平为40uS,低电平为360uS。 • 使T0定时40uS。当P1.0为高电平时,每定时时间到使P1.0变为低电平;当P1.0为低电平时,每定时时间到使R7减1,(R7初值为9),当R7减到0时,使P1.0变为高电平。 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例3:有晶体振荡频率为12MHz的单片机,使用定时器0以方式2从P1.0输出周期占空比为1:10的矩形方波,试编程。 解: (1)计算计数初值 设计数初值为X,则(256-X)× 1uS =40uS 解得X=216D=D8H 所以,TH0=D8H,TL0=D8H (2)TMOD、IE、IP的确定 (3)查询方式编程、中断方式编程 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 三、方式2— 8位重装计数初值 例3:有晶体振荡频率为12MHz的单片机,使用定时器0以方式2从P1.0输出周期占空比为1:10的矩形方波,试编程。 解:(2)TMOD、IE、IP的确定 TMOD: XXXX , 0010 即02H IE:查询方式:00H; (中断方式:1XX0,0010 即82H) (IP:00H) yjia@zjip.com
溢出处理: 初始化T/C、R7 启动T/C TF0=1? N P1.0=1? Y Y N 清TF0位 P1.0=0 R7-1=0? N 重送TH0、TL0 Y R7=09H 溢出处理 P1.0=1 例3:有晶体振荡频率为12MHz的单片机,使用定时器0以方式2从P1.0输出周期占空比为1:10的矩形方波,试编程。 yjia@zjip.com
(3)查询方式编程 MOV R7,#09H MOV TMOD,#02H MOV TH1,#0CEH MOV TL1,#0CEH MOV IE,#00H MOV IP,#00H SETB TR1 LOOP:JBC TF1,LOOP1 AJMP LOOP 例3:有晶体振荡频率为12MHz的单片机,使用定时器0以方式2从P1.0输出周期占空比为1:10的矩形方波,试编程。 • 溢出处理: LOOP1:JB P1.0,LOOP2 DJNZ R7,LOOP3 MOV R7,#09H SETB P1.0 LOOP3: AJMP LOOP CLR P1.0 AJMP LOOP3 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 四、方式3 特点: • T0:被拆分成两个独立的8位计数器TH0、TL0,TL0能作计数器用也能作定时器用,TH0只能作定时器用,TH0占用了T1的溢出标志TF1和启动控制位TR1。 • T1:当T0工作于方式3时,T1可工作于方式0、1、2,用作波特率发生器用。 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 五、定时器/计数器的应用 例1:用51定时器/计数器0工作于方式1产生时钟计时,每秒到给内部RAM的SEC地址加1,每60秒到给内部RAM的MIN地址加1,并使SEC清0。fosc=6MHz 解: (1)计算计数初值 (2)TMOD、IE、IP的确定 (3)查询方式编程、中断方式编程 yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 五、定时器/计数器的应用 例1:用51定时器/计数器0工作于方式1产生时钟计时,每秒到给内部RAM的SEC地址加1,每60秒到给内部RAM的MIN地址加1,并使SEC清0。fosc=6MHz 思路:设T0工作于方式1定时100mS,每定时时间到R7减1(R7的初值为10),当R7=0时即1秒到 (1)计算计数初值 计数初值为X,则(65536-X)× 2uS = 100mS 解得X=15536D=3CB0H 所以,TH0=3CH,TL0=B0H yjia@zjip.com
§5.3 MCS-51定时器/计数器工作方式 • 五、定时器/计数器的应用 例1:用51定时器/计数器0工作于方式1产生时钟计时,每秒到给内部RAM的SEC地址加1,每60秒到给内部RAM的MIN地址加1,并使SEC清0。fosc=6MHz 解:(2)TMOD、IE、IP的确定 TMOD:XXXX,0001 即01H IE:中断方式:1XX0,0010 即82H IP:00H yjia@zjip.com
主程序流程 中断服务流程 重送TH0、TL0 初始化T/C 初始化R7 初始化SEC、MIN N R7-1≠0? Y (SEC)=(SEC)+1 启动T/C N (SEC)=60? (其它处理),并等待中断 Y (SEC)=0 (MIN)=(MIN)+1 中断返回 程序流程: yjia@zjip.com
主程序 ORG 0000H AJMP STR ORG 000BH AJMP T0P ORG 0030H STR: MOV R7,#10 MOV SEC,#00H MOV MIN,#00H MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV IE,#82H MOV IP,#00H SETB TR0 SJMP $ 中断服务流程 T0P:MOV TH0,#3CH MOV TL0,#0B0H DJNZ R7,T0P0 INC SEC CJNE SEC,#60,T0P0 MOV SEC,#00H INC MIN T0P0: RETI 程序: yjia@zjip.com