毛泽东思想和中国特色社会主义理论体系概 第六章.docx
- 文档编号:30771624
- 上传时间:2023-08-23
- 格式:DOCX
- 页数:18
- 大小:66.32KB
毛泽东思想和中国特色社会主义理论体系概 第六章.docx
《毛泽东思想和中国特色社会主义理论体系概 第六章.docx》由会员分享,可在线阅读,更多相关《毛泽东思想和中国特色社会主义理论体系概 第六章.docx(18页珍藏版)》请在冰豆网上搜索。
毛泽东思想和中国特色社会主义理论体系概第六章
第六章MCS-51的串行口
电脑的通信接口十分有用,除了可以做基本数据的传送、遥控系统的设计外,还可以完成特殊硬件扩充的连接工作,这在做数据收集或自动控制工程应用上均是相当重要的技术。
而8051在通信接口上提供了我们方便且好用的功能,在单片机内部备有串行传输接口,只要外加信号电平转换IC便可完成常用的RS232串行通信传输,可做多台单片机系统的控制,可与PC连接做控制,很多单片机学习机或开发工具(如ICE)均是以此方式来做控制的。
在本章中将说明串行传送的通信原理,及8051串行端口的使用,并以实验来说明串行数据的接收及传送,这些都是一些非常基本的测试程序,可以做多片8051单片机的系统连接控制也可以与PC建立数据间通信。
6.1串行数据传送原理
单片机间通信基本的传送方式可分为2种
1.并行通信;
2.串行通信。
6.1.1并行通信
并行通信数据传送的方式,一次送出或接收一个字节(8个bit),如图6.1所示,通常在单片机的I/O上会接有接口控制芯片,其数据总线可视为是并行传送的一种,只不过是在单片机系统内部运作而己,并未对外做通信。
典型的例子如PC连接的打印机就是使用并行通信的方式,称为Centronics接口。
其中包含有交握式的控制接口,以保证数据传送的正确性。
使用并行数据传送的优点是速度快,适合近距离的传送,对远距离的电脑通信,由于传输线成本增加、电子信号衰减等问题,会考虑使用串行通信的传送技术。
图6.1并行数据传输
6.1.2串行通信
串行通信是以一连串的位形式将数据传送出去或接收进来,在任一瞬间则只传送一个位,如图6.2所示。
数据传送较费时,但却可以降低传输线的硬件成本,特别适合做较长距离的电脑通信。
典型的串行通信传输方式是使用RS232接口,属于一种异步传送格式,使用相当普遍,像是一些激光打印机,较高级的仪器设备如数字示波器、自动测量仪器均会提供此一通信接口,使得与电脑问可以很容易的建立连接,增加整个仪器本身的扩充能力。
而设计RS232通信接口并不困难,在了解了异步串行数据传送的原理后,以单片机8051结合必要的驱动程序便可轻易的做通信控制了。
图6.2串行数据传输
串行通信按同步方式可分为异步通信和同步通信。
1.异步通信
异步通信依靠起始位、停止位保持通信同步。
异步通信数据传送按帧传输,一帧数据包含标记、起始位、数据位、校验位和停止位。
标记:
当串行传输线上不传送数据时,它所处的状态称为标记状态.用以告知对方目前是处于待机闲置的状态下,此信号一直保持在高电位下。
起始位:
在真正传送数据位前,会先送出一个低电位的位,以告知接收端马上就要传送数据出去了,标记一直保持在高电位下,一旦送出起始位低电位后,在这转态的瞬间,接收端与发送端便取得同步。
数据位:
真正传送的数据在起始位送出后,便逐一将位一个一个送出去(位0最先送出)。
数据的长度可以是5到8个位,例如是英文的文字文件,则只要用到7个位传送即可,使用8个位便可以传送文档或任何数据文件。
校验位:
在传送完每一个位数据后,接着送出校验检查位,用来检查数据在传送的过程中是否发生错误,校验位检查可以是奇校验或偶校验。
采用奇校验做检查,表示所有数据位加上校验位后,“1”的总数要为奇数,反之偶校验则是所有数据位加上校验位,“1”的总数应为偶数个。
当然,也可以不使用校验位检查,在数据传送中,少传一个位,可加快传输速度。
停止位:
在一连串的传送位的最后一个位称为停止位,用以表示一个字节的数据已传送完毕。
停止位可以是1个、1.5个或2个。
按照需要而做选择。
很明显的,在串行传输中,加入开始及结束位的主要功能是让收发两端可以随时取得同步,使得数据传输无误。
图6.3为字节6BH经串行传输接口送出时的波形图,传送一个字节共花了11个位宽的传送时间。
除了数据项8位外多加了起始、停止及校验检查位,其中可以看出校验检查是采用奇校验,因为数据项加上校验位,共有5个“1”,奇数个“1”。
至于传送的速度到底多快,这就与波特率(BaudRate)有关。
图6.3串行数据“6BH”传送波形图
2.同步通信
同步通信依靠同步字符保持通信同步。
同步通信是由1~2个同步字符和多字节数据位组成,同步字符作为起始位以触发同步时钟开始发送或接收数据;多字节数据之间不允许有空隙,每位占用的时间相等;空闲位需发送同步字符。
同步通信传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。
6.1.3传偷速率--波特率
每秒钟可以传送几个位的数据称为波特率,其单位是BPS(BitPersecond)。
典型的传输速率有1200、2400、4800和9600BPS,以9600BPS为例,表示每秒可以传送9600位的数据,若传送如图6.3的数据,共花了11个位,以9600除以11可以得到873,表示每秒可以传送873个字节,波特率越高传送时间愈短,至于应采用何种传输率来传送数据,此乃收发双方的事,两方均要一致,便不会有问题。
只要数据传输不出错,越快越好,较常使用的异步串行传输通信协议为(9600,8,N,1),即波特率为960BPS,传送或接收8个数据位,没有校验检查,1个停止位,而起始位一直会存在着。
6.1.4串行通信的制式
串行通信按照数据传送方向可分为三种制式:
1.单工制式(Simplex)
单工制式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。
如图6.4(a)。
2.半双工制式(HalfDuplex)
半双工制式是指通信双方都具有发送器和接收器,既可发送也可接收,但不能同时接收和发送,发送时不能接收,接收时不能发送。
如图6.4(b)。
3.全双工制式(FullDuplex)
全双工制式是指通信双方均设有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收时也能发送。
如图6.4(c)。
(a)单工(b)半双工
(c)全双工
图6.4串行通信的制式
6.2串行口的结构
MCS-5l单片机内部的串行口,有两个物理上独立地接收、发送缓冲器SBUF了,可同时发送、接收数据,发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,两个缓冲器共用一个字节地址(99H)。
发送时,只需将发送数据输入SBUF,CPU将自动启动和完成串行数据的发送;
接收时,CPU将自动把接收到的数据存入SBUF,用户只需从SBUF中读出接收数据。
控制MCS-51单片机串行口的控制寄存器共有两个:
特殊功能寄存器SCON和PCON。
下面对这两个寄存器各个位的功能予以详细介绍。
6.2.1串行口控制寄存器SCON
串行口控制寄存器SCON(字节地址98H)的格式如下表6.1:
表6.1串行口控制寄存器SCON
位
D7
D6
D5
D4
D3
D2
D1
D0
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
位地址
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
SM0、SM1:
串行口工作方式的选择位
MCS-51的串行口有4种工作方式,通过SCON的SM0、SM1位定义,编码和功能如表6.2所示。
表6.2串行口工作方式选择位SM0、SM1
SM0
SM1
方式
功能说明
0
0
0
移位寄存器方式(用于扩展I/O口)
0
1
1
8位UART,波特率可变(T1溢出率/n)
1
0
2
9位UART,波特率为fosc/64或fosc/32)
1
1
3
9位UART,波特率可变(T1溢出率/n)
SM2:
允许方式2和3的多机通讯控制位。
在方式2或3中,如果SM2=l,则允许多机通信,只有当接收到第9位数据RB8=1时,才置位RI;当接收到的RB8=0时,不置位RI(不申请中断)。
若置SM2=0,则不论收到的第9位数据是0还是1,都置位RI,接收到的数据装入SBUF中。
在方式1时,如果SM2=1,则只有收到有效的停止位时才能置位RI。
在方式0时,SM2必须清0。
REN:
允许串行接收位。
由软件置1或清0。
REN=l允许接收,REN=0则禁止接收。
TB8:
是工作在方式2和3时,要发送的第9位数据。
需要时由软件置1或清0。
在许多的通讯协议中该位是奇偶校验位。
在多机通讯中用来表示是地址帧还是数据帧,TB8=1为地址帧,TB8=0为数据帧。
RB8:
当工作在方式2和3时,为接收到的第9位数据。
在多机通讯中为地址帧或数据帧的标识位。
在方式1,如果SM2=0,RB8是接收到的停止位。
在方式0,不使用RB8。
TI:
发送中断标志位,在方式O串行发送第8位数据结束时由硬件置1,或在其它方式串行发送停止位的开始时置1。
TI=1时,申请中断,CPU响应中断后,发送下一帧数据。
TI必须由软件清0。
RI:
接收中断标志位,在方式O串行接收到第8位数据结束时,由硬件置I。
在其它方式中,串行接收到停止位的中间点时置1。
RI=1时申请中断,要求CPU取走数据。
但在方式1中,SM2=1时,若未收到有效的停止位,不会对RI置1。
RI必须由软件清0。
SCON的所有位都能由软件清0。
6.2.2电源控制寄存器PCON
电源控制寄存器PCON没有位寻址功能,字节地址为87H,PCON的格式如下表6.3:
表6.3特殊功能寄存器PCON
位
D7
D6
D5
D4
D3
D2
D1
D0
PCON
SMOD
SMOD:
波特率系数选择位。
6.2.3串行口的工作方式
MCS-51串行通信共有4种工作方式,由串行控制寄存器SCON中SM0、SM1决定。
1.工作方式0(同步移位寄存器工作方式)
串行口的工作方式0为移位寄存器输入输出方式,可外接移位寄存器,以扩展I/O口,也可外接同步输入输出的设备。
1)方式0输出
数据从RXD引脚串行输出,TXD引胸输出移位脉冲。
当一个数据写入串行口发送缓冲器时,串行口即将8位数据以fosc/12的固定波特率从RXD引脚输出,低位在先。
发送完8位数据置“1”中断标志位TI。
2)方式0输入
REN为串行口接收器允许接收控制位,REN=0,禁止接收,REN=l,允许接收。
当串行口置为方式0,并置“l”REN位,串行口处于方式0输人。
引脚RXD为数据输入端,TXD为移位脉冲信号输出端,接收器也以fosc/12的固定波特率采样RXD引脚的数据信息,当接收器接收到8位数据时置“1”中断标志RI。
SCON中的TB8、RB8在方式0中没用,方式0发送或接收完8倍数据由硬件置“1”TI或RI中断标志位,CPU响应TI或RI中断,标志位必须由用户程序清0。
方式0时SM2位(多机通讯控制位)必须为0。
2.工作方式1
SM0、SM1两位为01时,串行口以方式1上作,方式1时串行口被控制为波特率可变的8位异步通讯接口。
1)方式l输出
串行口以方式1输出时,数据位自TXD端输出,发送一帧信息为10位,1位起始位0,8位数据位(先低位)和1位停止位1,CPU执行一条数据写发送缓冲器SBUF的指令,就启动发送。
当发送完数据位,置“1”中断标志TI。
2)方式1输入
串行口以方式1输入时(REN=1,SMO、SM1=01),以所选波特率的16倍的速率采样RXD引脚状态,当采样到RXD端从1到0的跳变时就启动定时器,接收的值是3次采样中至少两次相同的位,以保证可靠无误。
当检测到起始位有效时,开始接收一帧其余的信息。
一帧信息为10位,l位起始位,8位数据位(先低位),1位停止住。
当满足以下两个条件时:
(1)RI=0;
(2)收到的停止位=1或SM2=0时,停止住进入RB8,且置1中断标志RI。
若这两个条件不满足,信息将丢失。
因此,中断标志必须由用户的中断服务程序(或查询程序)清0,通常情况下,串行口以方式1工作时,SM2=0。
3.工作方式2
当SM0、SM1两位为10时,串行口工作于方式2,此时串行口被定义为9位异步通讯接口。
1)方式2输出
发送数据由TXD端输出,发送一帧信息为11位,一位起始位0,8位数据位(先低位),一位可程控为1或0的第9位数据,一位停止位。
附加的第9位数据即SCON中的TB8(SCON中D3位)的值,TB8由软件置l或清0,可以作为多机通讯中的地址或数据的标志位,也可以作为数据的奇偶校验位。
2)方式2输入
SM0、SM1两位为10,且REN=1时,允许串行口以方式2接收数据。
数据由RXD端输入,接收11位信息:
1位起始位0,8位数据位,1值附加的第9位数据,1位停止位1。
当接收器采样到RXD端从1到0的跳变,并判断起始位有效后,便开始接收一帧信息。
在接收器收到第9位数据后,当RI=0且SM2=0或接收到的第9位数据位为1时,接收到的数据送人SBUF(接收缓冲器),第9位数据送人RB8,并置“l”RI。
若不满足这两个条件,接收的信息被丢失。
4.工作方式3
当SM0、SM1两位为11时,串行口被定义工作在方式3。
方式3为波特率可变的9位异步通讯方式,陈了波特率外,方式3和方式2构同。
6.2.4波特率设置
MCS-51串行传输波特率的设定根据不同的操作模式而定,其中方式0及方式2属固定波特率,而方式1及方式3为可变波特率,由计时计数器1加以规划。
1.方式0的波特率
在方式0的操作下,波特率是固定的,为工作振荡频率fosc的1/12。
即
波特率=fosc/12
2.方式2的波特率
在方式2下,串行口的波特率可由PCON中的SMOD位控制;若使SMOD=0,则所选波特率为fosc/64;若使SMOD=1,则波特率为fosc/32,则
波特率=2SMOD/64×fosc
3.方式1和方式3的波特率
在这两种方式下,串行口波特率由定时器T1的溢出率和SMOD值同时决定,相应公式为:
波特率=2SMOD×T1溢出率/32
为确定波特率,关键是要计算出定时器T1的溢出率。
MCS-51系列单片机定时器的定时时间Tc的计算公式为
Tc=(2n-N)×12/fosc
式中,Tc为定时器溢出周期;n为定时器位数;N为时间常数;fosc为振荡频率。
定时器T1的溢出率计算公式为:
T1溢出率=1/Tc=fosc/[12×(2n-N)]
因此,方式1和方式3的波特率计算公式为:
波特率=2SMOD×T1溢出率/32
=2SMOD×fosc/[32×12×(2n-N)]
定时器T1作为波特率发生器可工作于定时器模式0、定时器模式1和定时器模式2。
其中定时器模式2在T1溢出后可自动装入时间常数,避免了重载参数,因而在实际应用中除非波特率很低,一般都采用定时器模式2。
例1:
8051单片机的时钟振荡频率为12MHz,串行通信波特率为4800bps,串行口为工作方式1,选定时器工作模式2,求时间常数:
设SMOD=1,则T1的时间常数为:
4800=21×12×106/[32×12×(28-N)]
N=28-21×12×106/(4800×32×12)
=242.98≈243=0FH
表6.4给出了用定时器T1产生的常用波特率。
表6.4用定时器T1产生的常用波特率
波特率
fosc
SMOD
定时器
C/T
方式
重装载值
方式0:
1MHz
12MHz
×
×
×
×
方式2:
375K
12MHz
1
×
×
×
方式1、3:
62.5K
12MHz
1
0
2
FFH
19.2K
11.0592MHz
1
0
2
FDH
9.6K
11.0592MHz
0
0
2
FDH
4.8K
11.0592MHz
0
0
2
FAH
2.4K
11.0592MHz
0
0
2
F4H
1.2K
11.0592MHz
0
0
2
E8H
137.5
11.0592MHz
0
0
2
1DH
110
6MHz
0
0
2
72H
110
12MHz
0
0
1
FEEBH
4.方式1用定时器2作为波特率发生器
在8051系列的后续型号单片机中,如8052系列单片机,除具有定时器/计数器0、定时器/计数器1外,还具有定时器/计数器2,串行口工作方式1可以使用定时器2作为波特率发生器。
当用定时器2作为波特率发生器时,波特率取决于自身溢出速率,与SMOD位的状态无关。
当计数时钟来自内部(即设置为定时器)时,波特率的计算公式如下:
波特率=fosc/(2×16×(65536-(RCAP2H,RCAP2L))
其中的(RCAP2H,RCAP2L)是定时器/计数器2计时寄存器,具有自动重装载功能。
当计数时钟来自外部(即设置成计数器模式)时,波特率计算公式如下:
波特率=外部时钟频率/(16×(65536-(RCAP2H,RCAP2L))
6.3串行口的编程和应用
6.3.1用8051串行口扩展的矩阵键盘
用户可以对805l单片机串行口重新进行编程以完成自己需要的某种特殊功能。
8051单片机的串行口工作于方式0时,可作为移位寄存器用于扩展I/O接口。
图6.5所示为利用8051串行口扩展的一种矩阵键盘接口电路。
74LS164是串入/并出移位寄存器,它将来自8051串行口线P3.0(RXD)的串行数据转换成8位并行数据,P3.4和P3.6定义为输入口线,从而可实现一个2×8矩阵键盘接口。
下面给以针对图6.5键盘接口的C51驱动程序。
程序由主函数main()、读键盘函数get_char()和和延时函数delay()组成。
主函数将8051串行口初始化为工作方式0,采用查询输入输出,然后调用读键盘函数读入按键的编码值并存入以keybuf为首地址的16个内部RAM单元中。
读键盘函数get_char()判断是否有键压下,有按键时进行键值分析并将按键的键值返回给主调用函数。
延时函数delay()的功能是提供一段延时时间以防止按键抖动对键值分析的影响。
程序清单如下:
#include“reg51.h”
#include“intrins.h”
unsignedcharget_char(void)//函数说明
voiddelay(void);
main()
{
unsignedcharkeybuf[16],count;//键盘缓冲区和读键计数变量
SCON=0;//将串行口设置成工作方式0
ES=0;//禁止串口中断
EA=0;
count=0;
while(count<16)
keybuf[count++]=get_char();//读入16个按键的键值
}
unsignedcharget_char(void)
{
usignedcharkey_code,column=0,mask=0x00;
TI=0;
SBUF=mask;
while(TI==0);//等待发送完毕
while
(1)
{
while((P34&P35)==0);
delay();
if(P34&P35)!
=0)
continue;
else
break;
}
//下列语句分析被按下的键所在的列好
mask=0xfe;
while
(1)
{
TI=0;
SBUF=mask;
while(TI==0);
if((P34&P35)!
=0)
{
mask=_crol_(mask,1);//mask的值循环左移一位
column++;
if(column>=8)
column=0;
continue;
}
else
break;
}
//下列语句分析被按下的键所在的行号并计算键序号
if(P34==0)
key_code=column;
else
key_code=8+column;
return(key_code);
}
voiddelay(void)
{
unsignedinti=10;
while(i--);
}
6.3.2串行口方式1应用编程
使用单片机的串行口主要用于和通用微机的通信、单片机间的通信和主从结构的分布式控制系统机间通信。
串行口通信常使用缓冲区。
单片机和通用微机进行通信要求使用的波特率、传送的位数等相同。
要能够进行数据传送也必须首先测试双方是否可以可靠通信。
这可在微机和单片机上各编制非常短小的程序,具体可分成微机程序口发送接收程序、单片机串行口发送程序和单片机串行口发送接收程序。
这三个程序能运行通过即可证明串行口工作正常。
单片机串行口发送程序,以9600波特、8位数据、1位停止位、无奇偶校验的串行口设置,发送一串字符“KEILC51”,每发送一串字符后延时一段时间重复发送,和微机相接后,微机运行串行口调试程序,显示接收到的字符串,证明单片机串行口发送正常。
程序清单如下:
#include“reg51.h”
#defineucharunsignedchar
#defineuintunsignedint
ucharidatatrdata[10]={‘K’,‘E’,‘I’,‘L’,‘’,‘C’,‘5’,‘1’,0x00};
main()
{
uchari;
uintj;
TOMD=0X20;
//振荡频率11.0592MHz,设置9600波特率的定时器1方式和初始值
TL1=OXFD;TH1=0XFD;
SCON=0XD8;PCON=0X00;
TR1=1;
while
(1)
{
i=0;
while(trdata[i]!
=0x00)//发送字符串
{
SBUF=trdata[i];
while(TI==0);
TI=0;
i++;
}
for(j=0;j<12500;j++);//延时
}
}
单片机串行口发送接收程序,每接收到字节即刻发送出去。
和微机相接后微机键入的字符回显在屏幕上,此程序证明单片机串行口发送接收都正常。
可先用此程序测试,若不正常再使用单独的发送程序测试以判断是单片机串行口发送还是接收不正常。
程序清单如下:
#include“reg51.h”
#defineucharunsignedchar
#defineuintunsignedint
main()
{
uchara;
TOMD=0X20;
//振荡频率11.0592MHz,设置9600波特率的定时器1方式和初始值
TL1=OXFD;TH1=0XFD;
SCON=0XD8;PCON=0X00;
TR1=1;
while
(1)
{
while(RI==0);//等待接收字符串
{
RI=0;
a=SBUF;//接收到字节,立即发送出去
SBUF=a;
while(TI==0);
TI=0;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毛泽东思想和中国特色社会主义理论体系概 第六章 毛泽东思想 中国特色社会主义 理论体系 第六