电子工程师提升计划-第5章 中断技术【2.2】

        在方式2时,16位定时器/计数器T0分成TH0、TL0两个8位计数器,其中TL0用来对脉冲计数,TH0用来存放计数器初值。在计数时,当TL0计数溢出时会将寄存器TCON的TF0位置“1”,同时也控制TH0重装开始,将TH0中的初值重新装入TL0中,然后TL0又开始在初值的基础上对
输入脉冲进行计数。定时器/计数器T0工作在方式2时的计数初值和定时初值的计算分别如下:


4.方式3
        定时器/计数器T0有方式3,而T1没有(只有方式0~2)。当寄存器TMOD低4位中的M1=1、M0=1时,定时器/计数器T0工作在方式3。在方式3时,定时器/计数器T0用作计数器或定时器。
(1)在方式3时,定时器/计数器T0的工作原理
在方式3时,定时器/计数器T0用作计数器或定时器,在该方式下定时器/计数器T0的电路结构如图6-7所示。

        从图中可以看出,在方式3时,定时器/计数器T0被分成TL0、TH0两个独立的8位计数器,其中TL0受定时器/计数器T0的全部控制位控制(即原本控制整个定时器/计数器T0的各个控制位,在该方式下全部用来控制定时器/计数器T0的TL0计数器),而TH0受定时器/计数器T1的部分控制位(TR1位和TF1位)控制。
        在方式3时,TL0既可用作8位计数器(对外部信号计数),也可用作8位定时器(对内部信号计数);TH0只能用作8位定时器,它的启动受TR1的控制(TR1原本用来控制定时器/计数器T1),当TR1=1时,TH0开始工作,当TR1=0时,TH0停止工作,当TH0计数产生溢出时会向TF1
置位。
(2)在方式3时,定时器/计数器T1的工作原理
        当定时器/计数器T0工作在方式3时,它占用了定时器/计数器T1的一些控制位,此时定时器/计数器T1还可以工作在方式0~2(可通过设置寄存器TMOD高4位中的M1、M0的值来选择),定时器/计数器T1在这种情况下一般用作波特率发生器。当定时器/计数器T0工作在方式3时,定时器/计数器T1工作在方式1和方式2的电路结构分别如图6-8(a)和图6-8(b)所示。

        图6-8(a)所示是定时器/计数器T1工作在方式1时的电路结构。在该方式下,定时器/计数器T1是一个16位计数器,由于TR1控制位已被借用来控制T0的高8位计数器TH0,所以定时器/计数器T1在该方式下无法停止,一直处于工作状态,另外由于TF1位也借给了TH0,所以定时器/计数器T1溢出后也不能对TF1进行置位产生中断请求信号,定时器/计数器T1溢出的信号只能输出到串行通信口,此方式下的定时器/计数器T1为波特率发生器。
        图6-8(b)所示是定时器/计数器T1工作在方式2时的电路结构。在该方式下,定时器/计数器T1是一个8位自动重装计数器,除了具有自动重装载功能外,其他与方式1相同。

6.4 定时器/计数器的应用

        定时器/计数器具有定时和计数功能,这使得它有广泛的用途。下面举几个例子来说明定时器/计数器的应用。

6.4.1 利用定时器/计数器控制发光二极管的发光时间

        要用定时器/计数器控制发光二极管(LED)的发光时间,需首先设计好单片机硬件电路,然后再编写程序。
1.设计单片机控制LED的硬件电路
        设计好的单片机控制 LED 的硬件电路如图6-9所示。在该电路中,要实现的功能是:让 VD1亮50ms的时间,然后熄灭。

2.编写单片机程序
        在图6-9中,只需让单片机的P1.2引脚先为高电平,再变为低电平,并且低电平持续时间为50ms,然后让P1.2引脚恢复为高电平,也就是说,让P1.2引脚输出一个宽度为50ms的低电平脉冲,这样就可以让VD1亮50ms的时间。
        欲实现该功能可以应用定时器/计数器,为了让定时器/计数器定时为50ms就能溢出,需要让定时器/计数器工作在方式1(为16位计数器),还要对定时器/计数器设置定时初值。
