第五章中断定时串口.ppt

上传人:本田雅阁 文档编号:2524751 上传时间:2019-04-05 格式:PPT 页数:47 大小:936.51KB
返回 下载 相关 举报
第五章中断定时串口.ppt_第1页
第1页 / 共47页
第五章中断定时串口.ppt_第2页
第2页 / 共47页
第五章中断定时串口.ppt_第3页
第3页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第五章中断定时串口.ppt》由会员分享,可在线阅读,更多相关《第五章中断定时串口.ppt(47页珍藏版)》请在三一文库上搜索。

1、第5章中断系统、 定时器/计数器与串行口,5.1 MCS-51单片机中断系统 中断是指计算机暂时停止原程序执行转而为外部设备服务(执行中断服务程序), 并在服务完后自动返回原程序执行的过程。 5.1.1 中断系统结构及中断控制 89C51单片机有5个中断源(89C52有6个),可实现二级中断服务程序嵌套。,图5-1 中断系统结构示意图,1. 中断源,2. 中断控制 定时器控制寄存器TCON、 串行口控制寄存器SCON、 中断允许寄存器IE和中断优先级寄存器IP,(1) 定时器控制寄存器(TCON),TCON(88H),D7 D6 D5 D4 D3 D2 D1 D0,(2) 串行口控制寄存器(S

2、CON)98H,TI串行口发送中断请求标志位。当发送完一帧串行数据后, 由 硬件置1; 在转向中断服务程序后, 用软件清0。 RI串行口接收中断请求标志位。当接收完一帧串行数据后, 由硬件置; 在转向中断服务程序后, 用软件清0。,(3) 中断允许控制寄存器(IE)0A8H,(5) 中断优先级控制 A. 中断优先级控制寄存器(IP)0B8H,B.中断查询顺序 当同时接收到几个同一优先级的中断请求时, 响应哪个中断源则取决于内部硬件查询顺序。 中断源 同级自然优先级 INT0 最高 T0 INT1 T1 串行口 最低 C. 中断嵌套(2个中断优先级) 由IP设定高、低两级优先级 原则:允许高中断

3、低,禁止低中断高和同级中断,5.1.2 中断响应及中断处理过程 89C51单片机中断过程分为中断采样、 中断查询、 中断响应、 中断处理和中断返回等几个阶段。 1.中断采样(外部中断采样) 在每个机器周期的S5P2时刻对芯片引脚INT0(P3.2)和INT1(P3.3)进行采样。 (1)电平触发方式 中断标志直接反映外部中断引脚的状态,无记忆功能,低电平时间至少需保持一个机器周期, 才能保证中断请求能被采样到。 (2)负跳变触发方式 在两个相邻机器周期采样到的是先高电平后低电平, 则中断请求有效, 由硬件将IE0或IE1置1,具有记忆功能,负脉冲的宽度也应至少为一个机器周期。,2.中断查询 由

4、CPU测试TCON和SCON中各标志位的状态,中断查询在指令执行的每个机器周期中不停地重复进行。 3.中断响应 (1)产生硬件调用,将断点地址压入堆栈。 (2)中断封锁 A、CPU正处在为一个同级或高级的中断服务中。因为当一个中断被响应时, 要把对应的优先级触发器置位, 封锁了低级和同级中断。 B、查询中断请求的机器周期不是当前指令的最后一个机器周期。目的在于确保当前指令的完整执行。 C、当前指令是返回指令(RET, RETI)或访问IE、 IP的指令。在执行完这些指令之后, 还应再继续执行一条指令, 然后才能响应中断。 89C51对中断查询的结果不作记忆, 当有新的查询结果出现时, 因为以上

5、原因而被拖延的查询结果将不复存在, 其中断请求也就不能再被响应了。,(3)中断响应时间 响应时间为38个机器周期,如果遇到中断受阻的情况,则中断响应时间会更长一些。 4. 中断处理(中断服务) 5. 中断返回 CPU执行RETI指令时, 把响应中断位置的优先级触发器复位, 再从堆栈中弹出断点地址送入程序计数器PC, 以便从断点处重新执行被中断的主程序。,5.1.3 中断请求的撤销 1. 定时中断请求的撤销 定时中断响应后,硬件自动把标志位(TF0或TF1)清0, 因此定时中断的中断请求是自动撤销的。 2. 脉冲方式外部中断的撤销 中断响应时自动撤销,在中断服务过程中有新的下跳变会重新置位中断标

