- UID
- 189409
- 性别
- 男
- 来自
- 北京
|
AT89C2051单片机内有一个串行I/O端口,通过引脚RXD[P3.0]和TXD[P3.1]可与外部电路进行全双工的串行异步通信,发送数据时由TXD端送出,接收时数据由RXD端输入。串口有四种工作方式,通过编程设置,可以使其工作在任一方式以满足不同的场合。其中,方式0是8位移位寄存器输入/输出方式,多用与外接移位寄存器以扩展I/O端口。串口的工作方式可以参看相关的书籍,此处不做详细介绍。方式 0的输出是8位串行数据,通过移位寄存器可将8位串行数据变成8位并行数据输出,也可以将外部的8位并行数据变成8位串行数据输入。因此外接一个移位寄存器就可扩展一个8位的并行输入/输出接口,如果想多扩展几个并口就需要在外部级连几个移位寄存器。但是这种扩展也不是无限的,因为串口的数据是一位一位串行输入/输出的。如果外接的移位寄存器比较多的话那么是必影响数据输入/输出的速度。
串口外接的移位寄存器有两种,一种是“串行输入/并行输出移位寄存器”(如:741一S164),另一种是“并行输入/串行输出”移位寄存器(如: 74LS165)。通过寄存器的名称就可以看出“串行输入/并行输出移位寄存器”是用于串口扩展并行输出接口,“并行输入/串行输出”是用于串口扩展并行输入接口。
图1(a)是串行输入/并行输出移位寄存器74LS164的管脚排列图。其功能表见表1所示。74LS164有两个串行数据A、B输入端,使用时一般把它们连在一起;丽为清零输入端,低电平有效,当该端加入低电平时,寄存器输出Q0~Q7全为低电平。在正常情况下,清零输入端接高电平,当CP信号上升沿到来时,数据从A、B端输入并右移一位; Q0~Q7为并行数据输出端,同时Q7端也是串行数据输出端,对于串行输入的数据,最先输入的从Q7输出,最后进入的从Q0输出。CP为移位脉冲。
图1(b)是另一种常用的“并行(串行)输入/串行输出”移位寄存器74LS165的管脚排列图。该器件的功能表见表2。该器件能在一个信号的控制下并行置入一个8位数据,然后在时钟脉冲的作用下逐位移出,也能使数据从另外一个引脚串行输入。在图1(b)中,DO~D7是并行数据输入端。S/L端是控制信号输入端,当为高电平时,具有移位功能;当为低电平时,将DO~D7端的数据置入到内部的移位寄存器保存。CP端为时钟(即移位脉冲)输入端,当S/L= 1时,CP端的每一次正跳变,都会使已存入内部的数据DO~D7从Q7端移出一位,移位的顺序是D7最先从Q7端移出,Q0最后从Q7端移出。CI端为时钟脉冲禁止端,当该端为低电平时,时钟信号(移位脉冲)不能进入,正常工作时必须接高电平。S1为串行数据输入端,在S/L=1时,SI端的数据在CP脉冲上升沿作用下置入Q0,因此,当CP脉冲上升沿到来时内部的数据DO~D7从Q7端移出一位同时外部数据通过SI移入一位,当经过8次CP上升沿后 DO~D7这8个数据就全部通过Q7输出,而内部的DO~D7全部更新为通过SI的输入的信号。例如:如果SI外接电源电压,那么当CP上升沿到来时,Q7会移出一位数据,而S1会移入一个“1”,当经过8个上升沿后,原先置入的DO~D7全被移出,内部的Q0~Q7全被更新为 “1”。如果CP上升沿再次到来时,输出的就是“1”。因此当8个输入数据都通过Q7输出后,如果还想输入就再次必须置入新的数据。
通过对两种移位寄存器的分析可以得出。通过串口扩展单片机的I/O口的具体电路如图2所示:
图2(a)是通过串口扩展的并行输出接口。RXD作为数据输出线,TXD作为移位时钟脉冲。每一个时钟信号的上升沿加到74LS164的CP端时,移位寄存器将串口输出的数据移入一位,8个时钟脉冲过后串口输出的8位二进制数全部移入74LS164,通过Q0-Q7并行输出。 |
|