第四章I、O应用技术_第1页
第四章I、O应用技术_第2页
第四章I、O应用技术_第3页
第四章I、O应用技术_第4页
第四章I、O应用技术_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章

I/O应用技术第一节

MCS-51单片机的中断系统一、概述

与上对比,单片机中也有同样的问题。CPU正在执行原程序,突然,被意外事情打断,转去执行新程序。CPU执行新程序结束后,又回到原程序中继续执行。这样的过程就叫。中断

什么叫中断?

举例:某同学正在教室写作业,忽然被人叫出去,回来后,继续写作业。这就是生活中中断的例子。

对突发事故,做出紧急处理。根据现场随时变化的各种参数、信息,做出实时监控。

CPU与外部设备并行工作,以中断方式相联系,提高工作效率。解决快速CPU与慢速外设之间的矛盾。在多项外部设备同时提出中断请求情况下,CPU能根据轻重缓急响应外设的中断请求。

中断的作用:对于MCS-51单片机中断系统的组成可以用一句话来讲,叫做:“五源中断,两级管理”

五个中断源:入口地址外部中断0(/INT0)0003HT0溢出中断000BH

外部中断1(/INT1)0013HT1溢出中断001BH

串口中断0023H二、中断请求源(“五源中断”)中断源的中断请求,如何通知CPU?利用中断请求标志位来通知!!!以上6个中断请求标志位分别分布在TCON、SCON两个寄存器中。TCONIT0IE0IT1IE1TR0TF0TR1TF1TF1——T1的溢出中断标志硬件置1,硬件清0(也可软件清0)TF0——T0的溢出中断标志。(同TF1,只是针对T0的)IE1——外部中断1(/INT1)请求标志。外部有中断请求时,硬件使IE1置1,硬件清0。IE0——外部中断0(/INT0)请求标志。IT1——外部中断1(/INT1)触发类型控制位。

IT1=0,低电平触发。IT1=1,下降沿触发。

IT0——

外中断0(/INT0)触发类型控制位,用法同IT1。

SCON

RI

TIRB8TB8RENSM2SM1SM0TI——串口发送中断标志位。

发送完数据,硬件使TI置1,软件清0(CLRTI)

RI——串行口接收中断标志位。

硬件置1,软件清0。

在中断源与CPU之间有二级中断允许控制逻辑电路,类似开关,其中第一级为一个总开关,第二级为五个分开关,由IE控制。

三、中断控制(两级管理)1、中断屏蔽(第一级管理)IEEX0ET0EX1ET1ES————EAEA——

总控制位

“—”——未定义位ES——

串口控制位

ET1——T1中断控制位

EX1——/INT1控制位

ET0——T0中断控制位

EX0——/INT0控制位

若为“1”,开关接通,允许例如SETBEA若为“0”,开关断开,不允许例如CLRIE.72、中断优先级(第二级管理)为什么要有中断优先级?CPU同一时间只能响应一个中断请求。若同时来了两个或两个以上中断请求,就必须有先有后。!!!

为此将5个中断源分成高级、低级两个级别,高级优先,由IP控制。

IPPX0PT0PX1PT1

PS——————PS——串口的中断优先级别PT1——定时/计数器T1的中断优先级别PX1——外部中断1的中断优先级别PT0——定时/计数器T0的中断优先级别PX0——外部中断0的中断优先级别该位是“1”时,为高级优先级该位是“0”时,为低级优先级同一级中的5个中断源的优先顺序是:/INT0中断

T0溢出中断

/INT1中断

T1溢出中断

串口中断

高低出厂前已由厂家固化顺序——事先约定中断优先原则:(概括为四句话)1、低级不打断高级2、高级不睬低级3、同级不能打断4、同级、同时中断,事先约定。

事件1事件2子程序2子程序1中断嵌套的概念:

主程序中断中断四、MCS-51中断的响应过程

CPU每个机器周期都需要顺序检查每个中断源,当检测到有中断请求时,能否响应,还要看下述情况是否存在:

(1)CPU正处理相同级别或更高级别的中断;(2)正在执行指令,还未到最后一个机器周期;(3)正在执行的指令是RETI或访问IP、IE指令,则执行完上述指令后,再执行一条指令后,才会响应新中断。

日常生活中的中断与单片机中断的比较:

某同学

单片机过程说明正在看书

执行主程序有人找出去

中断信号

中断请求暂停看书

暂停执行主程序

中断响应书中作记号

当前PC入栈

保护断点出去做事

执行中断程序

中断服务回来继续看

返回主程序

中断返回响应过程:(假设已使某中断请求标志置1)(1)先使相应优先级状态触发器置1;(2)执行一个硬件子程序的调用,1)硬件清零相应中断请求标志(TI、RI除外)2)将当前PC内容压入堆栈——保护断点;3)将中断服务子程序入口地址送PC——转移。

返回过程:(RETI执行后)(1)使相应优先级状态触发器清0。(2)从堆栈中弹出栈顶的两个字节内容送PC——恢复断点。(3)CPU接着中断处继续执行原程序。

注意:1)保护断点与保护现场以及恢复断点与恢复现场的区别。2)外部中断响应时间在3~8个机器周期之间。

