ADC0832程序完整版 文檔+源碼+Proteus仿真

 前段時間一直在爲ADC0832的程序感到疑惑,從網上找了很多的代碼,用Proteus仿真,最後都出現了一些奇怪的問題,有的根本沒法讀取數據,有的數據有錯誤。

當參考電壓爲5V時,如果把輸入電壓從0一直調到5V,讀取的數據應該是從0到255,2.5V時應該是128。但是我發現一些源碼在輸入0~2.5V時讀取出來的是0~255,到2.5V時讀取的數據爲0,從2.5到5V,讀出的值又從0增加到255,始終不正確。今天下午特地查閱的ADC0832英文原版的DataSheet,又參考了一篇中文文檔,終於寫出了其完整的程序,並且先後讀取了MSB FIRST DATA和LSB FIRST DATA,進行比較,如果兩個數據相等,返回讀取的數據,否則返回0,這樣可以避免讀取發生錯誤,更穩定可靠。並通過了Proteus仿真。

下圖是ADC0832的時序圖:

 

 

其中T-SetUp爲250ns,由於使用的是51單片機,晶振11.0592MHz,機器週期比這個值大,可以不考慮,但爲了防止出現異常,還是延時了兩個機器週期。注意在第11個時鐘下降沿之後,DO上的電平既是MSB FIRST輸出的最後一位,又是LSB FIRST輸出的第一位。以下是讀取ADC0832的代碼。

 

 

  1. sbit CS_0832 = P1^0;   
  2. sbit CLK_0832 = P1^1;   
  3. sbit DO_0832 = P1^2;    // DI、DO不同時有效,可共用一個接口   
  4. sbit DI_0832 = P1^2;   
  5.    
  6. extern void _nop_ ( void );   
  7. #define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0   
  8.    
  9. //把模擬電壓值轉換成8位二進制數並返回   
  10. unsigned char read0832()   
  11. {   
  12.     unsigned char i, ch = 0, ch1 = 0;   
  13.     CS_0832=0;      // 片選,DO爲高阻態   
  14.        
  15.     DI_0832=1;   
  16.     // 此處暫停T-SetUp: 250ns (由pulse0832完成)   
  17.     pulse0832();    // 第一個脈衝,起始位,DI置高   
  18.        
  19.     DI_0832=1;   
  20.     pulse0832();    // 第二個脈衝,DI=1表示雙通道單極性輸入   
  21.        
  22.     DI_0832=1;   
  23.     pulse0832();    // 第三個脈衝,DI=1表示選擇通道1(CH2)   
  24.        
  25.     // MSB FIRST DATA   
  26.     for(i = 0; i < 8; ++i) {   
  27.         pulse0832();   
  28.         ch <<= 1;   
  29.         if(DO_0832==1)   
  30.             ch |= 0x01;   
  31.     }   
  32.        
  33.     // MSB FIRST輸出的最後一位與LSB FIRST輸出的第一位是在   
  34.     // 同一個時鐘下降沿之後,故此處先執行讀取,後執行pulse   
  35.     // LSB FIRST DATA   
  36.     for(i = 0; i < 8; ++i) {   
  37.         ch1 >>= 1;   
  38.         if(DO_0832==1)   
  39.             ch1 |= 0x80;   
  40.         pulse0832();   
  41.     }   
  42.        
  43.     CS_0832=1;      // 取消片選,一個轉換週期結束   
  44.     return (ch==ch1) ? ch : 0;      // 返回轉換結果   
  45. }   

 

Proteus仿真文件以及英文DataSheet、中文介紹請點擊此處下載。

http://down.51cto.com/data/623615

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章