新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)IO口模擬SPI四種模式的程序

        單片機(jī)IO口模擬SPI四種模式的程序

        作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏

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

        #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==0SCK_D(0);#elseSCK_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  0void 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  1void 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  1void 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);//#endifwhile(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();}}


        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 钟山县| 东港市| 德保县| 吴堡县| 荔浦县| 通榆县| 临沧市| 平陆县| 比如县| 桃园市| 呼图壁县| 蕲春县| 景东| 义乌市| 璧山县| 呼伦贝尔市| 甘谷县| 巍山| 安塞县| 耿马| 犍为县| 策勒县| 沙湾县| 汽车| 曲水县| 乐平市| 西丰县| 克山县| 文山县| 响水县| 通渭县| 滨州市| 志丹县| 介休市| 恩施市| 申扎县| 临泽县| 屏东县| 大同市| 禹城市| 昌乐县|