標(biāo)題: 能幫我看看我這8位的AD采集單片機(jī)程序?yàn)槭裁床怀晒?[打印本頁]

作者: 如癡百感生    時(shí)間: 2019-9-28 16:44
標(biāo)題: 能幫我看看我這8位的AD采集單片機(jī)程序?yàn)槭裁床怀晒?br /> 本帖最后由 如癡百感生 于 2019-9-28 16:58 編輯

計(jì)算部分弄錯(cuò)了 ,,應(yīng)該是v=b*5/256;但結(jié)果還是不對,,沒問題了   自己把自己弄混了   抱歉

作者: csmyldl    時(shí)間: 2019-9-28 22:33
能自己馬上發(fā)現(xiàn)錯(cuò)誤并改正,真厲害!
作者: shwghsy    時(shí)間: 2020-2-29 16:42
#include ”stc15w4k.h"
#include <stdio.h>                // 為使用KEIL自帶的庫函數(shù)printf而加入

加入串口可以在PC端實(shí)時(shí)查看電壓數(shù)據(jù)
unsigned int ADC_P11()                  //   ADC轉(zhuǎn)換函數(shù)
{
        unsigned int i;                    // 用于軟件延時(shí)程序
        unsigned char status;        // 用于判斷AD轉(zhuǎn)換結(jié)束的標(biāo)志
        unsigned int AD_Dat=0;  // 10位AD轉(zhuǎn)換值
        unsigned char Tmp;            // 臨時(shí)變量用于將AD轉(zhuǎn)換出來的2個(gè)字節(jié)合成一個(gè)字節(jié)               
        ADC_CONTR|=0x80;              // 開AD轉(zhuǎn)換電源,第一次使用時(shí)要打開內(nèi)部模擬電源
    for (i=0;i<10000;i++);  // 適當(dāng)延時(shí)等待AD轉(zhuǎn)換供電穩(wěn)定,一般延時(shí)1ms以內(nèi)即可,為了縮短AD
                            // 調(diào)用時(shí)間,可把這2行剪切到主程序中去。
        P1ASF|=0x02;                        // 選擇P1.1作為AD轉(zhuǎn)換通道,0x02= 0000 0010       
        ADC_CONTR=0xE1;         // 選擇P1.1作為AD轉(zhuǎn)換通道,最高轉(zhuǎn)換速度,清轉(zhuǎn)換完成標(biāo)志。
        //for (i=0;i<1000;i++);   // 如果是多通道模擬量進(jìn)行AD轉(zhuǎn)換,則更換AD轉(zhuǎn)換通道后要適當(dāng)延時(shí),
                            // 使輸入電壓穩(wěn)定,延時(shí)量取20μs~200μs即可,與輸入電壓源的內(nèi)阻有關(guān),如果輸入電壓信號(hào)源的內(nèi)
                            // 阻在10K以下,可不加延時(shí),如果是單通道模擬量轉(zhuǎn)換,則不需要更換AD轉(zhuǎn)換通道,也不需要加延時(shí)。
        ADC_CONTR|=0x08;        // 啟動(dòng) A/D 轉(zhuǎn)換,ADC_START=1。
        status=0;
        while(status==0)              // 等待AD轉(zhuǎn)換結(jié)束。
        {
            status=ADC_CONTR&0x10;   // 判斷ADC_FLAG是否等于1,0x10=0001 0000B。
        }
        ADC_CONTR&=0xE7;             // 將ADC_FLAG清0, 0xE7=1110 0111B,ADC_FLAG=0,ADC_START=0。       
        AD_Dat = ADC_RES;                // 默認(rèn)高字節(jié)高8位。
        AD_Dat <<= 2;
        Tmp = ADC_RESL;         // 默認(rèn)低字節(jié)低2位。
        Tmp &= 0x03;            // 屏蔽無關(guān)位
        AD_Dat |= Tmp;                // 高低字節(jié)拼接成一個(gè)10位數(shù)。
        return AD_Dat;
}

mian函數(shù)下
float Vin;                                   // 存放計(jì)算出來的外部輸入電壓
unsigned int ADvalue;          // 存放AD轉(zhuǎn)換返回的結(jié)果
ADvalue=ADC_P11();                   // 采樣P1.1口模擬輸入電壓  電瓶正極電壓
Vin=VCC*ADvalue/1023;      // 注意是1023才正確
printf("%.3f     ",Vin);          //輸出電壓顯示。

作者: lele5211314    時(shí)間: 2020-2-29 17:07
什么ADC也不說清楚




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1