490 likes | 737 Vues
第五章 中断系统、定时器 / 计数器和串行口 §5-1 MCS-51 的中断系统 §5-2 定时 / 计数器 §5-3 MCS-51 单片机的串行口. §5-1 MCS-51 的中断系统 一、中断概述 1 、 中断源 中断源 指引起正在执行的程序中断,转而执行中 断服务程序的设备或事件。 可分为硬中断、软中断。 MCS-51 单片机的 5 个中断源: ①外部中断 2 个: 、 ,中断请求信号分别由 P3.2 、 P3.1 输入 , 低电平有效、脉冲下降沿有效可选。
E N D
第五章 中断系统、定时器/计数器和串行口 • §5-1 MCS-51的中断系统 • §5-2定时/计数器 • §5-3 MCS-51单片机的串行口
§5-1 MCS-51的中断系统 • 一、中断概述 • 1、中断源 • 中断源 指引起正在执行的程序中断,转而执行中 • 断服务程序的设备或事件。 • 可分为硬中断、软中断。 • MCS-51单片机的5个中断源: • ①外部中断2个: 、 ,中断请求信号分别由P3.2、P3.1输入,低电平有效、脉冲下降沿有效可选。 • 入口地址:0003H,0013H。 • ②定时/计数溢出中断2个:T0、T1,计数溢出时置“1”TF0、TF1位,从而发出内部中断请求。 • 入口地址:000BH,001BH。
③串行中断1个:串行接收或发送完一帧数据时就产③串行中断1个:串行接收或发送完一帧数据时就产 • 生一个内部中断请求RI或TI。 • 入口地址:0023H。 • 2、中断处理过程 • 包含:中断请求、中断响应、中断服务、中断返 • 回四个阶段. • ①中断请求:中断源将相应请求中断的标志位置 “1”,表示发出请求,并由CPU 查询。 • ②中断响应:在一条指令的最后一个周期按优先级 • 顺序查询中断标志,为“1”并满足响应 • 条件时响应。
响应操作: 断点压栈→撤除中断标志→关闭低同级 • 中断允许→中断入口地址送PC。 • 实际上响应中断的主要操作是有硬件自动产生一 • 条长调用指令LCALL。 • ③中断服务:根据入口地址转中断服务程序,包含 • 保护现场、执行中断主体、恢复现场。 • ④中断返回:断点出栈→开放中断允许→返回原程序。 • 3、中断优先级及其嵌套 • 优先级 2个---高优先级、低优先级,可通过SFR • 寄存器IP设置。 • 中断嵌套 原则为高优先级的中断不能被低优先 • 的中断所中断,同级中断不能相互中断。
4、中断控制的特点 • ① 中断是随机发生的,并且是可编程的。 • ② 通过执行特定功能的程序段而获得预定目的。 • 5、MCS-51中断汇集
二、中断控制 • 通过对特殊功能寄存器TCON、SCON、IE、IP等 • 四个寄存器的设定而实现。 • 1、中断请求控制 • (1)定时中断、外中断请求控制寄存器TCON • 字节地址88H,位地址8FH~88H,与中断请求有关的各位表示如下: • TF1、TF0:T1/T0溢出中断请求标志。 • IE1、IE0:外中断/请求标志。 • IT1、IT0:外中断/触发方式定义位,“1”—后沿触发
(2)串行中断请求控制寄存器SCON • 串行中断请求由TI、RI的逻辑“或”得到。即不论 • 是发送标志还是接收标志,都将发生串行中断请求。 • 字节地址98H,位地址9FH~98H,与中断请求有关的各位表示如下: • TI为发送中断 ,RI为接收中断 ,为“1”时,请求中断,响应后必须由用户软件清零。 • (3)中断请求的撤销 • 中断响应后,必须及时清除TCON、SCON中的已响应中断请求标志,否则,会引起中断的重复查询和响应。
①外中断请求的撤销: • 对于边沿触发方式:由于触发信号过后就消失,撤 • 销自然也就是自动的。 • 对于电平触发方式:需通过软硬件结合的方法来实 现撤销。 • ②定时中断请求的撤销:定时中断后,硬件自动清 “0”。 • ③串行中断请求的撤销:不能自动清“0”,须用软件 • 的方法在中断服务子程序中进 • 行清“0”。 • 2、中断允许控制 • 由SFR寄存器IE设置,分二级允许控制。以EA位作为总控,以各中断源的允许位作为分控。
IE字节地址A8H,位地址AFH~A8H,与中断允 • 许有关的各位表示如下: • 单片机复位后,(IE)=00H,因此,整个中断系统为禁止状态。 • 3、中断优先级控制 • 由SFR寄存器IP设置,有2个优先级,相应位置 • “1”,为高优先级。相应位置“0”,为低优先级。
IP字节地址B8H,位地址BFH~B8H,与中断允许有关的各位表示如下:IP字节地址B8H,位地址BFH~B8H,与中断允许有关的各位表示如下: • 注意:5个中断允许位全部置“1”时,和全部清0效 • 果一样,为同优先级中断,按自然优先级处理,即为 • →T0→ →T1→串行口,优先级依次从高到低。 • 三、中断应用 • 1、中断应用的准备工作
(1)中断初始化设置:定义SP、IP、IE和外中断触发(1)中断初始化设置:定义SP、IP、IE和外中断触发 • 方式选择; • (2)中断服务程序:中断入口、现场保护、中断主体 • 程序、恢复现场返回。 • 2、应用举例 • 例5-1通过P1.0~P1.7控制发光二极管,输出两种节 • 日灯,并利用外中断P3.2,在两种状态之间切换。 • 分析:主程序中状态:亮1灯左移循环,中断程序 • 中的状态:以1秒间隔8灯依次亮起,再依次熄灭,循环 • 3次后返回。
主流程图(略),程序如下: • ORG 0000H • LJMP MAIN • ORG 0003H ;中断入口 • LJMP 0100H • ORG 0030H • START: MOV SP, #60H • SETB IT0 ;设定下跳有效 • SETB EX0 ;开中 • SETB EA • MOV IP, #01H MOV A, #01H • LOOP: MOV P1, A • RL A • LCALL DELAY • AJMP LOOP
中断服务程序: • ORG 0100H • PUSH ACC • CLR A • MOV R0, #00H • LOOP1: SETB C • RLC A • MOV P1, A • LCALL DELAY • JNB ACC.7, LOOP1 • LOOP2: CLR C • RLC A • MOV P1, A • LCALL DELAY • JB ACC.7, LOOP2 • INC R0 • CJNE R0, #03H, LOOP1 • POP ACC • RET • DELAY: (略) ;1秒延时
§5-2定时/计数器 • 一、定时/计数器构成 • 1、定时方法 • 软件延时 通过执行循环而获得延时,短时间延时; • 硬件延时 由硬件电路实现延时,长时间延时; • 可编程定时 通过对系统时钟脉冲的计数而获得延时。 • 2、MCS-51单片机的定时/计数器 • 16位定时/计数器T0、T1,分别由4个8位计数器组成,均属SFR寄存器。 • T0由TH0、TL0构成,字节地址为8CH、8AH; • T1由TH1、TL1构成,字节地址为8DH、8BH;
MCS-51单片机定时器结构示意图 • 3、MCS-51单片机定时/计数器的功能 • 归根结底是计数器。 • (1)定时功能 对片内机器周期进行计数,即每 • 个机器周期产生一个计数脉冲,计数加1。
(2)计数功能 对片外从T0(P3.4)、T1(P3.5)引脚输入的外部脉冲信号进行计数,下降沿计数加1。 • 二、定时/计数器的控制寄存器 • 与定时/计数器有关的控制寄存器有3个: • 1、定时器控制寄存器TCON(88H) • SFR寄存器TCON既参与定时控制又参与中断控 • 制,有关定时控制的有4位,表示如下:
TF1/TF0:当T1/T0的计数器计数溢出时,该位置“1”。 • TR1/TR0:T1/T0运行控制位。软件将其置“1”时,启 • 动T1/T0工作。 • 2、设定定时器工作方式寄存器TMOD(89H) • SFR寄存器TMOD用于2个定时器/计数器T1/T0的工作方式设定,各位的含义表示如下:
GATE:门控位,定义T1/T0的启动方式,逻辑如图:GATE:门控位,定义T1/T0的启动方式,逻辑如图: • C/ :定时/计数功能选择位。 • 为“0”,作定时器用;为“1”,作计数器用。 • M1M0:工作方式选择位。 • 00 方式0 13位计数器 • 01 方式1 16位计数器 • 10 方式2 初值自动重装8位计数器
11 方式3 2个8位计数器,仅适用于T0 • 3、中断允许控制寄存器IE(A8H) • 三、定时器/计数器工作方式 • 1、工作方式0 M1M0=00 ——13位计数器 • (1)结构 • 由TH0的全部8位和TL0的低5位构成,如下页图。 • 当TL0低5位计数满时直接向TH0进位,并当全部13位 • 计数满溢出时,TF0置“1”。 • (2)TMOD值: • 作定时器:TMOD=0000 0 0 00=00H • 作计数器:TMOD=0000 0 1 00=04H
(3)计数初值 • 最大计数值为213=8192 • △T=(213 — 计数初值)× 机器周期(12/fosc) • 计数初值=213 —欲计数脉冲数=213 —△T/ 机器周期
2、工作方式1 M1M0=01——16位计数器 • 方式1时的电路逻辑结构如图所示 • 作定时器,TMOD=01H; • 作计数器,TMOD=05H; • △T=(216 — 计数初值)× 机器周期(12/fosc) • 计数初值=216 —欲计数脉冲数=216 —△T/ 机器周期
例如:定时500us,fosc=6MHz时, • 初值=216—500/2=65536-250=65286=FF 06H • 那么:TH0=FFH,TL0=06H • 3、工作方式2 M1M0=10——自动复位的8位计数器 • 以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。逻辑结构,如图所示:
作定时器,TMOD=02H; • 作计数器,TMOD=06H; • 最大计数值为28=256,若fosc=12MHz,则方式2的最大定时时间为256us。当作为定时器用时,定时时间的计算公式: • △T=(28 — 计数初值)× 机器周期(12/fosc) • 计数初值=28 —欲计数脉冲数=28 —△T/ 机器周期 • 例如:定时500,fosc=6MHz时,初值=28—500/2=6= 06H • 则:TH0=TL0=06H • 4、工作方式3 M1M0=11——2个8 位计数器(仅限于T0) • 在T0方式3下,T0、T1的设置和使用是不同的。 • (1)T0方式3 • TL0:使用T0原有控制资源,功能与方式0、1相同。 • TH0:借用T1的TR1、TF1,只能对片内机器周期脉冲计数, • 作8位定时器。
T0方式3时的T0初值计算完全同方式 2 • (2)T0方式3下的T1 • T0方式3时 ,T1仍然可工作于方式0~方式2,如 • 上页图所示。C/ 控制位仍可使T1工作在定时器或计 • 数器方式,只是由于其TR1、TF1被T0的TH0占用, • 因而没有计数溢出标志可供使用,计数溢出时只能将 • 输出结果送至串行口,即用作串行口波特率发生器。 • T0方式3下的T1方式2,因定时初值能自动恢复,用作波特率发生器更为合适。 • 四、定时/计数器的应用 • 【例5-2】 已知fosc=6MHz,利用T1定时500us,在P1.0 • 口输出周期为1ms的方波脉冲,使用方式0~方式2编程。
解:1)方波波形如图所示: • 2)计数初值: • 方式0:计数初值=213 —欲计数脉冲数=213 —△T/ 机器周期 =213-500/2=1F06H • ∴ TH1=F8H,TL1=06H • 方式1:计数初值=216 —欲计数脉冲数=216 —△T/ 机器周期 =216-500/2=FF06H • ∴ TH1=FFH,TL1=06H • 方式2:计数初值=28 —欲计数脉冲数 =28 —△T/ 机器周期 • =28-500/2=06H • ∴ TH1=TL1=06H • 3)定时到达P1.0的翻转方法:查询方式、中断方式 • 4)流程、程序如下:
方式0:采用查询方式 • 程序: 流程: • ORG 0030H • START: MOV TMOD,#00H • MOV TH1, #0F8H • MOV TL1, #06H • MOV IE, #00H • SETB TR1 • WT: JNB TF1, WT • CPL P1.0 • CLR TF1 • MOV TH1, #0F8H • MOV TL1, #06H • SJMP WT
方式1:采用中断方式 • ORG 0000H • LJMP START • ORG 001BH • LJMP 0100H • ORG 0030H • START: MOV TMOD,#10H • MOV TH1, #0FFH • MOV TL1, #06H • MOV IE, #88H • MOV IP, #0000 1000B • SETB TR1 • SJMP $ • 中断服务程序: • ORG 0100H • CPL P1.0 • MOV TH1, #0FFH • MOV TL1, #06H • RETI
方式2:采用中断方式 • ORG 0000H • LJMP START • ORG 001BH • LJMP 0100H • ORG 0030H • START: MOV TMOD,#20H • MOV TH1, #06H • MOV TL1, #06H • MOV IE, #88H • MOV IP, #08H • SETB TR1 • SJMP $ • 中断服务程序: • ORG 0100H • CPL P1.0 • RETI
【例5-3】 用软件延时和定时器中断方式、查询方式 • 定时的方法编程,试设计控制六盏LED灯的程序, • 设晶振fosc=12MHZ,要求: • 1)K合上后,L1 ~ L6轮流点亮1秒,如此循环 • 2)K断开后,全灭,等待下次启动 • 3)要求用T0定时器、软件程序延时两种方案实现 • 解:(1)硬件原理图及I/O分配,如图所示; • (2)用定时器T0方式1实现延时: • ①定时器T0初值: • 定时时间:tmax=65536×1us=65.536ms,取50ms • 1秒延时实现:50ms延时20次 • T0 的 初值:=216-50000us/1us =15536 =3CB0H • TMOD =(0000 0001)B =01H
②控制流程 • 查询方式:通过对TF0的查询,获得50ms延时,并循环20次,获得1S延时 • 中断方式:通过T0溢出中断,获得50ms延时,并循环20次,获得1S延时
③指令代码(略) • (3)用软件程序延时 • ORG 0000H • LJMP START • ORG 0030H • START:MOV P3,#04H • MOV A, #01H • LOOP1:MOV P1, #00H • WT :JB P3.2,WT • LOOP2:MOV P1,A • MOV R7,#10 • DL3:MOV R6,#200 • DL2:MOV R5,#125
DL1:JNB P3.2,LOOP1 • DJNZ R5,DL1 • DJNZ R6,DL2 • DJNZ R7,DL3 • JB ACC.5,JP1 • RL A • AJMP LOOP2 • JP1 :MOV A,#01H • AJMP LOOP2
§5-3 MCS-51单片机的串行口 • 一、串行通信基本概念 • 1、并行通信和串行通信 • 通信的基本方式: • 并行通信:数据的各位同时送出。传送距离:小于30米。 • 串行通信:数据的各位逐位送出,只需一对传送线即可完成传送。传送距离:几米~几千公里。
2、串行通信 • (1)串行通信的数据传送方向。 • 单工、半双工、全双工三种方式 • (2)串行通信的工作方式 • 同步方式:数据按块传送,包括同步字符、数据块。 • 异步方式:数据按字符传送,每一个字符均按固定的字符格 • 式传送,又被称为帧,如图。 • 包含字符的起始位、数据位、校验位、停止位四个部分。
3、串行通信的波特率(Baud rate) • (1)波特率:传送数据位的速率,一般指每秒种传送二进 • 制代码的位数。单位:bps。 • (2)通用异步接收/发送器(UART):用于数据串、并转 换的串行接口电路。 • 包括串行化电路(发送器)、并行化电路(接收器)、控制电路3部分。 • 二、MCS-51单片机的串行口 • 全双工的串行口(P3.0、P3.1):能同时进行发送和接 • 收。既可作UART用,也可作同步移位寄存器使用,还可用 • 于网络通信,其帧格式可有8位、10位和11位,并能设置各种 • 波特率。
1、串行口的结构 • MCS-51单片机的串 • 行口主要由2个物理上独 • 立的串行数据缓冲器SBUF • 、输入移位寄存器和控制 • 器等组成。 • 还有2个SFR寄存器 • SCON和PCON,用于串行 • 口的初始化编程。 • 结构如图所示。
串行口的发送和接收是以SBUF的名义进行读或写,它串行口的发送和接收是以SBUF的名义进行读或写,它 • 们共用一个地址99H。 • 发送:执行写命令MOV SBUF,A指令,发送完后使中断标志TI置“1”。 • 接收:当RI=0时,置“1”允许接收位时,即启动接收, • 并时使RI=1。执行读命令MOV A,SBUF时,即可从接收 • SBUF取出信息并由内部总线送CPU。 • 2、串行口控制寄存器 • SCON用于存放串行口的控制和状态信息,PCON用于改变串行口的通信波特率,波特率发生器可由定时器T1方式2构成。 • (1)串行控制寄存器SCON • 单元地址98H,位地址9FH~98H。寄存器及位地址表示如下:
SCON: • (2)电源控制寄存器PCON • 字节地址87H,不可位寻址。它的D7位SMOD为串行口波特率控制位,可由软件置位或清零。若SMOD=1,则使工作在方式1、2、3时的波特率加倍。 • 3、串行工作方式0 —— 同步移位寄存器方式 • 方式设定:SM0SM1=00,通过执行MOV SCON,#00H。 • 此时: RXD(P3.0):数据的发送或接收口。 • TXD(P3.1):输出同步移位脉冲。 • 发送、接收的是8位数据,不设起始位和停止位,低位在前,波特率固定为fosc/12。。 • 在串行方式0时,是将串行口变成并行口使用。并要有串并转换芯片74LS164、74LS165转换。
三、MCS-51串行口方式0驱动数码管 • 1、LED数码管 • (1)结构 • COM:显示器位选线 a~dp:显示器段选线
发光管驱动额定电流:10~40mA,静态取下限。 • (2)静态显示及其段码 • 静态显示:利用8位锁存功能的I/O口线驱动一个数码管,多 • 个数码管同时显示,需增加I/O口线。 • 段码形成:在COM送入低电平或高电平,然后控制个各笔 段引脚电平,即可形成相应段码。 • 【例5-4】:利用P1口并行输出控制八段数码管,设小数点暗, • 采用共阳顺序、共阴顺序、共阴逆序确定0~9的显示程序为: • 解:1)共阳顺序显示硬件结构如图: • 2)共阳顺序、共阴顺序、共阴逆序的段码如下:
共阳顺序段码:C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H共阳顺序段码:C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H • 共阴顺序段码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH(Dp→a) • 共阴逆序段码:FCH,60H,DAH,F2H,66H,B6H,BEH,E0H,FEH,F6H(a→Dp)
2)并行输出,循环显示0~9秒的显示程序: • DIR: MOV R0,#0 • MOV DPTR,#TAB • LOOP:MOV A,R0 • MOVC A,@A+DPTR • MOV P1,A • LCALL DELAY • INC R0 • CJNE R0,#0AH,LOOP • AJMP DIR • TAB:DB C0H,F9H,A4H • DB B0H,99H,92H • DB 82H,F8H,80H,90H
2、串行口方式0驱动数码管 • (1)串行口与并行口转换控制 • ①串入并出移位寄存器74LS164 图(a) • ②并入串出移位寄存器74LS165 图(b)
(2)利用74LS164驱动共阴数码管 • 【例5-5】:利用8031串行口控制八段数码管,设小数点暗, • 采用共阴逆序,设计循环显示0~9秒的程序。 • 解:1)硬件结构图(共阴逆序、小数点暗) • 2)控制流程、程序
START:MOV SCON,#00H • MOV R0, #00H • CLR ES ;禁止中断 • MOV DPTR, #TABLE • LOOP:MOV A, R0 • MOVC A, @A+DPTR • CLR TI • MOV SBUF, A • LCALL DELAY • INC R0 • CJNE R0, #10, LOOP • MOV R0, #00H • AJMP LOOP • TABLE:DB 0FCH,60H,0DAH,0F2H,66H • DB 0B6H,0BEH,0E0H,0FEH,0F6H • ORG 0100H • DELAY:1秒延时程序(略) • RET
本章小结 • 1、定时器/计数器的工作方式和初值设定、方式0~方式2应用和定时编程举例 • 2、中断及中断请求源、特殊功能寄存器IP,IE、简单应用 • 3、串行口的组成和功能、串行口的工作方式及波特率方式0 应用及简单编程举例 • 重点:掌握定时器/计数器的初值计算及定时程序编制,串行口 • 工作于方式0的发送/接收数据。 • 难点:对TMOD、SCON等特殊功能寄存器参数设定,中断系 • 统现场保护。