找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8482|回復(fù): 0
收起左側(cè)

移位寄存器的串行擴(kuò)展(74hc164)

[復(fù)制鏈接]
ID:128229 發(fā)表于 2016-6-27 01:57 | 顯示全部樓層 |閱讀模式
1. 74HC164
74HC164是比較典型的移位寄存器,該移位寄存器有一個(gè)數(shù)據(jù)輸入端口、一個(gè)時(shí)鐘信號(hào)端口和八個(gè)輸出端口。如圖1所示。


    當(dāng)時(shí)鐘信號(hào)從低電平變?yōu)楦唠娖降臅r(shí)候?qū)⑤敵鲆粋(gè)數(shù)據(jù)到輸出端D0,當(dāng)時(shí)鐘第二次由低電平變?yōu)楦唠娖降臅r(shí)候?qū)⑤敵龅诙䝼(gè)數(shù)據(jù)到D0,而第一個(gè)數(shù)據(jù)將轉(zhuǎn)移到D1端口。依此類推,每一個(gè)時(shí)鐘周期中都有一個(gè)串行數(shù)據(jù)輸出到D0,而其他的數(shù)據(jù)則不斷往高位移動(dòng)直到所有數(shù)據(jù)傳輸結(jié)束。如果不再有時(shí)鐘周期輸入,則這些數(shù)據(jù)將暫存在輸出端。
注意:初學(xué)者會(huì)誤以為看到移位的過程,由于移位的時(shí)間很短,幾微秒的時(shí)間人的眼睛是反應(yīng)不過來的。
如果需要有更多的輸出端口,可以把多個(gè)74HC164串聯(lián)起來用。串聯(lián)的方法如圖2所示。


在上圖的串聯(lián)電路中,左邊的鎖存器D7與右邊鎖存器的串行數(shù)據(jù)輸入端連接,當(dāng)左邊的鎖存器D0~D7數(shù)據(jù)全部輸出以后,再輸入一個(gè)串行信號(hào),左邊鎖存器D7數(shù)據(jù)將作為右邊鎖存器的輸入數(shù)據(jù)并從右邊鎖存器D0端輸出,從而實(shí)現(xiàn)了多個(gè)字節(jié)數(shù)據(jù)的移位鎖存。這樣利用74HC164就實(shí)現(xiàn)了串行數(shù)據(jù)到并行數(shù)據(jù)的轉(zhuǎn)換。
注意到在上面的兩個(gè)圖中,無論輸出什么長度的數(shù)據(jù),所需要的輸入信號(hào)都只有兩個(gè),一個(gè)是串行數(shù)據(jù)輸入,另一個(gè)是鎖存器的時(shí)鐘信號(hào)輸入。如果我們把這兩個(gè)輸入端口連接到單片機(jī)的兩個(gè)輸出端口上,其中單片機(jī)的一個(gè)端口串行輸出數(shù)據(jù),另一個(gè)端口輸出時(shí)鐘信號(hào)以便控制串行數(shù)據(jù)的鎖存方式,那么我們就只需要兩個(gè)單片機(jī)端口幾乎實(shí)現(xiàn)任意數(shù)量的并口輸出。
2. 8051串口方式0的工作原理與時(shí)序


