微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 扩展IO口,164,595怎样最节省IO口

扩展IO口,164,595怎样最节省IO口

时间:10-02 整理:3721RD 点击:
最近使用74hc164,做LED指示灯数量的扩展,因为164不带输出控制,所有每一次送八位数据,都会有错误指示,使用595的话带输出控制,但是又要多占一个IO口,我想问下 有没有芯片是,输入8位串行数据后才自动并行输出全部状态,两个IO口就能搞定。

虽然是去年的问题,但还是要回答一下,给后面的人看。
74hc595无非就是在164的基础上加了一个8位锁存器,也因此多了一个锁存信号。但我们可以变相的利用已有的IO去产生这个锁存信号,一个方案是74hc164+74HC573
见图


说明:74HC573是8位的锁存器,LE信号在高电平时允许信号改变,低电平时锁存信号。我们需要造出一个锁存信号,用在LE脚。74HC164的输出只有8位,显然不够,但是MCU到164之间至少有一个数据线,这个数据线再加上164的8位输出,总共有9位输出,573需要8位输入,那多出来的一个输出信号,把它接到573的LE脚,这样当它为0时,573输出内容不变,为1是573输出内容随输入变化。
显然这个多出来的信号不是最高位就是最低位。最低位是拼在164后面的MCU提供的数据线,上面的信号一直在变,不能作LE信号。最高位是164的Q7,它在所有9位中最后一个变化,变换最不频繁的,就用它做LE信号。就成了图中的那样。
单片机在发送8位数据时,要在数据之前先发送一个1,再接着发送数据的高7位,这样最先的那个1在Q7,LE=1,573的输出变化,最后再把MCU提供的数据线变成数据的最低位,但不要给移位时钟,这样573的输出就是你要的8位数据。总的发送数据为:0x100 + Data[7..0],总共送8个移位时钟。
如果要换一个字节,一定要先对164清零,否则LE有可能被前一个数据中的高电平使能,造成输出乱码。
总结:本方案至少需要3个控制信号:数据信号、移位时钟、清零信号。不足的一个地方是:573输出的Q0在短时间内是不稳定的。这个你自己实验一下就知道了。
当然还有其他的方案,例如74HC164 + 74HC573 + 带清零端的4位二进制计数器。计数器计了8个移位时钟后变成"1000",最高位的1接到573的LE脚,这样每输出8位数据,会自动加载到573上,换数据前要记得把计数器清0。
总之方法很多

这个问题简单~~~用74HC164本身即可完成,仔细看数据手册里的/MR端口,剩下的就是写程序了。简单不?

很简单,学习了,,,

666666666666666666666666666

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top