YFROBOT创客社区
标题: 读芯片手册及595串行实例全解 [打印本页]
作者: aosini 时间: 2013-11-29 15:29
标题: 读芯片手册及595串行实例全解
读芯片手册及595串行实例全解小伙伴们,是不是在刚接触芯片的时候感觉很吃力呢,多数的芯片手册都是英文的,是不是感动很无力呢。这篇文章将以74HC595为例,讲解手册的阅读方式,主要是时序图的解读,以及595应用实例。
1 595手册打开手册,我们将知道一个芯片的特征、用途、整体描述、参考数据(控制信号的大小),真值表和时序图(这两个很重要),其他的内容多数为在不同环境中的测试数据。
74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。
[attach]678[/attach]
图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。
[attach]677[/attach]
图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端,用以区别其他端口。
[attach]675[/attach]
图3 电路原理图
写入如下程序:
- num1=0x88;
- for(j=0;j<8;j++) //串行数据输入
- {
- if(num1&0x80) //因为移位寄存器是低位向高位移。
- SER0=1; // SER串行输入端口
- else
- SER0=0;
-
- SCK0=0; //上升沿,输入到移位寄存器
- delay_us(1);
- SCK0=1;
- num1<<=1;
- }
- num0=0x11;
- for(j=0;j<8;j++) //串行数据输入
- {
- if(num0&0x80)
- SER0=1; // SER串行输入端口
- else
- SER0=0;
-
- SCK0=0; //上升沿,输入到移位寄存器
- delay_us(1);
- SCK0=1;
- num0<<=1;
- }
- RCK0=1;
- delay_ms(500);
复制代码num1数据写入编号为1的595,num0数据写入编号为0的595。
下载测试
[attach]676[/attach]
图4 测试结果
595是一个串行输出,并行输出的寄存器,用在点阵中,只要3个控制引脚,就可以对一整块的点阵进行控制,解决单片机端口不够用问题。
作者: aosini 时间: 2013-11-29 15:44
帖中如有不当之处,笑接轰炸
欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) |
Powered by Discuz! X3.1 |