利用外部中断实现单步操作:

8031+5v在主程序中:CLRIT0SETBEASETBPX0SETBEX0………在中断服务子程序中:JNBP3.2,$JBP3.2,$RETI小结:1、MCS-51单片机中断系统有几个中断源?分别是什么?事先约定的优先顺序是怎样的?2、如何进行中断允许控制?如何进行中断优先级控制?3、中断优先的规则是什么?

§4-2定时/计数器一、定时/计数器的结构§4-2定时/计数器一、定时/计数器的结构需要说明的是,用做“定时器”时,每个机器周期计数加1,因此也可以把它看作是在累加机器周期。由于MCS—51单片机一个机器周期包含12个振荡周期,所以,它的计数速率为振荡周期的1/12。§4-2定时/计数器一、定时/计数器的结构§4-2定时/计数器一、定时/计数器的结构51子系列单片机内有两个十六位增一定时/计数器TH0计数值高八位TL0计数值低八位TH1计数值高八位TL1计数值低八位TMODTCON工作方式定时/计数控制控制控制1、工作方式控制寄存器

TMOD

TMODM0

M1C/GATE

M0

M1C/GATET1T0GATE——门控位。

GATE=0启动不受/INT0或/INT1的控制;

GATE=1启动受/INT0或/INT1的控制。

C/T——外部计数器/定时器方式选择位

C//T=0定时方式;

C//T=1计数方式。

M1M0——

工作模式选择位(编程可决定四种工作模式)。

2、定时/计数器控制寄存器TCONTCONTF1TR1TF0TR0IE1IT1IE0IT0

能否启动定时/计数器工作与GATE有关,分两种情况:

GATE=0时,若TRi=1,开启Ti计数工作;(i=0或1)若TRi=0,停止Ti计数。

GATE=1时,若TRi=1且/INTi=1时开启Ti计数;若TRi

=1且/INTi=0时不能开启Ti计数。

若TRi=0,

停止Ti计数。

TR0——定时/计数器0运行控制位。

软件置位,软件复位。

TR1——定时/计数器1运行控制位。(用法与TR1类似)

二、定时/计数器的四种工作模式

M1M0模式说明00013位定时/计数器高八位TH(7~0)+低五位TL(4~0)01116位定时/计数器

TH(7~0)+TL(7~0)1028位计数初值自动重装

TL(7~0)TH(7~0)113T0运行,而T1停止工作,8位定时/计数。

二、定时/计数器的四种工作模式对于TMOD寄存器而言,只能采用字节传送指令来设置,而不能使用位手址方式来设置。如:MOVTMOD,#33H是正确的SETBM1是错误的1、模式0计数寄存器TLi

低5位+THi8位(T1、T0的等效逻辑结构)TLi(5位)THi(8位)TFi中断控制BAC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=10~40~7C//T=0——定时;C//T=1——对外计数。定时:fosc/12=1/(12/fosc)=1/T波形等间隔,次数已定,时间确定即对机器周期进行计数。左图定时时间为N*TN个方波T计数:脉冲不等间隔。

每个下降沿计数一次

确认一次负跳变需两个机器周期,

所以,计数频率最高为fosc/24。

2、模式1与模式0相似。与模式0的区别:计数位数不同。计数寄存器:THi(高8位)+TLi(低8位)

TFi中断TLi(8位)THi(8位)0~70~7控制BAC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=13、模式2与模式0、1的区别:1)计数位数不同;2)初值自动重装。

TFi中断TLi(8位)THi(8位)控制BAC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=14、模式3T0定时/计数,而T1停止计数,但可作波特率发生器。T0分成两独立定时/计数器TL0和TH0。TL0使用C//T、GATE、TR0、/INT0、TF0定时/计数,TH0使用TR1、TF1因此,只能用于定时

TF0中断控制BAC/T=0振荡器1/12&≥1TiTRiGATEINTiC/T=1TL0(8位)振荡器1/12TH0TF1中断(a)TL0作8位定时/计数器(b)TH0作8位定时器模式3时,T1可定时为模式0、1、2的定时/计数,但不可中断,所以一般只作串口波特率发生器用。振荡器1/12TL1(5位)TH1(8位)串行口C/T=0C/T=1T1(P3.5)振荡器1/12TL1(8位)TH1(8位)串行口C/T=0C/T=1T1(P3.5)TLi(8位)THi(8位)振荡器1/12C/T=0C/T=1T1(P3.5)串行口(a)T0模式3时T1模式0(b)T0模式3时T1模式1(c)T0模式3时T1模式2编程前确定参数:(1)定时/计数器——T0、T1选择其一,(2)工作方式——C//T及GATA,(3)计数初值——加1计数、16位。

计数:X=M-N;M=213=8192(模式0)M=216=65536(模式1)M=28=256(模式2、模式3)定时:X=M–N=M–t/T(t为所要求的定时时间,T为机器周期)

(4)工作模式——M1、M0

N0010

1046MX四、定时/计数器的应用编制初始化程序:1)写TMOD;2)确定IE、IP;3)写计数初值;4)启动计数(TRi)

