51單片機使用74LS165實現併入串出(中斷和輪詢方法)

74LS165簡介

這裏寫圖片描述
主要引腳介紹:
SO:串行數據輸出端
QH:反相串行數據輸出端
D0~D7:並行數據輸入端
CLK:時鐘輸入端(需要接時鐘源,51單片機串口工作在方式0時接TXD(P3.1口))
INH:時鐘禁止端(高電平有效,使用時設爲低電平)
SH/LD :移位與置位控制端
SI:串行輸入端(用於拓展多個74LS165)

使用方式
74LS165芯片上電後,首先設置SH/LD端爲低電平,此時芯片將D0~D7腳上的高低電平數據存入芯片內寄存器Q0~Q7,然後設置SH/LD端爲高電平,此時芯片將寄存器內數據通過SO串行發送(QH也會發送反相數據)。

實驗電路

這裏寫圖片描述

C語言代碼

輪詢寫法:

#include<AT89X52.h>

#define LED P0
#define DATEGET P2_5      //對應74LS165數據載入位 SH/LD

void DelayMS(unsigned int Time)          //延時函數
{
    unsigned char Temp;
    while(Time--)
    {
        for(Temp = 0;Temp <= 160;Temp++);
    }
}

void Init()     //初始化函數
{
    SCON = 0x10; 
}

void main()
{
    Init();         //初始化
    while(1)
    {
    DATEGET = 0;            //數據載入位設爲低電平開始讀取按鍵輸入
    DelayMS(20);            //延時一段時間確保讀取完成
    DATEGET = 1;            //數據載入位設爲高電平將數據寫入串口寄存器
    while(!RI);             //等待直到寄存器接收完成
    LED = SBUF;             //使用寄存器數據驅動LED燈
    RI = 0;                 //允許串口接收下一組數據
    DelayMS(20);            //延時一段時間等待按鍵輸入
    }
}

中斷寫法:

#include<AT89X52.h>

#define LED P0
#define DATEGET P2_5      //對應74LS165數據載入位 SH/LD

void DelayMS(unsigned int Time)          //延時函數
{
    unsigned char Temp;
    while(Time--)
    {
        for(Temp = 0;Temp <= 160;Temp++);
    }
}

void Init()     //初始化函數
{
    SCON = 0x10;
    EA = 1;
    ES = 1;
}

void DateGet() interrupt 4          //串口數據接收完成中斷
{
    DATEGET = 0;        //數據載入位設爲低電平,將按鍵數據存入74LS165寄存器
    DelayMS(50);        //延時一會等待存入完成

    LED = SBUF;     //變更LED端口

    DATEGET = 1;        //數據載入位設爲高電平,將74LS165寄存器數據寫入串口寄存器

    /*一定要在串口復位前將數據載入位設爲高電平,使得在串口開始接收前發送74LS165寄存器內數據
       如果先進行串口復位,串口寄存器因爲通訊線路上無信號導致串口寄存器全部被寫0,
       寄存器誤以爲數據接收完成使得RI位置1,無法接收數據載入位設爲高電平時發送的數據*/

    RI = 0;         //復位串口開始接收74LS165寄存器數據

    /*跳出中斷,執行主函數中while(!RI)等待數據接收完成*/
}

void main()     //主函數
{
    /*開始進行第一次初始化接收*/
    Init(); //執行初始化
    DATEGET = 1;        //數據載入位設爲高電平,將74LS165寄存器初始數據寫入串口寄存器
    /*等待結束進行第一次初始化接收後轉入中斷*/

    while(1)
    {
        while(!RI);     //等待串口寄存器接收完成
        /*接收完成後進入中斷*/   
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章