实现该功能的程序如下:
SETB P1.2  ;将P1.2端口置“1”(即让P1.2引脚为高电平,VD1开始处于熄灭状态)
MOV TMOD,#01H ;将数据01H(00000001)送到寄存器TMOD中,这样TMOD的低4位中的
;GATE=0、C/T=0,M1=0、M0=1,将T0工作方式设置为方式1
MOV TH0,#3CH ;将数据3CH送到T0的高8位计数器中
MOV TL0,#B0H ;将数据B0H送到T0的低8位计数器中,这样T0的定时初值就被设为3CB0H
;(即15536)
CLR P1.2  ;将P1.2端口清0(即让P1.2引脚为低电平,VD1开
始亮)
SETB TR0   ;将定时器/计数器控制寄存器TCON中的TR0位置
“1”,启动T0开始工作
JNB TF0,$  ;判断定时器/计数器控制寄存器TCON中T0的溢出
位TF0是否为“0”,若为“0”,
;则反复执行本条指令;若为“1”,则执行下一条指令。T0工作
后,50ms才能溢出,
;将TF0置“1”,所以本条指令要反复执行50ms的时间,在此期
间,P1.2引脚一
;直为低电平,VD1会一直亮,50ms后开始执行下一条指令
CLR TF0   ;将TF0位清0
SETB P1.2  ;将P1.2端口置“1”,VD1由亮变灭
程序说明:
        第1条指令是让P1.2引脚输出高电平,VD1熄灭;第2条指令是将T0的工作方式设置为方式1;第3、4条指令是给计数器设置定时初值;第5条指令是让P1.2引脚输出低电平,VD1亮;第6条指令是启动T0开始工作;第7条指令是等待计数器溢出,等待时间为50ms,这段时间内P1.2引脚始终为低电平,VD1亮;第8条指令是将溢出位TF0清0,以便计数器下一次溢出置“1”;第9条指令让P1.2引脚又输出高电平,VD1熄灭。

6.4.2 利用定时器/计数器产生脉冲信号

1.设计单片机脉冲产生硬件电路
        设计好的单片机脉冲产生硬件电路如图6-10所示。在该电路中,要实现的功能是:让单片机的P1.2引脚输出一个10kHz的方波脉冲信号。
2.编写单片机程序
        10kHz方波脉冲信号的周期为100μs,它的高电平和低电平持续时间都是50μs。也就是说,只要让P1.2引脚输出的高、低电平交替持续50μs,该引脚就能输出10kHz的方波脉冲信号。
        实现该功能可以应用定时器/计数器,由于高、低电平持续时间短,并且反复循环,故可让定时器/计数器工作在方式2(8位自动重装计数器)。为了让定时器/计数器在50μs就能溢出,需要对定时器/计数器设置定时初值。

实现该功能的程序如下:
MOV TMOD,#02H  ;将T0工作方式设置为方式2
MOV TH0,#0CEH  ;设置自动重装计数器TH0的重装值为
CEH(206)
MOV TL0, #0CEH  ;设置8位计数器TL0的定时初值为
CEH(206)
SETB TR0    ;将TR0位置“1”,启动T0开始工作
LP: JNB TF0,$  ;判断溢出位TF0是否为“0”,若为
“0”,则反复执行本条指令;
;若为“1”,则执行下一条指令。T0工作后,50μs才能溢出,将
TF0置
;“1”,所以本条指令要反复执行50μs,50μs后才执行下一条
指令
CLR TF0    ;将溢出位TF0清0
CPL P1.2    ;将P1.2端口值取反
SJMP LP    ;跳转执行标号LP处的指令(即循环)
程序说明:
        前面4条指令用来设置定时器/计数器(又称初始化定时器/计数器),第5条指令的功能是等待定时器/计数器产生溢出对TF0置位,等待时间为50μs,在这段时间里,P1.2端口一直为某电平(高电平或是低电平),50μs后定时器/计数器溢出,对TF0置“1”,系统马上开始执行第6条指令(将TF0清0),然后执行第7条指令,将P1.2端口的值取反,再执行第8条指令,执行完第8条指令后又跳转执行第5条指令,第5条指令又等待50μs,此时P1.2端口为取反后的值,该值会持续50μs。如此反复进行,在P1.2引脚就输出了高、低电平均为50μs的10kHz方波脉冲信号。

