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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

单片机IO口模拟SPI四种模式的程序

發(fā)布時(shí)間:2025/4/5 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机IO口模拟SPI四种模式的程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2013年09月21日 10:00:02?zyboy2000?閱讀數(shù):23924

?

#include "iom8535v.h" #define _CPOL 1 #define _CPHA 0 #define SCK_IO DDRA|=0X01 #define MOSI_IO DDRA|=0X02 #define MISO_IO DDRA&=0XFB #define SSEL_IO DDRA|=0X08 #define SCK_D(X) (X?(PORTA|=0X01):(PORTA&=0XFE)) #define MOSI_D(X) (X?(PORTA|=0X02):(PORTA&=0XFD)) #define SSEL_D(X) (X?(PORTA|=0X08):(PORTA&=0XF7))#define MISO_I() (PINA&0X04) void delay() {unsigned char m,n;for(n=0;n<5;n++);for(m=0;m<100;m++); } /************************************************端口方向配置 與輸出初始化 ************************************************/ void SPI_Init(void) { SCK_IO ; MOSI_IO ; MISO_IO ; SSEL_IO ; SSEL_D(1); MOSI_D(1); #if _CPOL==0 SCK_D(0); #else SCK_D(1); #endif }/********************************************** 模式零 寫數(shù)據(jù) ***********************************************/ #if _CPOL==0&&_CPHA==0 //MODE 0 0 void SPI_Send_Dat(unsigned char dat) {unsigned char n;for(n=0;n<8;n++){SCK_D(0);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(1);}SCK_D(0); } /********************************************* 模式零 讀數(shù)據(jù) *********************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;for(n=0;n<8;n++){SCK_D(0);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(1);}SCK_D(0);return dat; } #endif /********************************************** 模式二 寫數(shù)據(jù) ***********************************************/ #if _CPOL==1&&_CPHA==0 //MODE 1 0 void SPI_Send_Dat(unsigned char dat) {unsigned char n;for(n=0;n<8;n++){SCK_D(1);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(0);}SCK_D(1); } /********************************************* 模式二 讀數(shù)據(jù) *********************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;for(n=0;n<8;n++){SCK_D(1);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(0);}SCK_D(1);return dat; }#endif /********************************************* 模式一 寫數(shù)據(jù) *********************************************/ #if _CPOL==0&&_CPHA==1 //MODE 0 1 void SPI_Send_Dat(unsigned char dat) {unsigned char n;SCK_D(0);for(n=0;n<8;n++){SCK_D(1);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(0);} } /********************************************* 模式一 讀數(shù)據(jù) *********************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;for(n=0;n<8;n++){SCK_D(1);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(0);}SCK_D(0);return dat; } #endif /// ///#if _CPOL==1&&_CPHA==1 //MODE 1 1 void SPI_Send_Dat(unsigned char dat) {unsigned char n;SCK_D(1);for(n=0;n<8;n++){SCK_D(0);if(dat&0x80)MOSI_D(1);else MOSI_D(0);dat<<=1;SCK_D(1);} } /************************************ 模式三 讀數(shù)據(jù) ************************************/ unsigned char SPI_Receiver_Dat(void) {unsigned char n ,dat,bit_t;SCK_D(0);for(n=0;n<8;n++){ SCK_D(0);dat<<=1;if(MISO_I())dat|=0x01;else dat&=0xfe;SCK_D(1);}SCK_D(1);return dat; } #endif /************************************* *************************************/ void main() {SPI_Init(); DDRB = 0XFF; //#if _CPOL //SCK_D(0); //#endif while(1) { //SSEL_D(0); //SPI_Send_Dat(0x01); //SPI_Send_Dat(0x31); //SSEL_D(1); SSEL_D(0); SPI_Send_Dat(0x81); PORTB =SPI_Receiver_Dat(); SSEL_D(1); //delay(); } }

總結(jié)

以上是生活随笔為你收集整理的单片机IO口模拟SPI四种模式的程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。