新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > SPI總線讀寫程序-51

        SPI總線讀寫程序-51

        作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
        //-----------------------函數(shù)聲明,變量定義--------------------------------------------------------

        #include
        #include
        sbit SCK=P1^0;// 將p1.0口模擬時鐘輸出
        sbit MOSI=P1^1;// 將p1.1口模擬主機輸出
        sbit MISO=P1^2;// 將p1.1口模擬主機輸入
        sbit SS1=P1^3;// 將p1.1口模擬片選

        本文引用地址:http://www.104case.com/article/201611/321916.htm

        #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

        //--------------------------------------------------------------------------------------------------
        // 函數(shù)名稱: SPISendByte
        // 入口參數(shù): ch
        // 函數(shù)功能: 發(fā)送一個字節(jié)
        //--------------------------------------------------------------------------------------------------
        void SPISendByte(unsigned char ch)
        {
        unsigned char idata n=8;// 向SDA上發(fā)送一位數(shù)據(jù)字節(jié),共八位
        SCK = 1 ;//時鐘置高
        SS1 = 0 ;//選擇從機

        while(n--)
        {
        delayNOP();
        SCK = 0 ;//時鐘置低
        if((ch&0x80) == 0x80)// 若要發(fā)送的數(shù)據(jù)最高位為1則發(fā)送位1
        {
        MOSI = 1;// 傳送位1
        }
        else
        {
        MOSI = 0;// 否則傳送位0
        }
        delayNOP();
        ch = ch<<1;// 數(shù)據(jù)左移一位
        SCK = 1 ;//時鐘置高
        }
        }
        //--------------------------------------------------------------------------------------------------
        // 函數(shù)名稱: SPIreceiveByte
        // 返回接收的數(shù)據(jù)
        // 函數(shù)功能: 接收一字節(jié)子程序
        //--------------------------------------------------------------------------------------------------
        unsigned char SPIreceiveByte()
        {
        unsigned char idata n=8;// 從MISO線上讀取一上數(shù)據(jù)字節(jié),共八位
        unsigned char tdata;
        SCK = 1;//時鐘為高
        SS1 = 0;//選擇從機
        while(n--)
        {
        delayNOP();
        SCK = 0;//時鐘為低
        delayNOP();
        tdata = tdata<<1;// 左移一位,或_crol_(temp,1)
        if(MISO == 1)
        tdata = tdata|0x01;// 若接收到的位為1,則數(shù)據(jù)的最后一位置1
        else
        tdata = tdata&0xfe;// 否則數(shù)據(jù)的最后一位置0
        SCK=1;
        }
        return(tdata);
        }
        //--------------------------------------------------------------------------------------------------
        // 函數(shù)名稱: SPIsend_receiveByte
        // 入口參數(shù): ch
        // 返回接收的數(shù)據(jù)
        // 函數(shù)功能:串行輸入/輸出子程序
        //--------------------------------------------------------------------------------------------------
        unsigned char SPIsend_receiveByte(unsigned char ch)
        {
        unsigned char idata n=8;// 從MISO線上讀取一上數(shù)據(jù)字節(jié),共八位
        unsigned char tdata;
        SCK = 1;//時鐘為高
        SS1 = 0;//選擇從機
        while(n--)
        {
        delayNOP();
        SCK = 0;//時鐘為低
        delayNOP();
        {
        tdata = tdata<<1;// 左移一位,或_crol_(temp,1)
        if(MISO == 1)
        tdata = tdata|0x01;// 若接收到的位為1,則數(shù)據(jù)的最后一位置1
        else
        tdata = tdata&0xfe;// 否則數(shù)據(jù)的最后一位置0
        }
        {
        if((ch&0x80) == 0x80)// 若要發(fā)送的數(shù)據(jù)最高位為1則發(fā)送位1
        {
        MOSI = 1;// 傳送位1
        }
        else
        {
        MOSI = 0;// 否則傳送位0
        }
        ch = ch<<1;// 數(shù)據(jù)左移一位
        }
        SCK=1;
        }
        return(tdata);
        }



        關(guān)鍵詞: SPI總線讀寫程序5

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 新泰市| 高雄市| 深州市| 尉氏县| 盐城市| 息烽县| 祁东县| 册亨县| 乌拉特前旗| 中阳县| 洞口县| 长寿区| 昌宁县| 威远县| 陆良县| 剑川县| 阿图什市| 若羌县| 辛集市| 寻甸| 南华县| 宣恩县| 林口县| 抚宁县| 雅安市| 静安区| 新和县| 武鸣县| 鹤岗市| 昭通市| 昌图县| 瓮安县| 沁源县| 新宁县| 新巴尔虎右旗| 嘉义市| 黑河市| 依安县| 湛江市| 贵定县| 楚雄市|