6、志位。 3. 电平方式外部中断请求的撤销 中断响应时自动撤销,在中断返回后仍然为低电平将会再次响应中断。 4. 串行中断请求撤销 由软件(程序)清除标志位。,5.1.4 外部中断源的扩展,1. 用定时器作外部中断源,MCS-51单片机有两个定时器,具有两个内中断标志和外计数引脚,如在某些应用中不被使用,则它们定时器中断可作为外部中断请求使用。此时,可将定时器设置成计数方式,计数初值可设为满量程,则它们的计数输入端T0(P3.4)或T1(P3.5)引脚上发生负跳变时,计数器加1产生溢出中断。利用此特性,可把T0脚或T1脚作为外部中断请求输入线,而计数器的溢出中断作为外部中断请求标志。 【例5.1

7、】将定时器0扩展为外部中断源n 解:将定时器0设定为方式2(自动恢复计数初值),TH0和TL0的初值均设置为FFH,允许定时器0中断,CPU开放中断。源程序如下:,MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 SETB ET0 SETB EA 当连接在T0(P3.4)引脚上的外部中断请求输入线发生负跳变时,TL0加1溢出,TF0置1,向CPU发出中断申请,同时,TH0的内容自动送至TL0使TL0恢复初值。这样,T0引脚每输入一个负跳变,TF0都会置1,向CPU请求中断。此时,T0脚相当于边沿触发的外部中断源输入线。 同样,也可将定时器1扩

8、展为外部中断源。,2. 中断和查询相结合,一个外中断扩展成多个外中断的原理图,由图可知,4个外部扩展中断源通过 4个OC门电路组成线或取非后再与 /INT0(P3.2)相连;4个外部扩展中断源EXINT0EXINT3中有一个或几个出现高电平则输出为0,使/INT0脚为低电平,从而发出中断请求。因此,这些扩充的外部中断源都是电平触发方式(高电平有效)。CPU执行中断服务程序时,先依次查询P1口的中断源输入状态,然后,转入到相应的中断服务程序,4个扩展中断源的优先级顺序由软件查询顺序决定,即最先查询的优先级最高,最后查询的优先级最低。,中断服务程序如下: ORG 0003H ;外部中断0入口 AJ

9、MP INT0 ;转向中断服务程序入口 INT0: PUSH PSW ;保护现场 PUSH ACC JB P1.0 , EXT0 ;中断源查询并转相应中断服务程序 JB P1.1 , EXT1 JB P1.2 , EXT2 JB P1.3 , EXT3 EXIT: POP ACC ;恢复现场 POP PSW RETI EXT0: ;EXINT0中断服务程序 AJMP EXIT EXT1: ;EXINT1中断服务程序 AJMP EXIT EXT2: ;EXINT2中断服务程序 AJMP EXIT EXT3: ;EXINT3中断服务程序 AJMP EXIT 同样,外部中断1也可作相应的扩展。,5.

10、1.5 处理外部中断举例,要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。 解:INT0输入按键信号,P1.0输出改变LED状态。 1跳变触发:每次跳变引起一次中断请求。,ORG 0000H;复位入口 AJMP MAIN ORG 0003H ;中断入口 AJMP PINT0 ORG 0100H ;主程序 MAIN:MOV SP,#40H;设栈底 SETB IT0 ;开总允许开关 SETB EX0 ;开INT0中断 SETB EA ;负跳变触发中断 H: SJMP H ;执行其它任务 ORG 0200H ;中断服务程序 PINT0:CPL P1.0 ;改变LED RETI ;返回主程序