例1、设计一个能产生t=1ms的周期信号发生器,试编程。解:选T0;C//T=0,GATE=0

N=t/T=t/[12×(1/fosc)]=500

所以,X=M-500,

模式0、模式1均可,取模式0,M=213=8192X=8192-500=7692=1E0CH=0001111000001100B,

1E0CH01100TL011110000TH0F0H0CH先将低五位放入TL0中,再将剩余的数从右向左数出八位放入TH0中。

LJMPMAINORG000BHLJMPINSE1ORG1000HMAIN:

MOVSP,#60HMOVTL0,#0CHMOVTH0,#0F0HMOVTMOD,#00H

SETBTR0SETBET0SETBEASJMP$

………ORG0000H

INSE1:MOVTL0,#0CHMOVTH0,#0F0HCPLP10RETI小结:1、MCS-51单片机内有几个定时计数器?如何计数?2、T0、T1有几种工作方式?3、编程应用前要事先确定的参数有几个?

§4-3定时/计数器的应用TF1TR1TF0TR0IE1IT1IE0IT0

M0

M1C/GATE

M0

M1C/GATETMODTCON例2、设fosc=6MHz,利用单片机内定时/计数器及P10口线输出1000个脉冲,脉冲周期为2mas,试编程。

8031P1.0T12ms

T=12×1/fosc=2us

选取T0定时;T1计数。

设T0采用中断方式产生周期为2ms方波,T1对该方波计数,当输出至第1000个脉冲时,使TF1置1。在主程序中用查询方法,检测到TF1变1时,关掉T0,停止输出方波。

T0、T1参数的确定:T0模式0、定时:脉宽为脉冲周期的一半所以,X=213-1ms/2us=0001111000001100BTH0=0F0H;TL0=0CHT1模式1、计数:N=1000

则X=65536-1000=64536=0FC18H

(若选模式0也可以,此时X=7192=1C18H)

程序:

ORG0000HLJMPMAINORG000BHLJMPTOSORG1000H

MAIN:MOVTMOD,#50H;T0定时,模式0;T1计数,模式1MOVTL0,#0CHMOVTH0,#0F0HMOVTL1,#18HMOVTH1,#0FCH

SETBTR1SETBTR0SETBET0SETBEAWAIT:

JNBTF1,WAIT;查询1000个脉冲计够没有到?

CLREACLRET0ANLTCON,#0FH;停T0、T1SJMP$

TOS:MOVTL0,#0CHMOVTH0,#0F0HCPLP10RETIEND例3、脉冲参数测量——GATE功能的使用。脉冲高电平(计数)长度值存于21H、20H中,脉冲低电平长度存于23H、22H中。电路连接如下图所示。解:复习GATE的用法:

GATE=0时,TRi=1,即可启动Ti定时/计数

GATE=1时,TRi=1,且=1,才启动定时/计数。8031P3.2P3.11被测信号21a3T0计数T1计数

ORG0000HLJMPMAINORG2000HMAIN:MOVTMOD,#99H;T0、T1均工作在定时,;模式1,GATE=1MOVA,#00H;T0、T1赋计数初值00H,

;定时最长时间为0000~65536

MOVTL0,A

MOVTH0,AMOVTL1,AMOVTH1,A

TEST0:JBP32,TEST0;检测是否到a点

SETBTR0;到a点,TR0=1,做好取计时值准备。TEST1:JNBP32,TEST1;检测是否到1点

SETBTR1;到1点T0计时;TR1=1,做好T1计时准备。TEST2:JBP32,TEST2;检测是否到2点

CLRTR0;到2点,停止T0计时,T1开始计时。

MOV20H,TH0;保存T0计时结果

MOV21H,TL0TEST3:JBP33,TEST3;检测是否到3点

CLRTR1;到3点,停止T1计数

MOV22H,TH1;保存T1计数结果

MOV23H,TL1LCALLDISPSJMP$

小结:1、定时/计数的四种方式是怎样的?2、如何计算计数初值?如何编程送入计数初值?3、GATE的用法是怎样的?

8051803180C318751805280328752(DIP封装)15915204036312921VccP0.0/AD0P0.7/AD7EA/VPPALE/PROGPSENP2.0/A8P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P2.6/A14P2.7/A15P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9T2/P1.0T2EX

/P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTRXD

/P3.0TXD

/P3.1INT0/P3.2INT1/P3.3T0/P3.4T1/P3.5WR

/P3.6RD

/P3.7XTALXTAL1VSS

1.初始化的一般步骤:(1)确定定时价数器工作模式(计数或是定时)、入TMOD寄存器。(2)设置定时/计数器的初值,可以直接将初值写入TH0、TL0或THl、TL1中。(3)根据功能要求设置是否使用中断功能。如需开放中断,则对应位赋值。(4)启动定时器,可使用SETBTRn指令,n=0或1。

