新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 帶大量I/O口擴展的串行芯片GM8164及其應用

        帶大量I/O口擴展的串行芯片GM8164及其應用

        作者: 時間:2016-12-02 來源:網絡 收藏


        (2)并行輸入、串行輸出工作方式

        當LE=0、OC二0時,若I/O為"1",則并行置數,此時并行數據從10-I31輸入至內部寄存器。若將I/0置"0"并斷開輸入端,那么在CPU輸出指令時鐘CLK上升沿的作用下,內部寄存器中的數據將從串行數據輸出端DOUTA、DOUTB或DOUTC輸出。

        (3)級聯工作方式

        GM8164JN芯片有三個串行數據輸出端DOU-TA、DOUTB、DOUTC,它們分別為內部16位、32位、40位移位寄存器O15、O31、O39(O37)所對應的內部寄存器。當用戶系統所需要的輸入輸出口數量較少時(如分別少于16個),可以只使用10-I15、O0-O15,此時DOUTA則可作為串行數據輸出端。而當系統需要的I/0口數量很多時,則可通過DOUTC再級聯一片GM8164芯片,以擴展I/O數量。

        GM8164在使用時應注意以下幾點。

        ●并行輸出口受輸出允許控制端OC和輸出鎖存控制端LE的控制,當OC=1時,輸出O0-O39為高阻態禁止并行數據輸出,但此時器件的串行輸入、并行置數及串行輸出功能不受影響。當OC=0時,若LE=1,則在O0-O39輸出數據,而LE=0時,則將O0-O39的數據鎖存。
        ●當進行輸出口控制時,無論改變多少個輸出口的狀態(即使是一位),也必須把所有的輸出口狀態按照一定的順序重新輸出一次,且當所有輸出口都應置成所需的狀態后,方能置鎖存端為"1",然后再置"O"鎖存。
        ●由于O0-O7為OC門輸出結構,可驅動電壓較高的非TTL型負載(電壓不得超過15V),因此當O0-O7用于普通輸出口時,應外接上拉電阻。
        ●讀入輸入口狀態時,不能打開鎖存端,需要讀入的次數由輸入端所處的位置決定,而不一 定要把所有的輸入口狀態都讀入到CPU。
        ●當用戶系統輸入口數量在16個以下而又使用DOUTB及DOUTC做輸出口時,會出現2個(DOUTB端)或3個字節(DOUNTC端)的無效數據;當用戶的輸入端口數目在32個以下時,DOUTC端會產生一個字節的無效數據,而且在多片級聯時也會產生無效數據,因此在軟件編程時應將無效數據舍棄。

        4 應用

        GM8164非常適合于非總線單片機擴展I/O接口使用,這里以AT89C2051單片機為例來說明GM8164的具體應用電路。AT89C2051與GM8164的硬件連接電路如圖3所示。


        GM8164適合與單片機的UART相連,也可用I/O口線來模擬UART。為了提高數據傳送速度,本設計使用了單片機的異步串行口,并使之工作于方式0(即移位寄存器方式),此時波特率為fosc/12,如采用12MHz晶振,則GM8164的fcLK=1MHz,完全可滿足GM8164對時鐘頻率的要求。為了不影響單片機的串口通信功能,電路中使用了一片74HC4052雙4 選一模擬開關來實現串行通信、輸出口控制和并口數據輸入的功能切換,并使用AT89C2051的P1.0、P1.1口實現A、B通道的選擇。當P1.1P1.0=00時選擇串行輸入/并行輸出;P1.1P1.0=01時選擇并行輸入/串行輸出;P1.1P1.0=10時為串口通信功能;P1.1P1.0=11時禁止所有功能,同時使用單片機的P1.2-P1.4口來分別作為I/O控制、鎖存控制 和高阻輸出控制口。

        以下給出串行輸入/并行輸出方式和并行輸入/串行輸出工作方式的子程序,本程序假設使用了全部32個輸入口和40個輸出口,并用DOUTC端輸出串行數據,開關量輸入緩沖區設在具有位尋址功能的20-23H,開關量輸出緩沖區設在24-28H,并使用串口工作方式0。發送和接收數據采用等待查詢方式。具體程序如下:

        ;位定義
        A BIT P1.0 ;4052通道選擇低位
        B BIT P1.1 ;4052通道選擇高位
        I/O BIT P1.2 ;I/O控制
        LE BIT P1.3 ;LE鎖存控制
        OC BIT P1.4 ;OC高阻控制
        ;并行輸入/串行輸出子程序
        INPUT:MOV R0,#20H;設置開關量輸入緩沖區指針
        MOV R1,#04H ;設置開關量輸入位數
        SETB A ;選擇開關量
        CLR B ;輸入功能
        CLR LE
        CLR OC
        SETB I/O ;并行置數
        CLR I/O ;I0-I31高阻態
        RCV 1:CLR RI ;清接收結束標志
        MOV SCON ,#10H ;設串口工作方式0,
        并啟動接收
        WAIT 1:JNB RI,WAIT 1 ;未接收完等待
        MOV A,SBUF ;將串行開關量數據送入A中
        MOV @ R0 ,A ; 開關數據送開關量輸入緩沖區

        INC R0 ;指向下一緩沖區
        DJNZ R1,RCV 1 ;未接收完則繼續接收
        RET ;返回
        ;串行輸入/并行輸出子程序
        ;將輸出口要求的開關狀態由輸出量緩沖區輸出
        OUTPUT:MOV R0,#24H ;設置開關量輸出緩沖區指針

        MOV R1,#05H ;設置開關量輸出位數
        CLR A ;選擇開關輸出功能
        CLR B
        CLR OC
        SETB LE ;允許輸出數據
        CLR I/O
        MOV SCON,#00H;設串行口工作方式0
        LOOP: MOV A,@ R0 ;取開關量數據
        CLRTI;清發送結束標志
        MOV SBUF,A ;發送數據
        WAIT2 JNB TI,WAIT 2 ;未發送完等待
        INC R0 ;指向下一緩沖區
        DJNZ R1,LOOP ;未發送完則繼續發送
        CLK LE ;鎖存O0-O39狀態
        RET ;返回

        開關量輸入緩沖區20H~23H中的每一位與輸人口引腳10-I31一一對應。開關量輸出緩沖區24H~28H中的每一位和輸出口引腳O0~O39--一對應,緩沖區長度可根據使用的I/O口數量進行設置,輸人口的狀態可用位判別指令或字節判別指令來判斷,輸出口狀態可用更新對應口線輸出緩沖區字節內容的方法實現并口數據輸出或用置位/復位指令來實現位控輸出,限于篇幅,在這里就不詳述了。

        5 結束語

        GM8164串行I/O擴展芯片具有擴展I/O數量多,占用單片機硬件資源較少,接口電路及接口時序簡單,數據傳送速度快的特點,因而是一種較理想的開關量擴展芯片。

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 清涧县| 睢宁县| 广丰县| 阿坝县| 惠州市| 马边| 通州市| 洛隆县| 页游| 扬中市| 同江市| 秭归县| 巫山县| 乐山市| 乐安县| 清远市| 驻马店市| 郁南县| 和龙市| 宜昌市| 东乌珠穆沁旗| 平利县| 三台县| 大新县| 兴化市| 江达县| 象山县| 子长县| 沾化县| 哈巴河县| 固始县| 永寿县| 奈曼旗| 凌云县| 锡林郭勒盟| 修武县| 盱眙县| 隆子县| 改则县| 牟定县| 小金县|