【www.arisingsemi.com--软件制图】

移位
把若干个触发器串接起来,就可以构成一个移位寄存器。由4个边沿D 触发器构成的4位移位寄存器逻辑电路如图8.8.1所示。数据从串行输入端D1输入。左边触发器的输出作为右邻触发器的数据输入。
假设移位寄存器的初始状态为0000,现将数码D3D2D1D0(1101)从高位(D3)至低位依次送到D1端,经过第一个时钟脉冲后,Q0=D3。
由于跟随数码D3后面的数码是D2,则经过第二个时钟脉冲后,触发器FF0的状态移入触发器FF1,而FF0变为新的状态,即Q1=D3,Q0=D2。依此类推,可得4位右向移位寄存器的状态, 如表8.8.1所示。

由表可知,输入数码依次地由低位触发器移到高位触发器,作右向移动。经过4个时钟脉冲后,4个触发器的输出状态Q3Q2Q1Q0与输入数码D3D2D1D0相对应。为了加深理解,在图8.8.2中画出了数码1101(相当于D3=1,D2=1,D1=0 ,D0=1)在寄存器中移位的波形,经过了4个时钟脉冲后,1101出现在寄存器的输出端Q3Q2Q1Q0。
这样,就可将串行输入(从D1端输入)的数码转换为并行输出(从Q

3、Q

2、Q

1、Q0端输出)的数码。这种转换方式特别适用于将接收到的串行输入信号转换为并行输出信号,以便于打印或由计算机处理。


在图8.8.3中还画出了第5到第8个时钟脉冲作用下,输入数码在寄存器中移位的波形(如图8.8.2所示)。由图可见,在第8个时钟脉冲作用后,数码从Q3端已全部移出寄存器。这说明存入该寄存器中的数码也可以从Q端串行输出。根据需要,可用更多的触发器组成多位移位寄存器。

除了用边沿D 触发器外,还可用其他类型的触发器来组成移位寄存器,例如,用主从JK 触发器来组成移位寄存器,其级间连接方式如图8.8.3所示。根据JK触发器的特征方程,由图8.8.3可得:

FF2和FF3的接法与FF1完全相似,所以各JK 触发器均以D 触发器的功能工作,图8.8.3和图8.8.1所示电路具有相同的功能。

双向移位寄存器:
若将图8.8.1所示电路中各触发器间的连接顺序调换一下,让右边触发器的输出作为左邻触发器的数据输入,则可构成左向移位寄存器。若再增添一些控制门,则可构成既能右移(由低位向高位)、又能左移(由高位至低位)的双向移位寄存器。
图8.8.4是双向移位寄存器的一种方案,它是利用边沿D 触发器组成的,每个触发器的数据输入端D 同与或非门组成的转换控制门相连,移位方向取决于移位控制端S的状态。

当S=1时,D0=DSR,D1=Q0,即FF0的D0端与右移串行输入端DSR接通,FF1的D1端与Q0接通,在时钟脉冲CP 作用下,由DSR端输入的数据将作右向移位;反之,当S=0时,D0=Q1 ,D1=Q2,在时钟脉冲CP作用下,Q

2、 Q1的状态将作左向移位。同理,可以分析其他两位触发器间的移位情况。由此可见,图8.8.4所示寄存器可作双向移位。
当S=1时,数据作右向移位;当S=0时,数据作左向移位。可实现串行输入——串行输出(由DOR 或DOL 输出)、串行输入――并行输出工作方式(由Q3~Q0 输出)。
有时要求在移位过程中数据不要丢失,仍然保持在寄存器中。只要将移位寄存器的最高位的输出接至最低位的输入端,或将最低位的输出接至最高位的输入端。
这种移位寄存器称为循环移位寄存器,它也可以作为计数器用,称为环行计数器。
移位寄存器工作原理
移位寄存器不仅能够寄存数码,而且具有移位功能。
移位是数字系统和计算机技术中非常重要的一个功能。如二进制数0101乘以2的运算,可以通过将0101左移一位实现;而除以2的运算则可通过右移一位实现。移位寄存器的种类很多,有左移寄存器、右移寄存器、双向移位寄存器和循环移位寄存器等。图9-14所示是由四个触发器组成的四位左移寄存器。数码从第一个触发器的端串行输入,使用前先用将各触发器清零。
现将数码 1101从高位到低位依次送到端。



