日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51单片机扩展io口实验c语言,【51单片机】普通I/O口模拟SPI口C语言程序

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51单片机扩展io口实验c语言,【51单片机】普通I/O口模拟SPI口C语言程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

該樓層疑似違規已被系統折疊?隱藏此樓查看此樓

89C51系列單片機都不帶SPI口,所在在這種情況下,我們可以模擬SPI口來現實我們要的功能,程序如下:

//-----------------------函數聲明,變量定義------------

#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口模擬片選

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

//-------------------------------------------------------------------------------// 函數名稱: SPISendByte

// 入口參數: ch

// 函數功能: 發送一個字節

//-------------------------------------------------------------------------------

void SPISendByte(unsigned char ch)

{

unsigned char idata n=8; // 向SDA上發送一位數據字節,共八位

SCK = 1 ; //時鐘置高

SS1 = 0 ; //選擇從機 while(n--)

{

delayNOP();

SCK = 0 ; //時鐘置低

if((ch&0x80) == 0x80) // 若要發送的數據最高位為1則發送位1

{

MOSI = 1; // 傳送位1

}

else

{

MOSI = 0; // 否則傳送位0

}

delayNOP();

ch = ch<<1; // 數據左移一位

SCK = 1 ; //時鐘置高

}

}

//-------------------------------------------------------------------------------

// 函數名稱: SPIreceiveByte

// 返回接收的數據

// 函數功能: 接收一字節子程序

//-------------------------------------------------------------------------------

unsigned char SPIreceiveByte()

{

unsigned char idata n=8; // 從MISO線上讀取一上數據字節,共八位

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,則數據的最后一位置1

else

tdata = tdata&0xfe; // 否則數據的最后一位置0

SCK=1;

}

return(tdata);

}

//-------------------------------------------------------------------------------

// 函數名稱: SPIsend_receiveByte

// 入口參數: ch

// 返回接收的數據

// 函數功能:串行輸入/輸出子程序

//-------------------------------------------------------------------------------

unsigned char SPIsend_receiveByte(unsigned char ch)

{

unsigned char idata n=8; // 從MISO線上讀取一上數據字節,共八位

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,則數據的最后一位置1

else

tdata = tdata&0xfe; // 否則數據的最后一位置0

}

{

if((ch&0x80) == 0x80) // 若要發送的數據最高位為1則發送位1

{

MOSI = 1; // 傳送位1

}

else

{

MOSI = 0; // 否則傳送位0

}

ch = ch<<1; // 數據左移一位

}

SCK=1;

}

return(tdata);

}

總結

以上是生活随笔為你收集整理的51单片机扩展io口实验c语言,【51单片机】普通I/O口模拟SPI口C语言程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。