在方式0下,串行口是作为同步移位寄存器使用。这时以RXD(P3.0)端作为数据移位的入口和出口,而由TXD(P3.1)端提供移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后。其帧格式为:
.... |
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
...... |
使用方式0实现数据的移位输入输出时,实际上是把串行口变成并行口使用。
串行口作为并行输出口使用时,要和CD4049或74LS164配合使用,其电路连接如图10。
图(b)为74LS164的引脚图,芯片各引脚功能如下:
Q0~Q7为并行输出引脚。
DSA、DSB为 串行输入引脚。
清零引脚,低电平时,使74LS164输出清零。
CP为时钟脉冲输入引脚,在CP脉冲的上升沿作用下实现移位。在CP=0, =1时,74LS164保持原来数据状态不变。
利用串行口与74LS164实现八位串入并行输出的连接如图(a)所示,当8位数据全部移出后,SCON寄存器的TI位被自动置1。用P1.0输出低电平可将164输出清零。
如果把能实现“并入串出”功能的CD4014或74LS165与串行口配合使用,就可以把串行口变为并行输入口使用。如图所示。
图(b)为74LS165引脚图,当=1时,允许串行移位, =0时允许并行输入。当CPINH=1时,从CP引脚输入的每一个正脉冲使QH输出移位一次。REN=0,
并行输入
禁止接收;REN=1,允许接收。当软件置位REN时,即开始从RXD端以fosc/12波特率输入数据(低位在前),当接收到8位数据时,置位中断标志RI,在中断处理程序中将REN清零停止接收数据,并用P1.0引脚将清零,停止串行输出,转而并行输入。当SBUF中的数据取走后,再将REN置1准备接收数据,并用用P1.0将 置1,停止并行输入,转串行输出。
(2)波特率
方式0时,移位操作的波特率是固定的,波特率=fosc/12。
(3) 应用举例
例1 使用74LS164的并行输出端接8支发光二极管,利用它的串入并出功能,把发光二极管从右向左依次点亮,并反复循环之。
假定发光二极管为共阴极型,则电路连接如图所示。
当串行口把8位状态码串行移位输出后,TI置1。如把TI作为状态查询标志,则使用查询方法完成的参考程序如下:
注意:串行口先移出最低位D0,而74LS164通过同步脉冲移到Q0,随着8个字节的逐步移出,D0位通过8个同步脉冲移到Q7。
此外,串行口并行I/O扩展功能还常用于LED显示器接口电路。
2.串行工作方式1
方式1是10位为一帧的异步串行通信方式。共包括1个起始位,8个数据位和1个停止位。其帧格式为:
起始位<?XML:NAMESPACE PREFIX = O /> |
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
停止 |
方式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的计数溢出来决定,其公式为: 其中
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.串行口四种工作方式的比较
四种工作方式的区别主要表现在帧格式及波特率两个方面。见表1。
表1 四种工作方式--帧格式及波特率
在串行通信中,收发双方对发送或接收的速率要有约定。通过软件可对单片机串行接口编程。
在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行接口波特率以及各参数的关系如表2所示。
表2 常用波特率与定时器1的关系位置
在使用串行口前,应对其进行初始化,主要是设置产生波特率的定时器1、串行接口控制和中断控制。具体步骤如下:
①确定T1的工作方式(编程TMOD寄存器);
②计算T1的初值,装载TH1、TL1;
③启动T1(编程TCON中的TR1位);
④确定串行接口控制(编程SCON寄存器);
⑤串行接口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
表3 常用波特率与定时器1的关系位置
在使用串行口前,应对其进行初始化,主要是设置产生波特率的定时器1、串行接口控制和中断控制。具体步骤如下:
①确定T1的工作方式(编程TMOD寄存器);
②计算T1的初值,装载TH1、TL1;
③启动T1(编程TCON中的TR1位);
④确定串行接口控制(编程SCON寄存器);
⑤串行接口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。