在定时所数器运行过程中,用户经常会需要了解当前的计数值。所谓飞读,是指在不影响定时/计数器正常工作的条件下,用软件去读取当前的计数值。MCS—51单片祝的TL0、TH0以及TLl、TH1是允许在运行中读写的,只是操作要考虑周全。主要是要考虑正在读取的时候发生低字节向高字节进位的情况。这种情况的解决方案是,先读取高字节,再读取低字节,然后重读高字节以验证其间高字节是否因进位而不同,若因进位而不同,则重新再读一次。当定阶计数器工作在计数方式时,计数肋冲来自对应的外部输入引脚T0和T1,在每个机器周期的采样期间,计数器对外部输入信号进行采样,当一个机器周期的采样值为高电平,而下一个周期的采样值为低电平,即输入信号出现1到0的负跳变时,计数值增加1。由于计数器识别一个1到0的跳变需要2个机器周期,因此,计数器的最高计数频率为系统振荡周期的1/24。并且,为了确保一个电平在变化前至少被采样一次,就必须要求这一电平至少保持一个机器周期时间。如果机器周期为T则对信号的要求为:§4-4MCS-51单片机串行接口一、串行通信概述1、什么叫串行通信?

在生活中同学们排横队行走——并行;排纵队行走——串行。计算机中在传输信息、数据时也有并行、串行的问题。0010001001P1.0P1.1P1.2P1.3RXDTXD单片机外设1外设21111110101000并行通信的特点:短距离、高速度,传输线多。

串行通信的特点:传输线少,方便、长距离传输。接收设备发送设备2、同步通信、异步通信同步——发送设备时钟与接收设备时钟严格一致。校验字符2校验字符1数据n………数据2数据1同步字符2同步字符1异步——发送时钟与接收时钟不一定相等。空闲位停止位奇偶校验位5~8位数据起始位空闲位

异步通信的帧格式(由4部分组成):起始位、数据位、奇偶校验位、停止位。异步通信的特点:(1)每帧传送一个字符(字节),字符间不一定相连;(2)系统简单可靠、造价低,(3)传输速度较低。异步通信的帧格式(由4部分组成):起始位、数据位、奇偶校验位、停止位。异步通信的特点:(1)每帧传送一个字符(字节),字符间不一定相连;(2)系统简单可靠、造价低,(3)传输速度较低。二、同步通信

同步通信的含义:发送端和接收端使用同一个时钟,同步发、收。同步通信的帧格式:由同步字符和多个(大量)连续的数据构成。同步通信的特点:传输速度高、系统复杂、造价高。异步——发送时钟与接收时钟不一定相等。空闲位停止位奇偶校验位5~8位数据起始位空闲位3、串行通信的方向单工

A

B

发半双工

A

发收

B

收发例如:广播电台收音机例如:对讲机全双工

A

发收

B

收发例如:电话机4、波特率即串行通信速率。b/s、bps在异步通信中,单位时间内所传送的有效二进制位数——波特率。举例、设有一帧信息,1个起始位、8个数据位、1个停止位,传输速率为每秒240个字符。求波特率。解:(1+8+1)×240=2400b/s=2400波特。

三、波特率

是描述数据传输速率的物理量。定义为:每秒钟传送的二进制代码的位数。

单位:比特(b/s)9.1.4串行通信协议(异步协议)

协议:是对数据传送方式的规定。

帧格式1、起始位2、数据位:5~8位3、奇偶校验位:1位4、停止位:1~2位5、波特率6、握手信号9.2串行口及应用

8051有一可编程的全双工串行通信接口,可用作异步串行通信,也可用作同步移位寄存器;可单机通信,也可多机通信;其帧格式有8位、10位、11位;可设置不同波特率。

9.2.18051串行口一、8051串行口结构1、发送部分发送寄存器SBUF、发送移位寄存器(并串)2、接收部分接收移位寄存器(串并)、接收寄存器SBUF3、时钟部分(产生波特率)

定时器T1、分频器(2、16分频)等

8051串行口结构1、发送部分2、接收部分3、时钟部分发送接收5、串行通信接口发送:CPUD7D6D5D4D3D2D1D0发送寄存器SBUF01D0D1D2D3D4D5D6D7发送时钟:接收:D0D1D2D3D4D5D6D710D7D6D5D4D3D2D1D0CPU接收时钟接收数据寄存器SBUF二、MCS-51机串行接口单片机内有通用异步接收/发送器UART。全双工,4种工作方式,波特率可编程设置,可中断。1、串口的组成从编程角度讲来看主要由以下寄存器组成。SBUF——串行发送/接收数据缓冲器是两个物理单元,共用一个地址(99H)SMODPCON——电源管理寄存器SMOD位用于决定波特率的倍数。020=1倍121=2倍SCON——串行口控制寄存器SM0SM1SM2RENTB8RB8

TI

RITI/RI:中断请求标志位(前面已讲过)RB8:接收的第九位数TB8:发送的第九位数REN:允许接收控制位SM2:多机通信控制位(常与RB8配合,决定是否激活RI)SM0、SM1:工作方式选择位(四种工作方式)三、串行通信工作方式

8051有4种工作方式,有3种帧格式,波特率可变。1、串行口方式0

方式0为同步移位寄存器输入/输出方式,常用于扩展I/O口。

此时,SM0=0、SM1=0