11、,1软件等待按键释放。 2硬件清除中断信号。,2. 电平触发:避免一次按键引起多次中断响应。,ORG 0000H;复位入口 AJMP MAIN ORG 0003H ;中断入口 AJMP PINT0 ORG 0100H ;主程序 MAIN:MOV SP,#40H;设栈底 CLR IT0 ;低电平触发中断 SETB EX0 ;开INT0中断 SETB EA ;开总允许开关 H: SJMP H ;执行其它任务 ORG 0200H ;中断服务程序 PINT0:CPL P1.0 ;改变LED WAIT:JNB P3.2,WAIT;等按键释放 RETI ;返回主程序,5.2 定时/计数器,5.2.1 定时

12、器/计数器的组成,5.2.2 定时/计数器的定时和计数功能,1. 计数功能 所谓计数是指对外部事件进行计数。外部事件以脉冲的形式通过引脚T0(P3.4)和T1(P3.5)输入到定时/计数器。下降沿时, 计数器的值加1。 89C51在每个机器周期的S5P2期间采样T0和T1引脚的输入电平,计数脉冲的频率不能高于振荡脉冲频率的1/24 。 2. 定时功能 定时功能也是通过计数器的计数功能来实现的,计数脉冲来自单片机的内部, 每个机器周期产生一个计数脉冲,计数器加1。根据定时时间的要求计算出计数器的预置值(定时常数)。,5.2.3 定时器/计数器的控制寄存器 1.定时器控制寄存器(TCON),2.

13、工作方式控制寄存器(TMOD),5.2.4 定时/计数器工作方式 1. 方式0 (13位定时/计数器方式),最大计数值:213 = 8192,定时时间(T)=(213-计数初值)机器周期 例:设单片机晶振频率为12MHz, 使用定时器1以方式0产生周期为 500s的等宽正方波连续脉冲, 并由P1.0输出。以查询方式完成。 计算计数初值 (213-X)110-6=25010-6 X=7942=1111100000110B 1111 1000 0000 0110B F 8 0 6 H TH1 TL1 TMOD寄存器初始化(确定工作方式) TMOD=0000 0000B 启动T1(TCON中的TR1

14、位控制定时的启动和停止),MOV TMOD, #00H; 设置T1为工作方式0 MOV TH1, # 0F8H; 设置计数初值 MOV TL1, #06H MOV IE, #00H; 禁止中断 LOOP: SETB TR1; 启动定时 LOOP1:JBC TF1, LOOP2; 查询计数溢出 AJMP LOOP1 LOOP2: MOV TH1, #0F8H; 重新设计数初值 MOV TL1, #06H CLR TF1; 计数溢出标志位清“0” CPL P1.0; 输出取反 AJMP LOOP; 重复循环,2. 方式1 (16位定时/计数器方式),8,最大计数值:216 = 65536,3. 方

15、式2 (8位自动重装定时/计数器方式),最大计数值:28 = 256,3. 方式 (3定时/计数器方式) (1) 工作方式3下的定时计数器T0,(2) 工作方式3下的定时器计数器1 T1设置为方式3, 停止工作。如果T0已工作在方式3, 则T1只能工作在方式0方式1或方式2下,通常工作于方式2为串行口提供波特率时钟,只需设置好工作方式和计数初值, 便可自动运行。,应用举例:设89C51单片机的时钟频率为6MHz, 试编写利用T0产生1s 定时的程序。 ORG 0000H LJMP MAIN ; 上电, 转向主程序 ORG 000BH ; T0的中断入口地址 AJMP SERVE ; 转向中断服

16、务程序 ORG 0030H ; 主程序 MAIN:MOV SP , #60H ; 设堆栈指针 MOV B, #0AH ; 设循环次数 MOV TMOD, #01H ; 设置T0工作于模式1 MOV TL0, #0B0H; 装入计数值低8位 MOV TH0, #3CH; 装入计数值高8位 SETB TR0; 启动定时器T0 SETB ET0; 允许T0中断 SETB EA; 允许CPU中断 SJMP ; 等待中断 中断服务程序: SERVE:MOV TL0, #0B0H MOV TH0, #3CH; 重新赋计数值 DJNZ B, LOOP CLR TR0 ; 1s定时到, 停止T0工作 LOOP

