導航:首頁 > 操作系統 > 單片機ad轉換的程序

單片機ad轉換的程序

發布時間:2025-03-26 07:08:00

⑴ STC12C5A60S2 AD轉換,轉換結果怎麼算

在使用STC12C5A60S2單片機進行AD轉換時,需要將轉換結果整合起來。我們首先定義一個int類型的變數a,將ADC_RES的值賦給a,即a = ADC_RES。

由於ADC_RES是高位,而低兩位存儲在ADC_RESL中,因此需要將a左移兩位,操作為a <<= 2。接下來,我們需要將ADC_RESL中的低兩位合並到a中。首先,從ADC_RESL中提取低兩位,存儲在一個char類型的變數b中,即b = ADC_RESL & 0x03。

最後,我們將b的值加到a中,即a += b。此時,a的值即為AD轉換的結果,總共10位。

10位的最大值是1023,對應數模轉換參考電壓的高電平,而0則對應低電平。例如,如果參考電壓是5V,當讀取到a = 1023時,這意味著采樣得到的電壓為5V。通過這種比例關系,可以計算出采樣電壓的具體值。

括弧內的內容在STC手冊中很常見,用於表示該值具有8位,序號從0到7。這意味著在處理AD轉換結果時,需要仔細考慮位移和合並的過程。

⑵ 單片機AD轉換用的這段程序意思是什麼

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch ;//開始轉換

這是用STC單片機內部A/D轉換電路進行A/D轉換時,要給A/D控制寄存器ADC_CONTR寫啟動轉換命令,ADC_CONTR是ADC控制寄存器,其中的每一位的作用見下圖,而這行語句前面肯定要有定義每一位狀態的語句,或用#define宏定義了各位的值。

⑶ 單片機AD和DA轉換具體過程是怎麼樣的

單片機的AD轉換過程是將模擬信號轉換為數字信號。比如,以8位的AD轉換為例,假設輸入范圍為0~5V,那麼這5V會被劃分為256份,每份的電壓值為5/256V,大約為0.0195V。這也就是AD轉換的精度。因此,最小一份的電壓為0.0195V左右。如果輸入信號為5V,那麼它將占據256份中的全部份額,AD轉換後輸出的數字信號為16進制的0xff。

如果輸入信號為3.1V,那麼它將占據的份數為3.1除以每份5/256,結果大約為158.72份。由於AD轉換器只能輸出整數,因此輸出結果為158份,即0x9e。由此產生的誤差約為0.72份,即0.72*5/256V,大約為0.014V左右。

當AD轉換器的位數增加至10位時,每份的電壓值將變為5/1024V,精度大幅提高。DA轉換過程則是將數字信號轉換為模擬信號。其原理與AD轉換類似,只是方向相反。不明白的地方可以繼續提問。

⑷ 請教stc自帶ad的51單片機的使用方法

#include<reg52.h>#include<intrins.h>
#define uchar unsigned char#define uint unsigned int
sfr ADC_CONTR = 0xbc; //ADC控制寄存器
sfr ADC_RES = 0xbd; //ADC轉換結果高八位寄存器
sfr ADC_LOW2 = 0xbe; //ADC轉換結果低兩位寄存器
sfr P1ASF = 0x9d; //P1口模擬功能控制寄存器

#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC結束標志位
#define ADC_START 0x08 //ADC啟動標志位
#define ADC_SPEEDLL 0x00 //540個時鍾周期
#define ADC_SPEEDL 0x20 //360個時鍾周期
#define ADC_SPEEDH 0x40 //180個時鍾周期
#define ADC_SPEEDHH 0x60 //90 個時鍾周期

void InitUart();
void SendData(uchar);
void Delay(uint n);
void InitADC();

uchar ch=0; //ADC通道選擇
void main()
{
InitUart(); //初始化串口
InitADC(); //初始化ADC
IE = 0xa0; //打開總中斷

while(1);}
/*ADC中斷函數*/
void ads_isr() interrupt 5 using 1
{
ADC_CONTR&=!ADC_FLAG; //將ADC結束標志位清零

SendData(ch); //將對應ADC通道號發送給電腦 SendData(ADC_RES); //將轉換結果發送給電腦
if(++ch > 7)ch = 0; //下一個ADC通道 ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ch; //打開ADC電源、轉換時間540個時鍾周期、開始轉換、選擇通道號
}
/*初始化ADC寄存器*/
void InitADC()
{
P1ASF = 0xff; //定義p1口為ADC轉換口
ADC_RES = 0;
ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ch; //打開ADC電源、轉換時間540個時鍾周期、開始轉換、選擇通道號
Delay(2); //等待ADC上電穩定然後開始ADC轉換?應該是先開電源,等待後再START,可能STC官方程序有問題
}

/*初始化串口*/
void InitUart()
{
SCON = 0x5a;
TMOD = 0x20;
TH1 = 0xfd; //在11.0592MHZ晶振下,波特率為9600
TL1 = 0xfd;
TR1 = 1;
}

/*串口發送數據*/
void SendData(uchar dat)
{
while(!TI);
TI = 0;
SBUF = dat;
}

/*延時函數*/
void Delay(uint n)
{
uint x;

while(n--)
{
x=5000;
while(x--);
}
}

注釋原創

閱讀全文

與單片機ad轉換的程序相關的資料

熱點內容
休息pdf 瀏覽:436
聞泰伺服器事業部怎麼樣 瀏覽:208
香皂解壓玩法視頻 瀏覽:874
idea運行main方法不編譯整個項目 瀏覽:516
android獲取gps位置 瀏覽:493
調整文件夾的解析度 瀏覽:267
單片機的ic是什麼 瀏覽:170
app無法注銷賬號有什麼影響 瀏覽:96
傳奇下載下來怎麼是個加密文件 瀏覽:7
日立壓縮機型號對照表 瀏覽:367
佑華單片機編譯器 瀏覽:247
欠條pdf 瀏覽:821
什麼游戲都有的安卓手機上的魔鬼 瀏覽:689
python零基礎英語單詞 瀏覽:210
解壓聲音控怎麼做 瀏覽:561
蘋果手機怎麼傳輸到安卓手機上 瀏覽:611
怎麼修改smtp伺服器 瀏覽:440
激光切割機打開加密文件 瀏覽:832
藍少解說我的世界命令方塊 瀏覽:430
linux加密分區教程外包 瀏覽:904