(1)方式0的特点:1)一帧仅有8位数据,无起始和结束位,低位在前。2)RXD引脚用于传送数据,TXD用于传送时钟。3)波特率固定,其值为ƒosc/12。2、串行口的工作方式(1)方式0:同步移位寄存器方式

波特率固定为fosc/12RXD——接收发送数据

TXD——产生同步移位脉冲接收/发送完,置位RI/TI,(要求SM2=0)

D7

D6

D5

D4

D3

D2

D1

D0

D0

D1

D2

D3

D4

D5

D6

D7发送接收无起始位,无停止位。可用于并口的扩展。2、串行口的工作方式(1)方式0:为同步移位寄存器输入输出方式,常用于扩展IO端口。在方式0状态下,其波特率是固定的,为fosc/12,数据出RXD(P3.0)输入/输出山,而TXD(P3.1线专用于输出时钟脉冲给外部寄存器,发送和接收都是8位数据,低位在前。

发送过程:当一个数据写入串行口发送缓冲器SBUF时,串行口即8位数据以fosc/12的波特率从RXD(P3.0)引脚输出(从低位到高位),发送完8位数据后,由硬件将中断标志位TI置“1”,请求中断,在再次发送数据之前,必须用软件将TI清零。2、串行口的工作方式(1)方式0:接收过程:接收是在RI=0的条件下,使REN=1来启动接收过程。接收数据由RXD输入,TXD输出同步移位脉冲,收到8位数据以后.内硬件使RI=1,在中断允许时,可以发出串行口接收中断申请。RI=1表示接收数据已装入接收数据缓冲器中,可以由CPU读入累加器A或其他的RAM单元。RI也必须由软件请零,以准备接收下一个数据。SCON控制字的SM2位(多机通讯控制位)必须为0。从而不影响TB8和RB8位,由于波特率固定,无须用定时器提供。当以中断方式传送数据时,CPu响应中断并不会清除RI、TI标志。所以在中断服务程序中必须由指令请零。

(2)方式0发送

用于扩展并行输出口,用74LS164芯片。启动输出(发送)用“向SBUF写数据指令”。用RXD引脚传送数据,TXD引脚传送时钟。

74LS164可级连多片。

(3)方式0接收

用于扩展并行输入口,用74LS165芯片。启动输入(接收):REN置1(且RI=0)。用RXD引脚传送数据,用TXD引脚传送时钟。

74LS165可级连多片。移位/置数时钟禁止

162、串行口方式1

方式1是真正用于串行发送和接收,为10位通用异步接口。此时,SM0=0、SM1=1

(1)特点:1)一帧有10位,1位起始,8位数据位,1位停止位。接收时停止位进入SCON的RB8。2)RXD引脚用于接收数据,TXD引脚用于发送数据。可以同时进行收、发。3)波特率可变,由T1的溢出率决定。(2)方式1:8位UART

波特率为(2SMOD×T1的溢出率)/32,可变。一帧信息10位。D0D1D2D3D4D5D6D7停止位起始位发送D7D6D5D4D3D2D1D0起始位停止位接收送RB8发送完置位TI。当接收到数据后,置位RI是有条件的。即:REN=1,RI=0且SM2=0或SM2=1且接收到的停止位为1。此时,数据装载SBUF,RI置1,停止位进入RB8。

(2)方式1发送启动发送:

用“向SBUF写数据指令”便启动了发送。数据从TXD引脚送出。数据发完后TI置1。发送时序如下图所示。

(3)方式1接收1)接收条件:SCON中的REN置12)接收过程:

REN置1后,串行口对接收引脚RXD检测,当RXD由高变低时开始移位接收;接收完后将停止位装入RB8中。3)接收的数据有效的条件:

a)RI=0;b)SM2=0,或者SM2=1并且RB8=1

满足以上2条,则将8位数据装入SBUF中,并且RI

置1。有以下情况之一则数据无效:

a)RI=1;b)SM2=1并且RB8=0注意:除了方式2、3的多机通信之外,SM2应清0接收时序如下图所示。(2)方式1:8位UART

波特率为(2SMOD×T1的溢出率)/32,可变。方式1为10位通用异步接口:一位起始位、8位数据位和一位停止位,此时SCON中的SMo、SMl两位为01。串行口电路在发送时能自动插入起始位和停止位,在接收数据时,停止位进入特殊功能寄存器SCON的某一位。方式1的传送波特率是可变的。

方式1发送:数据从引脚加(P3.1)端输出,当执行数据写入发送数据缓冲器SBuF命令时,就启动了发送器开始。发送时的定时信号,也就是发送移位时钟(Tx时钟),它是由定时器T[送来的溢出信号经过16分频或32分频(取决SMOD的值)而取得的。发送开始的同时,内部控制信号有效,将起始位向TxD输出,此后每过一个Tx时钟周期就产生一个移位脉冲,并由TxD输出一个数据位,当8位数据位全部发完后,置位TI,并申请中断。(2)方式1:8位UART方式1接收:数据从引脚RXD(P3.0)端输入。接收是在SCON寄存器中REN位置“l”的前提下,并检测到起始位(RxD上检测“1-0”的跳变,即起始位)而开始。

在第9位数据收齐之后(8位数据,一位停止位),必须同时满足两个条件,这次接收才真正有效:RI=0和SM2=0或者接收到的停止位为1。如果不满足这两个条件,则这一次收到的数据就不装入SBuF中,实际上就意味着丢失了一组数据。因为串行口马上又开始寻找下一个起始位准备接收下一组数据了。3、串行口方式2和方式3

此时,SM0=1、SM1=0、1

(1)特点:1)一帧有11位。1位起始,8位数据位,1位校验/特征位(接收时该位进入SCON的RB8),1位停止位。2)RXD引脚用于接收数据,TXD引脚用于发送数据。可以同时进行收、发。3)方式2波特率固定有两种值;方式3波特率可变,由T1的溢出率决定。4)可以进行多机通信。(3)方式2、方式3:9位UART