第7章 串行通信技术

7.1 概述

        通信的概念比较广泛,在单片机技术中,单片机与单片机或单片机与其他设备之间的数据传输称为通信。根据数据传输方式的不同可将通信分为两种:并行通信和串行通信。
        同时传输多位数据的方式称为并行通信。如图7-1(a)所示,在并行通信方式下,单片机中的8位数据10011101通过8条数据线同时送到外部设备中。
        并行通信的特点是数据传输速度快,但由于需要的传输线多,故成本高,只适合近距离的数据通信。
        逐位依次传输数据的方式称为串行通信。如图7-1(b)所示,在串行通信方式下,单片机中的8位数据10011101通过一条数据线逐位传送到外部设备中。

串行通信的特点是数据传输速度慢,但由于只需要一条传输线,故成本低,适合远距离的数据通信。

7.1.1 串行通信方式

        串行通信又可分为异步通信和同步通信两种。MCS-51系列单片机采用异步通信方式。
1.异步通信
        在异步通信中,数据是一帧一帧传送的。异步通信如图7-2所示,这种通信是以帧为单位进行数据传输,一帧数据传送完成后,可以接着传送下一帧数据,也可以等待,等待期间为空闲位(高电平)。

(1)帧数据格式
        串行通信时,数据是以帧为单位传送的,帧数据有一定的格式。帧数据的格式如图7-3所示。从图7-3中可以看出,一帧数据由起始位、数据位、奇偶校验位和停止位组成。

        起始位:表示一帧数据的开始,起始位一定为低电平。当单片机要发送数据时,先送一个低电平(起始位)到外部设备,外部设备接收到起始信号后,马上开始接收数据。
        数据位:它是要传送的数据,紧跟在起始位后面。数据位的数据可以是5~8位,传送数据时是从低位到高位逐位进行的。
        奇偶校验位:该位用于检验传送的数据有无错误。奇偶校验是检查数据传送过程中是否发生错误的一种校验方式,分为奇校验和偶校验。奇校验是指数据和校验位中“1”的总个数为奇数,偶校验是指数据和校验位中“1”的总个数为偶数。
        以奇校验为例,若单片机传送的数据中有偶数个“1”,为保证数据和校验位中“1”的总个数为奇数,奇偶校验位应为“1”。如果在传送过程中数据产生错误,其中一个“1”变为“0”,那么传送到外部设备的数据和校验位中“1”的总个数为偶数,外部设备就知道传送过来的数据发生错误,会要求重新传送数据。
        数据传送采用奇校验或偶校验均可,但要求发送端和接收端的校验方式一致。在帧数据中,奇偶校验位也可以不用。停止位:它表示一帧数据的结束。停止位可以是1位、1.5位或2位,但一定为高电平。
        一帧数据传送结束后,可以接着传送第2帧数据,也可以等待,等待期间数据线为高电平(空闲位)。如果要传送下一帧,只要让数据线由高电平变为低电平(下一帧起始位开始),接收器就开始接收下一帧数据。

(2)MCS-51系列单片机的几种帧数据方式
MCS-51 系列单片机在串行通信时,根据设置的不同,其传送的帧数据有以下4种方式。
        ① 方式0。称为同步移位寄存器输入/输出(I/O)方式,它是单片机通信中较特殊的一种方式,通常用于并行I/O接口的扩展,这种方式中的一帧数据只有8位(无起始位、停止位)。
        ② 方式1。在这种方式中,一帧数据中有1位起始位、8位数据位和1位停止位,共10位。
        ③ 方式 2。在这种方式中,一帧数据中有 1 位起始位、8 位数据位、1 位可编程位和 1 位停止位,共11位。
        ④ 方式3。这种方式与方式2相同,一帧数据中有1位起始位、8位数据位、1位可编程位和1位停止位,它与方式2的区别仅在于波特率(数据传送速率)设置不同。
