原创 转载:80C51串行接口(有常用波特率和定时器的设置)

2009-9-3 11:42 8222 5 5 分类: MCU/ 嵌入式

http://jpkc.wxit.edu.cn/2008_Dpj/07-3-1.htm


80C51单片机的串口是一个能进行全双工异步通信或同步移位寄存器,具有4种工作方式的可编程接口。其帧格式可为8位、10位或11位,并可以设置多种不同的波特率。通过引脚RXD(P3.0串行数据接收引脚)和引脚TXD(P3.1 串行数据发送引脚)与外界进行通信。



80C51单片机串行口是由发送缓冲寄存器SBUF、发送控制器、发送控制门、接收缓冲寄存器SBUF、接收控制寄存器、移位寄存器和中断等部分组成。


1.SBUF


在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器。具有同一个单元地址99H。在物理上,SBUF有两个,一个是发送寄存器,另一个是接收寄存器。在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器。具有同一个单元地址99H。在物理上,SBUF有两个,一个是发送寄存器,另一个是接收寄存器。


点击看大图


2.控制寄存器


与串行通信有关的控制寄存器共有三个。


(1)串行控制寄存器SCON


SCON是80C51的一个可位寻址的专用寄存器,用于串行数据通信的控制。单元地址98H,位地址9FH-98H。寄存器及位地址表示如下:





位址址



9F



9E



9D



9C



9B



9A



99



98



位符号



SM0



SM1



SM2



REN



TB8



RB8



TI



RI


各位功能说明如下:


①SM0 SM1--- 串行口工作方式选择位


串口4种工作方式不同之处在于其通信协议不同,即帧格式与波特率的不同。4种工作方式与其对应的帧格式与波特率如下:


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客


其中,SMOD为电源控制寄存器PCON 的最高位,f为系统主频,T1溢出率的概念在后文中介绍。


②SM2--- 多机通信控制位


在进行多机通信时,需要用SM2控制从机是准备接收地址还是接收数据。当串行口以方式2或方式3接收时,若SM2=1,则只有当接收到的第九位数据(RB8)为1,才将接收到的前8位地址送入SBUF,并置位RI产生中断请求;否则,将接收到的8位地址丢弃。而当SM2=0时,则不论第九位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断请求。在方式0,1时,SM2必须为0。


③REN--- 允许接收位


REN位用于对串行数据的接收进行控制:


            REN=0    禁止接收


            REN=1    允许接收


            该位由软件置位或复位。


④TB8 --- 发送数据的第9位


在方式2和方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据;TB8=0为数据,TB8=1为地址。该位由软件置位或复位。


⑤RB8--- 接收数据位的第9位数据


在方式2或方式3时,RB8存放接收到的第9位数据,代表着接收的某种特征,故应根据其状态对接收数据进行操作。


⑥TI --- 发送中断标志


当方式0时,发送完第8位数据后,该位由硬件置位。在其它方式下,于发送停止位之前,由硬件置位。因此TI=1,表示帧发送结束,其状态既可供软件查询使用,也可请求中断。TI位由软件清0。


⑦RI --- 接收中断标志


当方式0时,接收完第8位数据后,该位由硬件置位。在其它方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束。其状态既可供软件查询使用,也可以请求中断。RI位由软件清0。


(2)电源控制寄存器PCON


PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器。单元地址为87H。其内容如下:


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客


在HMOS的单片机中,该寄存器中除最高位之外,其它位都是虚设的。最高位(SMOD)是串行口波特率的倍增位,当SMOD=1时串行口波特率加倍。系统复位时,SMOD=0。PCON寄存器不能进行位寻址,因此表中写了“位序”而不是“位地址”。


 


7.2.2 80C51单片机串行通信工作方式



1. 串行工作方式0


在方式0下,串行口是作为同步移位寄存器使用。这时以RXD(P3.0)端作为数据移位的入口和出口,而由TXD(P3.1)端提供移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后。其帧格式为:





....



D0



D1



D2



D3



D4



D5



D6



D7



......


(1)数据发送与接收


使用方式0实现数据的移位输入输出时,实际上是把串行口变成并行口使用。


串行口作为并行输出口使用时,要和CD4049或74LS164配合使用,其电路连接如图10。


图7-12(b)为74LS164的引脚图,芯片各引脚功能如下:


Q0~Q7为并行输出引脚。


DSA、DSB为 串行输入引脚。


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 清零引脚,低电平时,使74LS164输出清零。


CP为时钟脉冲输入引脚,在CP脉冲的上升沿作用下实现移位。在CP=0, 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 =1时,74LS164保持原来数据状态不变。


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客


利用串行口与74LS164实现八位串入并行输出的连接如图7-12(a)所示,当8位数据全部移出后,SCON寄存器的TI位被自动置1。用P1.0输出低电平可将164输出清零。


如果把能实现“并入串出”功能的CD4014或74LS165与串行口配合使用,就可以把串行口变为并行输入口使用。如图11所示。


图713(b)为74LS165引脚图,当 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 =1时,允许串行移位, 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 =0时允许并行输入。当CPINH=1时,从CP引脚输入的每一个正脉冲使QH输出移位一次。REN=0,


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客


 




并行输入


 

禁止接收;REN=1,允许接收。当软件置位REN时,即开始从RXD端以fosc/12波特率输入数据(低位在前),当接收到8位数据时,置位中断标志RI,在中断处理程序中将REN清零停止接收数据,并用P1.0引脚将 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 清零,停止串行输出,转而并行输入。当SBUF中的数据取走后,再将REN置1准备接收数据,并用用P1.0将 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 置1,停止并行输入,转串行输出。