17、: RETI ; 中断返回 END,5.3 串行接口,5.3.1 串行接口的功能与结构 1. 串行接口的功能 89C51单片机中的串行接口是一个全双工串行通信接口, 能同时发送、 接收数据, 也能用作同步移位寄存器。,2. 串行接口结构,5.3.2 串行接口控制,1.数据缓冲器SBUF 发送SBUF和接收SBUF共用一个地址99H 。 1)发送SBUF存放待发送的8位数据,写入SBUF将同时启动发送。 发送指令: MOV SBUF,A 2)接收SBUF存放已接收成功的8位数据,供CPU读取。 读取串行口接收数据指令: MOV A,SBUF,3.节电控制寄存器PCON(87H) SMOD(PCO

18、N.7):波特率加倍控制位。 SMOD=1,波特率加倍, SMOD=0,则不加倍。,2.串行口控制/状态寄存器SCON(98H),SM0,SM1:选择串行口4种工作方式。 SM2:多机控制位,用于多机通讯。 REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收。 TB8:发送的第9位数据位,可用作校验位和地址/数据标识位 RB8:接收的第9位数据位或停止位 TI:发送中断标志,发送一帧结束,TI=1,必须软件清零 RI:接收中断标志,接收一帧结束,RI=1,必须软件清零,5.3.3 串行接口的工作方式,1. 方式0:同步移位寄存器方式。用于扩展并行I/O接口。 A.一帧8位,无起

19、始位和停止位。 B.RXD:数据输入/输出端。 TXD:同步脉冲输出端,每个脉冲对应一个数据位。 C.波特率Baud = fosc/12 如: fosc=12MHz, Baud=1MHz,每位数据占1s。 D.发送过程:写入SBUF,启动发送,一帧发送结束,TI=1。 接收过程:REN=1且RI=0,启动接收,一帧接收完毕,RI=1,例:使用74HC164的并行输出端接8支发光二极管, 利用它的串入并出功能, 将发光二极管从左向右依次点亮。,MOV SCON, # 00H ; 串行口方式0工作 CLR ES ; 禁止串行中断 MOV A, #80H ; 发光管从左边亮起 DELR:CLR P1

20、.0 ; 关闭并行输出 MOV SBUF, A ; 串行输出 JNB TI, ; 状态维持 SETB P1.0 ; 开启并行输出 ACALL DELAY ; 状态维持 CLR TI ; 清发送中断标志 RR A ; 发光组合中断标志 AJMP DELR ; 继续,2. 方式1:8位数据异步通讯方式,A.一帧10位:8位数据位,1个起始位(0),1个停止位(1)。 B.RXD:接收数据端。 TXD:发送数据端。 C.波特率:用T1作为波特率发生器,Baud=(2SMOD/32)T1溢出率。 D.发送:写入SBUF,同时启动发送,一帧发送结束,TI=1。 接收:REN=1,允许接收。接收完一帧,若

21、RI=0且停止位为1 (或SM2=0),将接收数据装入SBUF,停止位装入RB8,并使RI=1;否则丢弃接收数据,不置位RI。 当REN=1,CPU开始采样RXD引脚负跳变信号,若出现负跳变,才进入数据接收状态,先检测起始位,若第一位为0,继续接收其余位;否则,停止接收,重新采样负跳变。 数据采样速率为波特率16倍频,在数据位中间,用第7、8、9个脉冲采样3次数据位,并3中取2保留采样值。,3. 方式2和方式3:9位数据异步通讯方式,A.一帧为11位:9位数据位,1个起始位(0),1个停止位(1)。 第9位数据位在TB8/RB8中,常用作校验位和多机通讯标识位。 B.RXD:接收数据端,TXD

