设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4549|回复: 2

读芯片手册及595串行实例全解

[复制链接]

签到天数: 63 天

[LV.6]常住居民II

发表于 2013-11-29 15:29:37 | 显示全部楼层 |阅读模式
读芯片手册及595串行实例全解
小伙伴们,是不是在刚接触芯片的时候感觉很吃力呢,多数的芯片手册都是英文的,是不是感动很无力呢。这篇文章将以74HC595为例,讲解手册的阅读方式,主要是时序图的解读,以及595应用实例。
1  595手册
打开手册,我们将知道一个芯片的特征、用途、整体描述、参考数据(控制信号的大小),真值表和时序图(这两个很重要),其他的内容多数为在不同环境中的测试数据。
74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。
QQ截图20131129092122.png

图1  引脚配置结构图
74595的数据端:
QA—QH:八位并行输出端,可以直接控制数码管的8个段。
QH’:级联输出端。将它接下一个595的SER端。
SER:串行数据输入端。
74595的控制端说明:
SCK(11脚):上升沿时数据寄存器的数据移位。移位方向QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)
RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
/SCL(10脚):低电平时将移位寄存器的数据清零。通常将它接Vcc。
/G(13脚):高电平时禁止输出(高阻态)。通常我将它接GND。

QQ截图20131129090200.png

2  时序图



每个引脚的功能我们清楚了,现在我们来学习如何看时序图。时序图中我们可以看出,SCK和RCK的上升沿是不同时刻的(先接收,再输出),我们可以看到串行数据输入端SER为高电平时,SCK有上升沿(此时/SCL为高电平,/G为低电平),这时移位寄存器的第一位被写1,也就在这时QH’脚输出,输出的值为移位寄存器的第8位,这时的值为0,见时序图。在接收到RCK第一个上升沿时,将移位寄存器中的值赋值给锁存寄存器,并并行输出,QA输出的是锁存寄存器的第一位,QB输出的是锁存寄存器的第二位,······
SCK的第三个上升沿时,SER为低电平,移位寄存器向左移一位,并将接收到的值写入移位寄存器的第一位,此时移位寄存器的存储的值为0000 0010。在RCK的第二个上升沿到来时,并行输出为0000 0010。
当SCK 的第九个上升沿时,SER为低电平,移位寄存器向左移一位(向高位),并将接收到的值写入移位寄存器的第一位,这时1已被移到移位寄存器的第8位,这时移位寄存器中的值为1000 0000,QH’输出为1。在RCK的第八个上升沿到来时,并行输出QH的输出为1,其他并行引脚输出为0。
当/G为1时,输出为高组态。
2  595串行
按照电路图连接线路。接线图中,我绿灯代表的是QA端,用以区别其他端口。

595.png

图3  电路原理图

写入如下程序:
  1.                        num1=0x88;
  2.                         for(j=0;j<8;j++) //串行数据输入
  3.                         {
  4.                                 if(num1&0x80) //因为移位寄存器是低位向高位移。
  5.                                         SER0=1;          // SER串行输入端口
  6.                                 else
  7.                                         SER0=0;
  8.                                 
  9.                                 SCK0=0;                  //上升沿,输入到移位寄存器
  10.                                 delay_us(1);               
  11.                                 SCK0=1;               
  12.                                 num1<<=1;
  13.                         }
  14.                           num0=0x11;                 
  15.                         for(j=0;j<8;j++) //串行数据输入
  16.                         {
  17.                                 if(num0&0x80)
  18.                                         SER0=1;          // SER串行输入端口
  19.                                 else
  20.                                         SER0=0;
  21.                                 
  22.                                 SCK0=0;                  //上升沿,输入到移位寄存器
  23.                                 delay_us(1);               
  24.                                 SCK0=1;               
  25.                                 num0<<=1;
  26.                         }
  27.                         RCK0=1;               
  28.                         delay_ms(500);
复制代码
num1数据写入编号为1的595,num0数据写入编号为0的595

        下载测试
IMAG0110.jpg


图4  测试结果

        595是一个串行输出,并行输出的寄存器,用在点阵中,只要3个控制引脚,就可以对一整块的点阵进行控制,解决单片机端口不够用问题。

签到天数: 63 天

[LV.6]常住居民II

 楼主| 发表于 2013-11-29 15:44:39 | 显示全部楼层
帖中如有不当之处,笑接轰炸
回复 支持 反对

使用道具 举报

签到天数: 4 天

[LV.2]偶尔看看I

发表于 6 天前 | 显示全部楼层
还是蛮不错的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2017-3-2 04:42 , Processed in 0.380819 second(s), 32 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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