圖3 串口方式0的時(shí)序
8051串口方式0的時(shí)序如圖所示,RXD(P3.0)為數(shù)據(jù)端,TXD(P3.1)為同步移位脈沖端,每次串行發(fā)送、接收8位數(shù)據(jù)(一幀),低位在先。時(shí)鐘為Fosc/12。
(1)       發(fā)送
執(zhí)行任何一條MOV SUBF,#data指令時(shí),啟動(dòng)內(nèi)部串行發(fā)送允許,SEND置高電平,隨后在TXD同步移位時(shí)鐘的作用下,將數(shù)據(jù)data從RXD端移位輸出。一幀數(shù)據(jù)發(fā)送完畢時(shí),內(nèi)部發(fā)送中斷請(qǐng)求TI有效。要再次發(fā)送一幀時(shí),須用軟件清TI。
(2)       接收
在串行口控制寄存器SCON中,REN=1和RI=0時(shí),會(huì)啟動(dòng)一次接收過程。接收時(shí),TXD仍為同步移位時(shí)鐘輸出,而串行移位數(shù)據(jù)仍從RXD移位輸入。當(dāng)接收完一幀后,內(nèi)部接收中斷請(qǐng)求RI有效,要再次接收一幀數(shù)據(jù)時(shí),須用軟件清零。
3. 電路原理
MCS-51單片機(jī)串行口方式0為移位寄存器方式,外接4片74LS164作為4位LED顯示器的靜態(tài)顯示接口,把8031的RXD作為數(shù)據(jù)輸出線,TXD作為移位時(shí)鐘脈沖。74LS164為TTL單向8位移位寄存器,可實(shí)現(xiàn)串行輸入,并行輸出。其中A、B(第1、2腳)為串行數(shù)據(jù)輸入端,2個(gè)引腳按邏輯與運(yùn)算規(guī)律輸入信號(hào),共一個(gè)輸入信號(hào)時(shí)可并接。T(第8腳)為時(shí)鐘輸入端,可連接到串行口的TXD端。每一個(gè)時(shí)鐘信號(hào)的上升沿加到T端時(shí),移位寄存器移一位,8個(gè)時(shí)鐘脈沖過后,8位二進(jìn)制數(shù)全部移入74LS164中。R(第9腳)為復(fù)位端,當(dāng)R=0時(shí),移位寄存器各位復(fù)0,只有當(dāng)R=1時(shí),時(shí)鐘脈沖才起作用。Q1…Q8(第3-6和10-13引腳)并行輸出端分別接LED顯示器的hg···a各段對(duì)應(yīng)的引腳上。在給出了8個(gè)脈沖后,最先進(jìn)入74LS164的第一個(gè)數(shù)據(jù)到達(dá)了最高位,然后再來一個(gè)脈沖會(huì)有什么發(fā)生呢?再來一個(gè)脈沖,第一個(gè)脈沖就會(huì)從最高位移出,搞清了這一點(diǎn),下面讓我們來看電路,4片7LS164首尾相串,而時(shí)鐘端則接在一起,這樣,當(dāng)輸入8個(gè)脈沖時(shí),從單片機(jī)RXD端輸出的數(shù)據(jù)就進(jìn)入到了第一片74LS164中了,而當(dāng)?shù)诙䝼(gè)8個(gè)脈沖到來后,這個(gè)數(shù)據(jù)就進(jìn)入了第二片74LS164,而新的數(shù)據(jù)則進(jìn)入了第一片74LS164,這樣,當(dāng)?shù)?個(gè)8個(gè)脈沖完成后,首次送出的數(shù)據(jù)被送到了最左面的164中。


圖4 整體原理圖
4.源程序
/*************************************************************
利用中斷方式進(jìn)行處理
**************************************************************/
#include<reg51.h>
#define uchar unsigned char
sbit P3_3=P3^3;
uchar a=3;
char code tab[]={0x99,0xB0,0xA4,0xF9,0xF9,0xA4,0xB0,0x99};//4321與1234的字形碼
void timer(uchar);
void int4(void);
void main(void)
{
    uchar i,j;
    SCON=0;
    EA=1;
    ES=1;
    for(;;)
    {
        P3_3=1;
        for(i=0;i<4;i++)
        {
            SBUF=tab[a];
            j=a;
            while(j==a);
        }
        P3_3=0;
        timer(100);
        if(a==255)
            a=7;
    }
}
void int4(void)interrupt 4
{
    TI=0;
    a--;
}
void timer(uchar t)
{
    uchar i;
    for(i=0;i<t;i--)
    {
        TMOD=0x01;
        TH0=10000/256;
        TL0=10000%256;
        TR0=1;
        while(!TF0);
        TF0=0;
    }
}
/*****************************************************************************/


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表