一般用于多机通信。一帧信息11位。

D0D1D2D3D4D5D6D7TB8停止位起始位发送发送完数据置位TI。

TB8D7D6D5D4D3D2D1D0起始位停止位接收接收到有效数据完毕,置位RI的条件:REN=1,RI=0且SM2=0或接收到第9位数据为1,此时,数据装载SBUF,RI置1,第9位数据(TB8)RB8。

送RB8(2)方式2、3的发送与接收

与方式1类似,从略。时序如下图所示,仅多了1位。发送时序接收时序四、波特率设计

波特率是串行通信协议中的一个重要内容。在8051单片机串行通信的4种工作方式中,方式0和方式2的波特率固定,方式1和方式3的波特率可变,由T1的溢出率确定。1、方式0的波特率

波特率产生原理如下图所示。波特率值=

ƒosc/12书中用≌,示数据关系2、方式2的波特率波特率产生原理如下图所示。

波特率值=(2SMOD/64)׃osc

SMOD是PCON中的最高位,称为波特率加倍位,为1时加倍。3、方式1和方式3的波特率波特率产生原理如下图所示。方式2波特率:(固定)2SMOD/64×fosc3、波特率的设置方式0、方式2固定。方式1,方式3可变。波特率=2SMOD/32×(T1的溢出率)

T1溢出率=单位时间内溢出次数=1/(T1的定时时间)而T1的定时时间t就是T1溢出一次所用的时间。此情况下,一般设T1工作在模式2(8位自动重装初值)。

N=28-t/T,t=(28-N)T=(28-N)×12/fosc所以,T1溢出率=1/t=fosc/12(28-N),故,波特率=2SMOD/32×fosc/12(256-N)。若已知波特率,则可求出T1的计数初值:

y=256-2SMOD×fosc/(波特率×32×12)

波特率值=(2SMOD/32)×(T1溢出率)T1溢出率=1/定时时间t∵t=(2N-初值X)*机器周期Tcy

=(2N-初值X)×12/ƒosc∴波特率值=(2SMOD/32)׃osc/(12×(2N-X))

=ƒosc×(SMOD+1)/(384×(2N-X))∴初值X=

2N-ƒosc×(SMOD+1)/(384×波特率值)

13T1以模式0工作8192N=16T1以模式1工作对应2N=65536

8T1以模式2工作256注意:T1以模式0、1工作时,(1)需要编写中断处理程序,在程序中需重新赋初值;(2)且有时间误差,可调整初值补偿。T1以模式2工作无这些问题。例、若fosc=6MHz,波特率为2400波特,设SMOD=1,则定时/计数器T1的计数初值为多少?并进行初始化编程。

解:X=256-2SMOD×fosc/(2400×32×12)=242.98≈243=F3H

fosc=11.0592MHz,波特率为2400,设SMOD=0,则X=F4H。初始化编程:MOVTMOD,#20HMOVPCON,#80HMOVTH1,#0F3HMOVTL1,#0F3HSETBTR1

MOVSCON,#50H

常用的波特率与T1的初值、SMOD、振荡频率等参数的对应关系如表9-2所示。

例9-18051单片机的时钟振荡频率为11.0592MHz,选用定时器T1工作于模式2作为波特率发生器,波特率为2400b/s。求T1的初值X,并编写初始化程序段。解:设波特率加倍位SMOD=0

X=256-11.0592×106×(0+1)/(384×2400)=244=F4H

初始化程序段::MOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HSETBTR1

:二、串行口方式1的发送和接收例9-5用8051的串行口以方式1发送ASCII数据块,要求波特率为1200b/s,进行校验。试编写采用查询方式发送的程序。设数据在片内RAM的20H~3FH单元,ƒosc=11.0592MHz。解:(1)最高位作校验位,采用奇校验,P最高位

(2)用定时器/计数器1以模式2定时,作为波特率发生器;计算初值,由初值X=

2N-ƒosc×(SMOD+1)/(384×波特率值)这里N=8,ƒosc=11.0592MHz

波特率为1200b/s,取SMOD=0PCON=00H得初值X=232D=0E8H。(3)TMOD=00100000B=20H

(4)SCON=01000000B=40H(5)程序清单:主程序

