独闷闷网

 找回密码
 立即注册
搜索
查看: 1736|回复: 0
收起左侧

[原创] 通过74HC595告诉你所有外围芯片驱动程序的秘密。

[复制链接]
发表于 2014-10-11 09:41:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
曹健-江苏:
鸿哥,能不能讲解一下595的时序图?  我看不懂.

鸿哥--深圳:
对于595,你首先要有一个感性的认识.它是三根信号线控制,一个时钟线,一个数据线,一个刷新线。

曹健-江苏:
我想问的就是这三根线如何通过时序控制,这个看不懂.

鸿哥--深圳:
时钟线和信号线负责串行把数据输入到内部的寄存器,输入结束后,通过刷新线一个产生一个脉冲就把寄存器里面的数据更新锁存到外部引脚上。另外,74HC595还有一个是引脚是Q7',这个引脚是直接反应内部寄存器那个字节数据的最高位第7位的状态,是为了方便多个74HC595芯片联级使用的。

曹健-江苏:
595时序图.jpg

鸿哥--深圳:
不用看这个时序图。记住我上面那段话就够了。

曹健-江苏:
不需要了解他们之间的管脚时间差吗?

鸿哥--深圳:
不需要。

曹健-江苏:
OK。那其他的芯片比如DS18B20,比如液晶屏是不是都不需要看时序图?

鸿哥--深圳:
时序图只是一个参考,大概了解一下就可以了,一般情况下,你只要明白串行通信和并行通信的规律就几乎理解了所有芯片的时序图。因为世界上的时序图就这两种。

曹健-江苏:
这句话有点抽象,我要消化一下。谢谢鸿哥。

鸿哥--深圳:
你首先要有一个串行通讯和并行通讯的感性认识,每个芯片的时序图虽然有差异,但是都是一些局部的差异。而且大部分的芯片都有现成的参考驱动程序,很少需要你看着时序图一步一步来调试的。
比如,我在595中的驱动函数里有这么一段代码:
  for(i=0;i<8;i++)
   {
         if(ucTempData>=0x80)hc595_ds_dr=1;
         else hc595_ds_dr=0;

         hc595_sh_dr=0;     //SH引脚的上升沿把数据送入寄存器
         delay_short(15);
         hc595_sh_dr=1;
         delay_short(15);

         ucTempData=ucTempData<<1;
   }
类似这样的代码结构在串行通讯时几乎都是一样的,可能各个芯片的上升沿有效或者下降沿有效会有点不一样,以及延时不一样,但是程序结构几乎一摸一样。这段代码就是把一个字节中的8位通过一根数据线和一个时钟线通过8个时钟节拍发数据发送出去。

曹健-江苏:
我懂你意思了。这段代码我先消化一下,如果理解不了我先背下来,以后慢慢消化。谢谢你,鸿哥。

糖风——惠州:
if(ucTempData>=0x80)这个语句是为了让数据低位到高位传输?是怎么和0x80
比较的??满足条件是只能ucTempdata=0x80吗??

鸿哥--深圳:
是判断最高位是1还是0。目的是让数据从高位开始先传。这种判断是很常用的。只要是大于或者等于0x80,那么一个字节的数据最高位肯定是1,否则就是0。




乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2020-12-6 06:44 , Processed in 0.145981 second(s), 21 queries .

快速回复 返回顶部 返回列表