色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機SPI總線的實現(xiàn)

          51單片機SPI總線的實現(xiàn)

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

          #include

          本文引用地址:http://cafeforensic.com/article/201611/322566.htm

          #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_();};

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

          // 函數(shù)名稱: SPISendByte

          // 入口參數(shù): ch

          // 函數(shù)功能: 發(fā)送一個字節(jié)

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

          voidSPISendByte(unsignedcharch)

          {

          unsignedcharidata 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é)子程序

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

          unsignedcharSPIreceiveByte()

          {

          unsignedcharidata n=8;// 從MISO線上讀取一上數(shù)據(jù)字節(jié),共八位

          unsignedchartdata;

          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ù)功能:串行輸入/輸出子程序

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

          unsignedcharSPIsend_receiveByte(unsignedcharch)

          {

          unsignedcharidata n=8;// 從MISO線上讀取一上數(shù)據(jù)字節(jié),共八位

          unsignedchartdata;

          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);

          }



          關鍵詞: 51單片機SPI總

          評論


          技術專區(qū)

          關閉