MOVTMOD,#20HMOV TL1,#0E8HMOVTH1,#0E8HSETBTR1MOVSCON,#40HMOVR0,#20HMOVR7,#32MOVA,@R0LCALLSP-OUTJNBP,ERRORINCR0DJNZR7,LP:串行口发送子程序

MOVC,PCPLCMOVACC.7,CMOVSBUF,AJNBTI,$CLRTIRETERROR:(略)SP-OUT:

P为0说明发送出的数据中有偶数个1,是错误的。LP:

例9-6用8051的串行口以方式1接收带奇偶校验位的数据块(与上题配合)。试编写采用查询方式的程序,接收的数据放在片内RAM的20H~3FH单元。ƒosc=11.0592MHz。解:(1)最高位为校验位(采用奇校验),应去掉

(2)用定时器/计数器1以模式2定时,作为波特率发生器;计算初值,由初值X=

2N-ƒosc×(SMOD+1)/(384×波特率值)这里N=8,ƒosc=11.0592MHz

波特率为1200b/s,取SMOD=0PCON=00H得初值X=232D=0E8H。

(3)TMOD=00100000B=20H

(4)SCON=01010000B=50H(5)程序清单:主程序MOVSCON,#50HMOVPCON,#0MOVTMOD,#20HMOVTL1,#0E8HMOVTH1,#0E8HSETBTR1MOVR0,#20HMOVR7,#32LCALLSP-INJC

ERRORMOV

@R0,AINCR0DJNZR7,LP:串行口接收子程序

JNBRI,$CLRRIMOVSBUF,AMOVC,PCPLCANLA,#7FHRETERROR:(略)SP-IN:LP:

C为1说明接收的数据有偶数个1,是错误的(因采用奇校验)。小结:1、什么叫串行通信?2、UART叫什么?(通用异步接收/发送器)3、单工、半双工、全双工?4、串口工作用到哪些寄存器?(PCON、SCON、SBUF)5、串口有几种工作方式?6、波特率如何设置?(T1的计数初值如何确定)

中断源与中断标志位分类中断源SFR中的中断申请标志位中断原因中断入口外部中断源外部中断0IE0(TCON.1)P3.2/脚上的信号可以引起中断申请0003H外部中断1IE1(TCON.3)P3.3/脚上的信号可以引起中断申请0013H内部中断源T0:定时器/计数器0中断IF0(TCON.5)T0计数溢出后引起中断申请000BHT0:定时器/计数器1中断IE0(TCON.7)T1计数溢出后引起中断申请001BH串行口中断RI(SCON.0)串行口接收完一帧数据后引起中断申请0023HTI(SCON.1)串行口发送完一帧数据后引起中断申请INT1INT0INT0INT1外部中断TF1TR1TF0TR0IE1IT1IE0IT0TCON.7.6.5.4.3.2.1TCON.0TCON:用于T0和T1

用于外部中断IT0(TCON.0)——外部中断0触发方式控制位IE0(TCON.1)——外部中断0中断申请标志位IT1(TCON.1)——触发方式控制位,功能同IT0IE1(TCON.1)——中断申请标志位,功能同IE0INT1INT1中断允许寄存器IEEAESET1EX1ET0EX0IE.7.6.5.4.3.2.1IE.0IE:总中断允许EX0(IE.0)——外部中断允许位ET0(IE.1)——

T0中断允许位EX1(IE.2)——中断允许位ET1(IE.3)—— T1中断允许位ES(IE.4)—— 串行口中断允许位EA(IE.7)—— 总中断允许位INT0INT1中断优先级寄存器IP——————PSPT1PX1PT0PX0 IE.4.3.2.1IP.0IE:保留位INT0优先级T0INT1T1串行口优先级中断入口中断源中断入口地址0003HT0000BH0013HT1001BH串行口0023HINT0INT1堆栈应用用堆栈保护断点的方法堆栈区与SP应注意的五点:

1)从栈底到栈顶 2)数据先进后出 3)PUSH与POP成对使用 4)堆栈区字节再做数据缓冲区使用 5)必须对SP置初值中断响应全过程中断申请的准备中断申请的提出响应中断申请的条件CPU响应一个中断之后的操作中断嵌套在中断服务子程序执行完的操作中断实例——管脚输入单脉冲的实验图中的按键S每被压下一次,则单片机P1口上点亮的一个发光二极管VL将向下循环移一位。1111R1R0R6R7VL1VL0VL6VL7…P1.0P1.1P1.6P1.7……INT1+5VR9S8031STR_ADD EQU 0000HBRK_ADD EQU 0013H

;中断服务子程序入口 ORG STR_ADD AJMP MAIN ORG BRK_ADD AJMP BREAK ORG STR_ADD+#30H ;MAIN=4030HMAIN: MOV A,#01H SETB IT1 ;设置成沿触发方式 MOV IE,#10000100B ;开中断 MOV P1,#0 ;关灯ROTATE: NOP SJMP ROTATE ORG STR_ADD+#60H ;BREAK=4060HBREAK: MOV P1,A ;点亮一个灯 RL A ;循环左移一位 CLR IE1 ;清中断申请标志 RETI ;中断返回 END第二节