22、:发送数据端。 C.波特率: 方式2:Baud=(2SMOD/64)fosc 。 方式3:Baud=(2SMOD/32)T1溢出率 。 D.发送:先装入TB8,写入SBUF并启动发送,发送结束,TI=1 接收:REN=1,允许接收。接收完一帧,若RI=0且第9位为1 (或SM2=0),将接收数据装入接收SBUF,第9位装入RB8,使RI=1;否则丢弃接收数据,不置位RI。,4.计算波特率,方式0为固定波特率:Baud=fosc/12 方式2可选两种波特率: Baud=(2SMOD /64)fosc 方式1、3为可变波特率,用T1作波特率发生器。 Baud=(2SMOD/32)T1溢出率 T1为

23、方式2的时间常数: X = 28 - t/T 溢出时间: t= (28 -X)T = (28 -X)12/ fosc T1溢出率=1/t= fosc /12(28 -X) 波特率Baud=(2SMOD /32)fosc/12(28-X) 串行口方式1、3,根据波特率选择T1工作方式,计算时间常数 T1选方式2: TL1=TH1=X= 28-fosc/122SMOD/(32B) T1选方式1用于低波特率,需考虑T1重装时间常数时间。,5.3.4 串行口的应用,串行口初始化编程格式: SIO:MOV SCON,#控制状态字;写方式字且TI=RI=0 (MOV PCON,#80H) ;波特率加倍 (

24、 MOV TMOD,#20H ) ;T1作波特率发生器 ( MOV TH1,#X ) ;选定波特率 ( MOV TL1,#X ) ( SETB TR1) ( SETB EA) ;开串行口中断 ( SETB ES),发送程序:先发送一个字符,等待TI=1后再发送下一个字符。,1.查询方式: TRAM: MOV A,R0 ;取数据 MOV SBUF,A ;发送一个字符 WAIT: JBC TI,NEXT ;等待发送结束 SJMP WAIT NEXT: INC R0 ;准备下一次发送 SJMP TRAM,2.中断方式: ORG 0023H ;串行口中断入口 AJMP SINT MAIN: ;初始化编

25、程 TRAM: MOV A,R0 ;取数据 MOV SBUF,A ;发送第一个字符 H: SJMP H ;其它工作 SINT: CLR TI ;中断服务程序 INC R0 MOV A,R0 ;取数据 MOV SBUF,A ;发送下一个字符 RETI,接收程序:REN=1、RI=0等待接收,当RI=1,从SBUF读取数据。,1.查询方式: WAIT: JBC RI,NEXT ;查询等待 SJMP WAIT NEXT: MOV A,SBUF ;读取接收数据 MOV R0,A ;保存数据 INC R0 ;准备下一次接收 SJMP WAIT,2.中断方式: ORG 0023H AJMP RINT MA

26、IN: ;初始化编程 H: SJMP H ;其它任务 RINT: CLR RI ;清中断标志 MOV A,SBUF ;读取接收数据 MOV R0,A ;保存数据 INC R0 RETI,例:由串行接口发送带偶校验位的ASCII码数据块。 设拟发送的是位于片内RAM30H3FH单元的ASCII码数据。单片机采用12MHz晶振, 串行接口工作于方式1, 定时器/计数器1用作波特率发生器, 电源控制专用寄存器PCON中的SMOD位为0, 发送的波特率要求为1200。 相应的发送程序为 TSTART:MOV TMOD, #20H ;置定时器/计数器1工作于方式2的定时器方式 MOV TL1, #0E6

27、H ; 定时器/计数器1预置数 MOV TH1, #0E6H ; 定时器/计数器1置重装载数 MOV SCON, #40H ; 置串行接口工作于方式1 MOV R0, #30H ; R0作地址指针, 指向数据块首址 MOV R7, #10H ; R7用作计数器, 置拟发送字节数 SETB TR1 ; 启动定时器/计数器1 LOOP: MOV A, R0 ; 取待发送的一个字节 MOV C, P ; 取奇偶标志, 若奇为1, 若偶为0 MOV ACC.7, C ; 加偶校验位 MOV SBUF, A ; 启动串行接口发送 WAIT:JNB TI, WAIT ; 等发送完毕 CLR TI ; 清TI标志, 为下一字节发送做准备 INC R0 ; 指向数据块下一待发送字节的地址 DJNZ R7, LOOP ; 若拟发送数据未发送完, 则继续发送 RET,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1