图9-14 由触发器组成的四位左移寄存器
表9-6 四位左移寄存器状态表
第一个CP过后,=d3=1,其他触发器输出状态仍为0,即=000,d3= 0001。第二个CP过后,=d2=1,=d3=1,而==0。经过四个CP脉冲后,=d3d2d1d0=1101,存数结束。
各输出端状态如表9-6所示。
如果继续送四个移位脉冲,就可以使寄存的这四位数码1101逐位从端输出,这种取数方式为串行输出方式。直接从 取数为并行输出方式。
74HC164是比较典型的移位寄存器,该移位寄存器有一个数据输入端口、一个时钟信号端口和八个输出端口。如图1所示。

当时钟信号从低电平变为高电平的时候将输出一个数据到输出端D0,当时钟第二次由低电平变为高电平的时候将输出第二个数据到D0,而第一个数据将转移到D1端口。依此类推,每一个时钟周期中都有一个串行数据输出到D0,而其他的数据则不断往高位移动直到所有数据传输结束。
如果不再有时钟周期输入,则这些数据将暂存在输出端。
如果需要有更多的输出端口,可以把多个74HC164串联起来用。串联的方法如图2所示。
在上图的串联电路中,左边的锁存器D7与右边锁存器的串行数据输入端连接,当左边的锁存器D0~D7数据全部输出以后,再输入一个串行信号,左边锁存器D7数据将作为右边锁存器的输入数据并从右边锁存器D0端输出,从而实现了多个字节数据的移位锁存。
这样利用74HC164就实现了串行数据到并行数据的转换。
注意到在上面的两个图中,无论输出什么长度的数据,所需要的输入信号都只有两个,一个是串行数据输入,另一个是锁存器的时钟信号输入。
如果我们把这两个输入端口连接到单片机的两个输出端口上,其中单片机的一个端口串行输出数据,另一个端口输出时钟信号以便控制串行数据的锁存方式,那么我们就只需要两个单片机端口几乎实现任意数量的并口输出。
2. 8051串口方式0的工作原理与时序
图3 串口方式0的时序
8051串口方式0的时序如图所示,RXD(P3.0)为数据端,TXD(P3.1)为同步移位脉冲端,每次串行发送、接收8位数据(一帧),低位在先。
时钟为Fosc/12。



(1)       发送
执行任何一条MOV SUBF,#data指令时,启动内部串行发送允许,SEND置高电平,随后在TXD同步移位时钟的作用下,将数据data从RXD端移位输出。一帧数据发送完毕时,内部发送中断请求TI有效。要再次发送一帧时,须用软件清TI。


(2)       接收
在串行口控制寄存器SCON中,REN=1和RI=0时,会启动一次接收过程。接收时,TXD仍为同步移位时钟输出,而串行移位数据仍从RXD移位输入。
当接收完一帧后,内部接收中断请求RI有效,要再次接收一帧数据时,须用软件清零。
3. 电路原理
MCS-51单片机串行口方式0为移位寄存器方式,外接4片74LS164作为4位LED显示器的静态显示接口,把8031的RXD作为数据输出线,TXD作为移位时钟脉冲。
74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A、B(第

1、2脚)为串行数据输入端,2个引脚按逻辑与运算规律输入信号,共一个输入信号时可并接。
T(第8脚)为时钟输入端,可连接到串行口的TXD端。每一个时钟信号的上升沿加到T端时,移位寄存器移一位,8个时钟脉冲过后,8位二进制数全部移入74LS164中。
R(第9脚)为复位端,当R=0时,移位寄存器各位复0,只有当R=1时,时钟脉冲才起作用。Q1…Q8(第3-6和10-13引脚)并行输出端分别接LED显示器的hg···a各段对应的引脚上。
在给出了8个脉冲后,最先进入74LS164的第一个数据到达了最高位,然后再来一个脉冲会有什么发生呢。再来一个脉冲,第一个脉冲就会从最高位移出,搞清了这一点,下面让我们来看电路,4片7LS164首尾相串,而时钟端则接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到了第一片74LS164中了,而当第二个8个脉冲到来后,这个数据就进入了第二片74LS164,而新的数据则进入了第一片74LS164,这样,当第4个8个脉冲完成后,首次送出的数据被送到了最左面的164中。

图4 整体原理图。

本文来源:http://www.arisingsemi.com/it/55749/