(2)波特率


方式0时,移位操作的波特率是固定的,波特率=fosc/12。


(3) 应用举例


例7-1 使用74LS164的并行输出端接8支发光二极管,利用它的串入并出功能,把发光二极管从右向左依次点亮,并反复循环之。


假定发光二极管为共阴极型,则电路连接如图7-14所示。


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客


当串行口把8位状态码串行移位输出后,TI置1。如把TI作为状态查询标志,则使用查询方法完成的参考程序如下:


7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客


注意:串行口先移出最低位D0,而74LS164通过同步脉冲移到Q0,随着8个字节的逐步移出,D0位通过8个同步脉冲移到Q7。


此外,串行口并行I/O扩展功能还常用于LED显示器接口电路。


2.串行工作方式1


方式1是10位为一帧的异步串行通信方式。共包括1个起始位,8个数据位和1个停止位。其帧格式为:



起始位



D0



D1



D2



D3



D4



D5



D6



D7



停止


(1)数据发送与接收


方式1的数据发送是由一条写发送寄存器(SBUF)指令开始的。随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在移位脉冲的作用下,由TXD端串行输出。一个字符帧发送完后,使TXD输出线维持在“1”(space)状态下,并将SCON寄存器的TI置1,通知CPU可以发送下一个字符。用动画


接收数据时,SCON的REN位应处于允许接收状态(REN=1)。在此前提下,串行口采样RXD端,当采样到从1向0的状态跳变时,就认定是接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后把停止位送入RB8中,并置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。


(2)波特率设定


方式0 的波特率是固定的,一个机器周期进行一次移位。但方式1的波特率是可变的,其波特率由定时器1的计数溢出来决定,其公式为: 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客 其中


smod为PCON寄存器最高位的值,smod=1表示波特率加倍,定时器的工作于方式2。


3.串行工作方式2


方式2是11位一帧的串行通信方式,即1个起始位,9个数据位和1个停止位。


在方式2下,字符还是8个数据位。而第9数据位即可作奇偶校验位使用,也可作控制使用,其功能由用户确定,发送之前应先在SCON中的TB8准备好,再向SBUF写入字符的8个数据位,并以此来启动串行发送。一个字符帧发送完毕后,将TI位置1,其过程与方式1相同。方式2的接收过程也与方式1基本类似,所不同的在于第9数据位上,串行口把接收到的8位数据送入SBUF,而把第9数据位送入RB8。


方式2的波特率是固定的,波特率=2smod╳fosc/64


与PCON寄存器中SMOD位的值有关。


4.串行工作方式3


方式3同样是11位为一帧的串行通信方式(1个起始位,9个数据位和1个停止位)其通信过程与方式2完全相同,所不同的仅在于波特率。而方式3的波特率则可由用户根据需要设定。其设定方式与方式1一样,即通过设置定时器1的初值来设定波特率。


5.串行口四种工作方式的比较


四种工作方式的区别主要表现在帧格式及波特率两个方面。见表7-2。


表7-2 四种工作方式--帧格式及波特率





工作方式



帧 格 式



波 特 率



方式0



8位全是数据位,没有启始位、停止位。



fosc/12



方式1



10位,其中一位起始位,8位数据位,1位停止位。



7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客



方式2



11位,其中一位起始位,9位数据位,1位停止位。



固定,即(2smod/64)*f



方式3



同方式2。



同方式1


在串行通信中,收发双方对发送或接收的速率要有约定。通过软件可对单片机串行接口编程。


在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行接口波特率以及各参数的关系如表7-3所示。


表7-3  常用波特率与定时器1的关系位置





串口工作方式


及波特率(bps)



fosc



Smod



定时器1



C/ 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客



工作方式



初值



方式1、3



62.5k



12



1



0



2



FFH



19.2



11.0592



1



0



2



FDH



9600



11.0592



0



0



2



FDH



4800



11.0592



0



0



2



FAH



2400



11.0592



0



0



2



F4H



1200



11.0592



0



0



2



E8H



在使用串行口前,应对其进行初始化,主要是设置产生波特率的定时器1、串行接口控制和中断控制。具体步骤如下:


①确定T1的工作方式(编程TMOD寄存器);


②计算T1的初值,装载TH1、TL1;


③启动T1(编程TCON中的TR1位);


④确定串行接口控制(编程SCON寄存器);


⑤串行接口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。


表7-3  常用波特率与定时器1的关系位置





串口工作方式


及波特率(bps)



fosc



Smod



定时器1



C/ 7.2  80C51串行接口 - 碧空雄鹰 - 碧空雄鹰的博客



工作方式



初值



方式1、3



62.5k



12



1



0



2



FFH



19.2



11.0592



1



0



2



FDH



9600



11.0592



0



0



2



FDH



4800



11.0592



0



0



2



FAH



2400



11.0592



0



0



2



F4H



1200



11.0592



0



0



2



E8H



在使用串行口前,应对其进行初始化,主要是设置产生波特率的定时器1、串行接口控制和中断控制。具体步骤如下:


①确定T1的工作方式(编程TMOD寄存器);


②计算T1的初值,装载TH1、TL1;


③启动T1(编程TCON中的TR1位);


④确定串行接口控制(编程SCON寄存器);  


⑤串行接口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条