390 likes | 744 Views
第 6 章 单片机的中断与定时系统. 6.1 MCS-51 单片机中断系统 6 .2 MCS-51 单片机的定时器 / 计数器 6.3 MCS-51 单片机外部中断源的扩展 6.4 定时 / 计数器与中断综合应用举例. 6.1 MCS-51 单片机中断系统. 6.1.1 中断请求 6.1.2 中断源 6.1.3 中断控制 6.1.4 中断响应过程 6.1.5 中断请求的撤销 6.1.6 中断服务流程. 6.1.1 中断请求. 图 6-1 中断流程图.
E N D
第6章 单片机的中断与定时系统 • 6.1 MCS-51单片机中断系统 • 6.2 MCS-51单片机的定时器/计数器 • 6.3 MCS-51单片机外部中断源的扩展 • 6.4 定时/计数器与中断综合应用举例
6.1 MCS-51单片机中断系统 • 6.1.1 中断请求 • 6.1.2 中断源 • 6.1.3 中断控制 • 6.1.4 中断响应过程 • 6.1.5 中断请求的撤销 • 6.1.6 中断服务流程
6.1.1 中断请求 图6-1 中断流程图
6.1.2 中断源 • 1. 外部中断源(2个) • 由INT0(P 3.2)引入,低电平或下降沿引起。 • 由INT1(P 3.3)引入,低电平或下降沿引起。 • 2. 外部中断请求有两种信号方式:电平方式和脉冲方式。 • 电平方式的中断请求是低电平有效。 • 脉冲方式的中断请求是脉冲的后沿负跳有效。
3.定时中断源(2个) • T0:定时/计数器0中断,由T0溢出引起。 • T1:定时/计数器1中断,由T1溢出引起。 4. 串行中断(1个) • TI/RI:串行I/O中断,完成一帧字符发送/接收引起。
6.1.3 中断控制 • 1. 定时器控制寄存器(TCON) 该寄存器用于保存外部中断请求以及定时器的计数溢 出。寄存器地址88H,位地址8FH~88H。 D D D D D D D D 7 6 5 4 3 2 1 0 TF TR TF TR IE IT IE IT TCON 1 1 0 0 1 1 0 0 8F 8E 8D 8C 8B 8A 89 88 位地址 { 0:电平触发方式,低电平有效 1:脉冲触发方式,后沿负跳有效 { 0:转向中断服务时,由硬件清0 1:出现外部中断,由硬件置1 { 0:无T 中断(硬件复位) 0 1:有T 溢出中断 0 0:无T 中断(硬件复位) { 1 1:有T 溢出中断 1
2. 串行口控制寄存器(SCON) • 串行中断请求由TI和RI的逻辑或得到,寄存器地址 • 98H,位地址9FH~98H。 D D D D D D D D 7 6 5 4 3 2 1 0 SM SM SM REN TB RB TI RI SCON 0 1 2 8 8 9F 9E 9D 9C 9B 9A 99 98 位地址 0:转向中断服务时,用软件清0 { 1:接收完一帧串行数据后,硬件置1 { 0:转向中断服务时,用软件清0 1:发送完一帧串行数据后,由硬件置1
3. 中断允许寄存器IE(0A8H) IE在特殊功能寄存器中,字节地址0A8H,位地址分别是 0A8H~0AFH。IE控制CPU对中断源总的开放或禁止以 及每个中断源是否允许中断。 EA ES ET EX ET EX IE 1 1 0 0 AF AC AB AA A9 A8 位地址 0:关INT 中断 0 1:开INT 中断 0 0:关T 中断 0 1:开T 中断 0 0:关INT 中断 1 1:开INT 中断 1 0:关T 中断 1 1:开T 中断 1 0:关串行口中断 1:开串行口中断 0:关所有中断 1:开所有中断
4. 中断优先寄存器IP(0B8H) IP在特殊功能寄存器中,字节地址为0B8H,位地址分别 是0B8H~0BFH,IP用来锁存各中断源优先级的控制位, 系统定义高、低2个优先级。
5. 中断优先级控制原则和控制逻辑 • 1)低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。 • 2)如果一个中断请求已被响应,则同级的其他中断服务将被禁止,即同级不能嵌套。 • 3)如果同级的多个中断请求同时出现,按CPU查询次序确定那个中断请求被响应。查询次序为:外部中断0—>定时中断0 —>外部中断1 —>定时中断1 —>串行中断。
6.1.4 中断响应过程 • 1. 中断采样 采样是对芯片引脚INT0(P3.2)和INT1(P3.3)在每个机器周期的S5P2进行的,根据采样结果来设置TCON寄存器中响应标志位的状态,即把外中断请求锁定在这个寄存器中。 • 2. 中断查询 CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在再下一个机器周期S1期间按优先级进行中断处理。
3. 中断响应 中断响应主要是由硬件自动生成一条长调用指令LCALL。其格式:LCALL addr16。中断得到响应后自动清除中断标志,由硬 件将程序计数器PC内容压入堆栈保护,然后将对应的中断矢量 装入程序计数器PC,使程序转向中断矢量地址单元中去执行相应的中断服务程序。通常在各中断入口地址处放置一条无条件跳转指令,使程序执行转向在其他地址存放的中断服务程序。 例如: ORG 8000H //主程序入口地址 START: AJMP MAIN ORG 800BH //定时/计数器0中断服务程序入口地址 AJMP PITO
下列任何一种情况存在中断申请将被封锁: (1)CPU正在执行一个同级或高一级的中断服务程序。 (2)当前正在执行的那条指令还未执行完。 (3)当前正在执行的指令是RETI或对IE,IP寄存器进行读/写指令,执行这些指令后至少再执行一条指令才会响应中断。
6.1.5 中断请求的撤销 • 1)定时中断请求的撤销 定时中断响应后,硬件自动把标志位(TF0或TF1)清0。 • 2)脉冲方式外部中断请求的撤销 外部中断响应后,硬件自动将标志位(IE0或IE1)清0,脉冲信号自动消失。 • 3)电平方式外部中断请求的撤销 外部中断响应后,硬件自动将标志位(IE0或IE1)清0,在中断服务程序中用软件将中断请求信号引脚从低电平强制改变为高电平。 • 4)串行中断软件撤销 串行中断响应后,由用户在中断服务程序中用软件将标志位(TI或RI)清0。
6.1.6 中断服务流程 执行主程序 执行下一条指令 取下一条指令 有中断请求? N Y 关中断 保护现场和断点 开中断 中断服务 关中断 恢复现场 开中断 返回断点(RETI)
6.2 MCS-51单片机的定时/计数器 6.2.1 定时方法概述 6.2.2 定时/计数器的定时和计数功能 6.2.3 定时/计数器的控制寄存器 6.2.4 定时工作方式
6.2.1 定时方法概述 • 软件定时 • 硬件定时 • 可编程定时
6.2.2 定时器/计数器的定时和计数功能 • 定时/计数器简称定时器,MCS-51单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。 • T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。 • 计数是对外部脉冲进行计数。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。 • 定时功能通过计数器的计数来实现,计数脉冲来自单片机内部,即每个机器周期产生一个计数脉冲,则每个机器周期计数器加1。计数频率是振荡频率的1/12。
6.2.3 定时器/计数器的控制寄存器 • 定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON 两个8位寄存器,设置各个定时器的操作模式和控制功能。 D D D D D D D D 7 6 5 4 3 2 1 0 TF TR TF TR IE IT IE IT TCON 1 1 0 0 1 1 0 0 8F 8E 8D 8C 8B 8A 89 88 位地址 见6.1.3节 0:停T 计数 { 0 1:启T 计数 0 0:无T 中断(硬件复位) { 0 1:有T 溢出中断 0 0:停T 计数 { 1 1:启T 计数 1 0:无T 中断(硬件复位) { 1 1:有T 溢出中断 1 定时器工作模式寄存器TCON
6.2.4 定时/计数器工作方式 • 每个定时/计数器还有4种工作模式,也就是每个定时器可构成4种电路结构模式。 • 在模式0、1和2,T0和T1的工作模式相同,在模式3,两个定时器的模式不同。
1)定时器工作方式0 • 方式0是13位计数结构的工作方式,计数器由TH0(TH1)全部8位和TL0(TL1)低5位构成,TL0(TL1)高3位不用。 定时/计数器T1(T0)工作模式0
当为计数工作方式时,计数范围是1~8192(213)当为计数工作方式时,计数范围是1~8192(213) • 当为定时工作方式时,定时时间计算公式是: (213-计数初值)×晶振周期×12 或 (213-计数初值)×机器周期 例如:晶振频率为6MHz,则最小定时时间为: [213-(213-1)]×1/6×10-6×12=2us 最大定时时间为: (213-0)×1/6×10-6×12=16384us
例6.1:设单片机晶振频率为6MHz,使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲,并由P1.0输出。以查询方式完成。例6.1:设单片机晶振频率为6MHz,使用定时器1以方式0产生周期为500us的等宽正方波连续脉冲,并由P1.0输出。以查询方式完成。 1)计算计数初值 (213-X)×1/6×12=250 X=0FC03H,TH1=0FCH,TL1=03H 2)TMOD寄存器初始化 定时器1设定为方式0,则M1M0=00; 定时工作方式,则C/T=0; 以运行控制位TR启动定时器1,则GATE=0; 定时器0不用,所以TMOD低4位为0; TMOD初始化为00H。 3)由定时器控制寄存器TCON中的TR1位控制定时的启动和停止 TR1=1启动;TR1=0停止。
MOV TMOD,#00H ;初始化TMOD MOV TH1,#0FCH ;设置计数初值 MOV TL1,#03H MOV IE, #00H ;禁止中断 SETB TR1 ;启动定时 JBC TF1,LOOP1 ;查询计数是否溢出 AJMP LOOP MOV TH1,#0FCH ;重新设置计数初值 MOV TL1,#03H CLR TF1 ;计数溢出标志位清0 CPL P1.0 ;输出取反 AJMP LOOP 4)程序设计 LOOP: LOOP1:
2)定时器工作方式1 • 方式1是16位计数结构的工作方式,计数器由TH0(TH1)全部8位和TL0(TL1)全部8位构成,其逻辑电路和工作情况与方式0完全相同。 定时/计数器T1(T0)工作模式1
当为计数工作方式时,计数范围是1~65536(216)当为计数工作方式时,计数范围是1~65536(216) • 当为定时工作方式时,定时时间计算公式是: (216-计数初值)×晶振周期×12 或 (216-计数初值)×机器周期 例如:晶振频率为6MHz,则最小定时时间为: [216-(216-1)]×1/6×10-6×12=2us 最大定时时间为: (216-0)×1/6×10-6×12=131072us
例6.2:设单片机晶振频率为6MHz,使用定时器1以方式1产生周期为500us的等宽正方波连续脉冲,并由P1.0输出。以中断方式完成。例6.2:设单片机晶振频率为6MHz,使用定时器1以方式1产生周期为500us的等宽正方波连续脉冲,并由P1.0输出。以中断方式完成。 1)计算计数初值 (216-X)×1/6×12=250 X=0FF83H,TH1=0FFH,TL1=83H 2)TMOD寄存器初始化 定时器1设定为方式0,则M1M0=01; 定时工作方式,则C/T=0; 以运行控制位TR启动定时器1,则GATE=0; 定时器0不用,所以TMOD低4位为0; TMOD初始化为10H。 3)由定时器控制寄存器TCON中的TR1位控制定时的启动和停止 TR1=1启动;TR1=0停止。
MOV TMOD,#10H ;初始化TMOD MOV TH1,#0FFH ;设置计数初值 MOV TL1,#83H SETB EA ;开中断 SETB ET1 ;定时器1允许中断 SETB TR1 ;启动定时 SJMP $ ;等待中断 MOV TH1,#0FFH ;重新设置计数初值 MOV TL1,#83H CPL P1.0 ;输出取反 RETI ;中断返回 4)程序设计 主程序: LOOP: HERE: 中断服务程序:
3)定时器工作方式2 • 方式2是自动加载计数初值工作方式,由TL作计数器,以TH作预置寄存器,初始化时将计数初值分别装入TL和TH中,当计数溢出后,由预置寄存器TH以硬件方法自动给计数器TL重新加载。 • 当为计数工作方式时,计数范围是1~256(28) • 当为定时工作方式时,定时时间计算公式是: (28-计数初值)×晶振周期×12 或 (28-计数初值)×机器周期 定时/计数器T1(T0)工作模式2
例6.3:使用定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续正方波脉冲,已知晶振频率为6MHz。例6.3:使用定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续正方波脉冲,已知晶振频率为6MHz。 1)计算计数初值 (28-X)×1/6×12=100 X=0CEH,TH0=0CEH,TL0=0CEH 2)TMOD寄存器初始化 定时器0设定为方式2,则M1M0=10; 定时工作方式,则C/T=0; 以运行控制位TR启动定时器1,则GATE=0; 定时器1不用,所以TMOD高4位为0; TMOD初始化为02H。 3)由定时器控制寄存器TCON中的TR1位控制定时的启动和停止 TR1=1启动;TR1=0停止。
1)查询方式: LOOP: MOV IE,#00H ;禁止中断 MOV TMOD,#02H ;初始化TMOD MOV TH0,#0CEH ;保存计数初值 MOV TL0,#0CEH ;设置计数初值 SETB TR0 ;启动定时 JBC TF0,LOOP1 ;查询计数是否溢出 AJMP LOOP CPL P1.0 ;输出取反 AJMP LOOP ;重复循环 LOOP1: 2)中断方式: 主程序: MOV TMOD,#02H ;初始化TMOD MOV TH0,#0CEH ;设置计数初值 MOV TL0,#0CEH SETB EA ;开中断 SETB ET0 ;定时器1允许中断 SETB TR0 ;启动定时 SJMP $ ;等待中断 CPL P1.0 ;输出取反 RETI ;中断返回 LOOP: HERE: 中断服务程序:
4)定时器工作方式3 • 1.工作方式3下的定时/计数器0 定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。 TL0既作计数使用,又可以定时使用,功能和操作方式与方式0或方式1完全相同。 TH0只能作为定时器使用,控制位借用定时器1的控制位TR1和TF1。 • 2.工作方式3下的定时/计数器1 如果定时器/计数器0工作在方式3,定时器/计数器1只能作为串行口的波特率发生器使用,以确定串行通信的速率。
例6.4 用MCS-51单片机来实现时钟计时。 秒计时用硬件定时和软件定时相结合的方法来实现。把定时器的定 时时间定为125ms,计数溢出8次得到1s。假定使用定时/计数器0采 用工作方式1,假定单片机晶振频率为6MHz 1)计算计数初值: (216-X)×2=125000 X=0CDCH 2)定时器定时采用中断方式,在中断服务程序中进行溢出次数累计,计满8次得到秒计时。 3)在中断服务中,进行分和时的计时。 4)设置时钟显示及显示缓冲区。 5)LED显示程序由SMXS子程序提供。 LED5 LED4 LED3 LED2 LED1 LED0 7EH 7FH 7CH 7BH 7AH 79H
1. 主程序MAIN MAIN 定义堆栈区 显示缓冲单元清0 定时器0工作方式1 装载计数初值 定时开始 开中断 设置循环次数 调用显示子程序SMXS
2.中断服务程序PITO • 程序开始先判断计数溢出是否满8次,不满8次则表明还未到达最小计时单位秒,中断返回;如满8次则表明已达最小单位秒,程序继续向下执行。 • 秒值加1,判断是否到达60秒,若没达到,则中断返回;如到达60秒,则秒显示缓冲单元清0。 • 分值加1,判断是否到达60分,若没达到,则中断返回;如到达60分,则分显示缓冲单元清0。 • 时值加1,判断是否到达24时,若没达到,则中断返回;如到达24时,则时显示缓冲单元清0。 3.加1子程序DAAD1 • 合数 • 十进制调整 • 分数
Tank You! 本章到此结束