乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【轉(zhuǎn)】單片機SPI接口和AD7799通信程序

       ZLM_圖書館 2014-07-04

      sbit AD7799_CS=P1^4;
      sbit AD7799_RDY=P1^6;

      //SPCR    SPI控制寄存器

      //SPSR    SPI狀態(tài)寄存器

      //SPDAT    SPI數(shù)據(jù)寄存器
      void SPI_init(void)
      {
          SPCR=0x5e;//SPI控制寄存器,中斷禁止,SPI使能,高位在前,主機模式,時鐘空閑時為高,后沿觸發(fā)移位,時鐘分頻64
      SPSR=0x00;//清中斷標志位
      }
      /*--------------------------------------------
      寫AD7799寄存器函數(shù)
      WriteData:要寫的數(shù)據(jù)
      ----------------------------------------------*/
      void WriteByteToAd7799(unsigned char WriteData)
      {
          SPDAT= WriteData;
          while(~SPSR&0x80);        //等待數(shù)據(jù)發(fā)送完
          SPSR=0x00;                     //清中斷標志位

      }
      /*--------------------------------------------
      防止時序混亂,實現(xiàn)再同步
      ----------------------------------------------*/
      void WaiteRDY(void)
      {
          unsigned int count=0 ;
          while(AD7799_RDY)
          {    
              count++;
              if(count>20000)
              {
                   //reset ad7799
                  WriteByteToAd7799(0xff);

                  WriteByteToAd7799(0xff);
                                            /*----------防止時序混亂,重新同步----------*/
                  WriteByteToAd7799(0xff);

                  WriteByteToAd7799(0xff);

                  AD7799_init();
                  break ;
              }
          }
      }

      /*--------------------------------------------
      AD7799初始化函數(shù)
      ----------------------------------------------*/
      void AD7799_init(void)
      {
         AD7799_CS=0;
      /*------------------------增益為128,通道0----------------------------------------*/
          WriteByteToAd7799(0x10); //寫通信寄存器設(shè)置下一個操作為寫配置寄存器

          WriteByteToAd7799(0x37); //增益為128

          WriteByteToAd7799(0x30); //通道0

      /*------------------- 寫模式寄存器初始化零值校準------------------------------------*/
          WriteByteToAd7799(0x08); //寫通信寄存器設(shè)置下一個操作為寫模式寄存器

          WriteByteToAd7799(0x80);

          WriteByteToAd7799(0x0A);

          WaiteRDY();              //Wait for RDY pin to go low to indicate end of calibration cycle*/
      /*------------------寫模式寄存器初始化全值校準-------------------------------------*/
          WriteByteToAd7799(0x08); //寫通信寄存器設(shè)置下一個操作為寫模式寄存器

          WriteByteToAd7799(0xA0);

          WriteByteToAd7799(0x0A);

          WaiteRDY();              // Wait for RDY pin to go low to indicate end of calibration cycle
      /*------------------模式0,Continuous-Conversion Mode,Fadc=16.7HZ------------------*/
          WriteByteToAd7799(0x08);      //寫通信寄存器設(shè)置下一個操作為寫模式寄存器

          WriteByteToAd7799(0x00);

          WriteByteToAd7799(0x0A);

      }
      unsigned long ReadAd7799ConversionData(void)
      {
          unsigned long ConverData;
          unsigned char ADSAT ;
          unsigned char ErrNUM=0;
          WaiteRDY();

          WriteByteToAd7799(0x40);     //寫通信寄存器設(shè)置下一個操作為讀狀態(tài)STATUS寄存器

          WriteByteToAd7799(0xff);     //偽寫通信寄存器,為讀狀態(tài)寄存器提供時鐘

          ADSAT=SPDAT;                 //讀取接收到的數(shù)據(jù)
          while((ADSAT&0x40)||(!(ADSAT&0x08)))      //出錯或者讀寫異常
          {
               //reset ad7799
               WriteByteToAd7799(0xff);

               WriteByteToAd7799(0xff);
                                            /*----------防止時序混亂,重新同步----------*/
               WriteByteToAd7799(0xff);

               WriteByteToAd7799(0xff);

      //-------------------------------------------------------------------------------------     
              AD7799_init();
             
              WaiteRDY();
              WriteByteToAd7799(0x40);     //寫通信寄存器設(shè)置下一個操作為讀狀態(tài)STATUS寄存器

              WriteByteToAd7799(0xff);     //偽寫通信寄存器,為讀狀態(tài)寄存器提供時鐘

              ADSAT=SPDAT;                 //讀取接收到的數(shù)據(jù)
             
              ErrNUM++;
              if(ErrNUM>5)break;
          }

          WriteByteToAd7799(0x58);        //寫通信寄存器設(shè)置下一個操作為連續(xù)讀數(shù)據(jù)寄存器

          WaiteRDY();
          /* Wait for RDY pin to go low to indicate end of calibration cycle*/
          if(!AD7799_RDY)
          {
              ConverData=0 ;
      /*-----------------Read Conversion Result from AD7799's Data Register----------------*/

              WriteByteToAd7799(0xff);             //偽寫通信寄存器,為讀數(shù)據(jù)寄存器寄存器提供時鐘
              ConverData=SPDAT;
              ConverData=ConverData<<8 ;

              WriteByteToAd7799(0xff);             //偽寫通信寄存器,為讀數(shù)據(jù)寄存器寄存器提供時鐘
              ConverData=ConverData+SPDAT;
              ConverData=ConverData<<8 ;

              WriteByteToAd7799(0xff);             //偽寫通信寄存器,為讀數(shù)據(jù)寄存器寄存器提供時鐘
              ConverData=ConverData+SPDAT;
             
          }
          if(ErrNUM>5)return(0);
          else return(ConverData);
      }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多