2.同步通信
        在异步通信中,每一帧数据发送前要用起始位,结束时要用停止位,这样会占用一定的时间,导致数据传输速度较慢。为了提高数据传输速度,在计算机与一些高速设备进行数据通信时,常采用同步通信。同步通信的帧数据格式如图7-4所示。

        从图7-4 中可以看出,同步通信的数据后面取消了停止位,前面的起始位用同步信号代替,在同步信号后面可以跟很多数据,所以同步通信传输速度快。但由于在通信时要求发送端和接收端严格保持同步,这需要用复杂的电路来保证,所以单片机很少采用这种通信方式。

7.1.2 串行通信的数据传送方向

        串行通信根据数据的传送方向可分为3种方式:单工方式、半双工方式和全双工方式。这3种传送方式如图7-5所示。

        ① 单工方式。在这种方式下,数据只能向一个方向传送。单工方式如图7-5(a)所示,数据只能由发送端传输给接收端。
        ② 半双工方式。在这种方式下,数据可以双向传送,但同一时间内,只能向一个方向传送,只有一个方向的数据传送完成后,才能往另一个方向传送数据。半双工方式如图7-5(b)所示,通信的双方都有发送器和接收器,一方发送时,另一方接收,由于只有一条数据线,所以双方不能在发送的同时进行接收。
        ③ 全双工方式。在这种方式下,数据可以双向传送,通信的双方都有发送器和接收器,由于有两条数据线,所以双方在发送数据的同时可以接收数据。全双工方式如图7-5(c)所示。

7.2 串行通信口的结构与工作原理

单片机通过串行通信口可以与其他设备进行数据通信来控制外部设备或接受外部设备的控制,从而实现更强大的功能。

7.2.1 串行通信口的结构

串行通信口的结构如图7-6所示。

从图7-6中可以看出,与串行通信口有关的部件主要有以下几种。
        ① 两个数据缓冲器SBUF。SBUF是可以直接寻址的特殊功能寄存器(SFR),它包括发送SBUF和接收SBUF,发送SBUF用来发送串行数据,接收SBUF用来接收数据,两者共用一个地址99H。在发送数据时,该地址指向发送SBUF;而在接收数据时,该地址指向接收SBUF。

② 输入移位寄存器。在接收控制器的控制下,将输入的数据逐位移入接收SBUF。
③ 串行控制寄存器SCON。SCON的功能是控制串行通信口的工作方式,并反映串行通信口的工作状态。
④ 定时器T1。T1用作波特率发生器,用来产生接收和发送数据所需的移位脉冲,移位脉冲的频率越高,接收和传送数据的速率越快。

7.2.2 串行通信口的工作原理

        串行通信口有接收数据和发送数据两个工作过程,下面以图7-6所示的串行通信口结构为例来说明这两个工作过程。
1.接收数据过程
        在接收数据时,若RXD端(与P3.2引脚共用)接收到一帧数据的起始信号(低电平),寄存器SCON 马上向接收控制器发出允许接收信号,接收控制器在定时器/计数器T1产生的移位脉冲信号控制下,控制输入移位寄存器,将 RXD 端输入的数据由低到高逐位移入输入移位寄存器中,数据全部移入输入移位寄存器后,寄存器再将全部数据送入接收SBUF中,同时接收控制器通过或门向CPU发出中断请求,CPU马上响应中断,将接收SBUF中的数据全部取走,从而完成一帧数据的接收。后面各帧的数据接收过程与上述相同。
2.发送数据过程
        相对于接收过程来说,串行通信口发送数据的过程较简单。当CPU要发送数据时,只要将数据直接写入发送SBUF中,就启动了发送过程。在发送控制器的控制下,发送门打开,先发送一位起始信号(低电平),然后依次由低到高逐位发送数据,数据发送完毕,最后发送一位停止位(高电平),从而结束一帧数据的发送。一帧数据发送完成后,发送控制器通过或门向CPU发出中断请求,CPU响应中断,将下一帧数据送入发送SBUF,开始发送下一帧数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值