一、概述
74LS164是一个串行输入并行输出的移位寄存器,可用于扩展并行输出口。
数据通过两个输入端(DSA或DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。
时钟(CP)每次由低变高时,数据右移一位,输入到Q0,Q0是两个数据输入端(DSA和DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位(MR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
二、74LS164功能介绍
74LS164为的引脚配置图如图1所示,其引脚说明见表1。采用双列直插封装,逻辑及封装图如图2所示。
图1 74LS164引脚配置图
图2 74LS164逻辑及封装图
表1 74LS164引脚说明
表2为74LS164的真值表,说明如下:
(1)H—高电平,L—低电平 ,X—任意电平,↑—低到高电平跳变。
(2)QA0,QB0,QH0—规定的稳态条件建立前的电平。
(3)QAn,QGn—时钟最近的↑前的电平。
表2 74LS164真值表
通过真值表我们可以了解到,A,B两个输入端是互锁的,Clock上升沿时数据移入移位寄存器中。CLEAR为清零用的,接低电平时所有端口都输出低电平。
三、Proteus电路图设计
图3为74LS164的Proteus仿真电路图,本例在单片机串行口外接一片8位串入并出移位寄存器 74LS164 芯片,构成MCS-51单片机输出接口电路,控制 8只 LED滚动显示。串行数据通过RXD输出,TXD则用于输出移位时钟脉冲。DSA与DSB端接RXD端,时钟输入端接TXD引脚,复位端接高电平。74LS164的Q0-Q7通过限流电阻与8个LED管相连,用来指示输出数据的变化。
图3 74LS164 DIR引脚为1时的仿真电路图
四、程序设计
当SM0、SM1为00时,串行口工作于方式0,串行口本身相当于“并入串出”(发送状态)或“串出并入”(接收状态)的移位寄存器。8位串行数据b0~b7依次从RDX(P3.0)引脚输入或输出,移位脉冲信号来自TXD(P3.1)引脚,输出/输入移位脉冲频率固定为系统时钟频率fosc的12分频,不可改变。
在方式0中,串行口作为输出时,只要向串行缓冲器SBUF 写入一字节数据后,串行端口就把此8位数据以fosc/12的波特率,从RXD引脚逐位输出,从低位到高位;此时,TXD输出频率为fosc/12的同步脉冲。数据发送前,中断标志TI必须清零,8位数据发送完后自动置中断标志TI为1,呈中断请求状态。如果要再发送数据,必须用软件将TI清零。
本文单片机串行口工作于方式0,即移位寄存器输入/输出模式。程序设计由主程序模块、串行通信模块、延时模块组成,主要汇编程序代码如下:
五、仿真过程、效果及总结
(1)打开Keil2,选择ProjectNew Project命令,在弹出的Create New Project对话框中新建Keil项目74LS164.uv2。
(2)选择CPU为ATMEL中的AT89C51单片机。
(3)编辑好源程序,编辑完成后保存。
(4)在Project Workspace窗口中,将74LS164.asm文件加入到Source Group1中。
(5)在Project Workspace窗口中Target1文件夹上单击右键,在弹出的窗口中选择Output选项卡,并选中Create HEX File选项。
(6)在Keil菜单中选择Project Build Target选项,编译汇编程序,并产生HEX文件。
(7)将Keil产生HEX文件加载到Proteus ISIS绘制的硬件电路中。
图4~图6为74LS164在ProteusEDA环境下的单片机控制仿真效果图。
图4 串行输入数据为“00000001”时的仿真效果图
图5 串行输入数据为“00010000”时的仿真效果图
图6 串行输入数据为“10000000”时的仿真效果图
由图可见:编号为D1到D8的LED灯依次被点亮,证明从74LS164移位寄存器串行输入的数据经过存储寄存器并行输出,控制逻辑得到验证。74LS164可用于单向的并行输出/并行地址锁存等。因为其性价比高、容易使用,特别适合使用在在需要用到数码管显示I/O口又比较紧张的电子产品中。