定时器/计数器及其应用与定时器/计数器有关的特殊功能寄存器计数器定时器/计数器方式寄存器TMODGATEC/TM1M0GATEC/TM1M0TMOD.7.6.5.4.3.2.1TMOD.0TMOD: T1方式字段 T0方式字段GATE(位TMOD.3)——门控位。与TCON.4都为高电平 时才能启动T0C/T(位TMOD.2)——定时或计数功能选择位。M1和M0(TMOD.1和TMOD.0)——工作方式选择位。TF1TR1TF0TR0IE1IT1IE0IT0TCON.7.6.5.4.3.2.1TCON.0TCON:定时器控制 外部中断控制定时器/计数器控制寄存器TCONTR0(

TCON.0)——T0的运行控制位。TF0(

TCON.0)——T0溢出兼中断申请标志位。TR1——

T1的运行控制位。TF1——

T1溢出兼中断申请标志位。

注:TMOD和TCON的复位值都是00H定时器/计数器的四种工作方式(一)方式0——13位定时器/计数器1。晶振电路机器周期C/T=0C/T=1TL0(5位)TH0(8位)TF0T0溢出标志位门控开关中断允许GATE位门控信号≥1&TR0位门控信号门控电平S6S5外部计数脉冲P3.4/

T0P3.2/INT0门控脚定时器/计数器的四种工作方式(二)方式1——16位定时器/计数器方式2——可自动重装初值的 8位定时器/计数器方式3——两个8位定时器/计数器定时器/计数器应用实例·方式0应用

例1

已知单片机晶振频率为6MHz,要求使用T0定时器1ms,使单片机P1.0脚上连续输出周期为2ms的方波。 解: 1、计算并确定T0的初值; 2、写程序(如下)

ORG 0000H ;复位入口RESET: AJMP START ORG 000BH ;T0中断入口 AJMP T0INT ORG 0030HSTART: MOV SP,#60H ;初始化程序 MOV TH0,#0F0H ;T0赋初值 MOV TL0,#0CH SETB TR0 ;启动T0 SETB ET0 ;开中断 SETB EA ;开总中断MAIN: AJMP MAIN ;主程序T0INT: CPL P1.0 ;P1.0脚取反 MOV TL0,#0CH ;重装初值 MOV TH0,#0F0H RETI精度不高,原因: 1,中断服务子程序执行时间未计入T0定时 2,从中断申请到CPU响应该中断所经历的 时间未计入T0定时将中断服务子程序改为:T0INT: CLR EA ;关总中断 CLR TR1 ;停止T0计数 MOV A,#0F0H ;取高8位计算的初值 ADD A,TH0 ;加修正值 MOV TH0,A ;修正后送TH0 MOV A,#0CH ;取低5位计算的初值 ADD A,#0EH ;加14个机器周期 JNB ACC.5,MMM ;加修正值 JNC TH0 ;判低5位有进位否 ANL A,#0001111BMMM: MOV TL0,A ;修正后闭塞TL0 CPL P1.0 SETB TR1 ;启动T0 SETB EA RETI补偿方法,原理: 1,在中断服务子程序执行过程中关掉总中断 防止其它中断嵌套影响定时精度 2,用CLRTR0指令停止T0计数定时器/计数器应用实例·方式1应用

例2

试用单片机定时器/计数器T1的方式1完成对某生产线的传送带上不断传送的产品进行计数.+6V11+5V7V灯控S4010640106R3R2R1R5R4VTHL1红传送带光电开关HL2C5C48031P3.3/INT0P3.5/T1其它电路

ORG 0000H ;复位入口 AJMP START ;T1中断入口 ORG 001BH AJMP 0500H ORG 0100HSTART: MOV SP,#65H ;初始化程序 MOV TCON,#00H ;可省略 MOV TMOD,#0D0H MOV TH0,#00H ;可省略 MOV TL0,#00H ;可省略 MOV R0,#00H ;清中断次数计数单元 MOV P3,#28H ;设置P3.5第二功能 SETB TR1 ;启动T1 SETB ET1 ;开T1中断 SETB EA ;开总中断MAIN ACALL XSZ ;主程序,调显示子程序 ……………… ORG 0500HT1INT: INC R0 ;中断服务子程序 RETI ORG 0600HXSZ: ……………… ;显示子程序,略 RET方式2应用例3 设单片机8031使用的晶振频率为6MHz,编程使P1.7脚输出1kHz连续方波。

ORG 0

AJMP 0050H

ORG 000BH

AJMP 0250H

ORG 0050H

START: MOV SP,#60H

MOV TMOD,#2

MOV TH0,#6

MOV TL0,#6

MOV IP,#2

SETB TR0

MOV IE,#82H

MAIN: AJMP MAIN

ORG 0250H

T0INT: CPL P1.7

RETI例4 8031型单片机晶振为6MHz,设定8031和T1做为串行口波特率发生器,此时T1没有申请中断的功能。要求使用T0完成对某高频发射机同步头信号的宽度进行监测。

ORG 0

AJMP 0030H

ORG 001BH

AJMP 0700H

ORG 0030H

START: MOV SP,#60H

MOV IP,#8

MOV TMOD,#00101001B

MOV TL0,#0

MOV TH0,#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论