久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 請指點一下,單片機adc程序中如何把結果轉換實際電壓值 感激不盡本人剛學 [打印本頁]

作者: 354724834    時間: 2024-2-6 22:19
標題: 請指點一下,單片機adc程序中如何把結果轉換實際電壓值 感激不盡本人剛學
   #include<reg51.h>
        #include"US16.H"
         
         

        
        
                        void UartInit(void)                //9600bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位數據,可變波特率
        AUXR = 0x0F;                //定時器時鐘12T模式
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //設置定時器模式
        TMOD |= 0x20;                //設置定時器模式
        TL1 = 0xFD;                //設置定時初始值
        TH1 = 0xFD;                //設置定時重載值
        ET1 = 0;                //禁止定時器%d中斷
        TR1 = 1;                //定時器1開始計時
        EA=1;
        ES=1;
        
}                                   

        
          void main ()

   {                        
                           unsigned char i;  
                           UartInit();        //串口初始化
                       InitADC();         //adc初始化

                    


                            while(1)
                         {
                                 i=        GetADCResult(0X01);//通道1轉換結果
                        
                                

                                SBUF=i;                        //發到上位機
                                Delay500ms();
                                 
                                          
               
                          }

   }

   void uaut () interrupt 4


{


                        
           
           while(!TI);
            TI=0;
         
}
作者: wulin    時間: 2024-2-7 07:07
八位ADC結果換算成10進制電壓值
毫伏=參考電壓毫伏*(long)八位ADC結果/256
示例:U_mv = Vcc * 1000 * (long)ADC_V / 256;


十位ADC結果換算成10進制電壓值
毫伏=參考電壓毫伏*(long)十位ADC結果/1024

十二位ADC結果換算成10進制電壓值
毫伏=參考電壓毫伏*(long)十二位ADC結果/4096


作者: mtt661    時間: 2024-2-7 09:00
1、首先要知道adc的基準電壓
2、知道adc的分辨率
3,測到adc數值后,參考二樓
作者: 354724834    時間: 2024-2-7 09:58
wulin 發表于 2024-2-7 07:07
八位ADC結果換算成10進制電壓值
毫伏=參考電壓毫伏*(long)八位ADC結果/256
示例:U_mv = Vcc * 1000 * (l ...

我做的是8位的,vin和vcc都是5v,數據手冊是  8-bit A/D Conversion Result:(ADC_RES[7:0])= 256 x Vin /Vcc,那我如果串口顯示是不是把 i= i*256;SBUF=i;就可以看到實際電壓了
作者: wulin    時間: 2024-2-7 13:35
354724834 發表于 2024-2-7 09:58
我做的是8位的,vin和vcc都是5v,數據手冊是  8-bit A/D Conversion Result:(ADC_RES[7:0])= 256 x Vin / ...

void UartInit(void)     //9600bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位數據,可變波特率
        AUXR &= 0xBF;                //定時器時鐘12T模式
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //設置定時器模式
        TMOD |= 0x20;                //設置定時器模式
        TL1 = 0xFD;                        //設置定時初始值
        TH1 = 0xFD;                        //設置定時重載值
        ET1 = 0;                        //禁止定時器中斷
        TR1 = 1;                        //定時器1開始計時
//        EA=1;
//        ES=1;
}      

/*----------------------------
發送串口數據
----------------------------*/
void SendData(unsigned char dat)
{
    while (!TI);                    //等待前一個數據發送完成
    TI = 0;                         //清除發送標志
    SBUF = dat;                     //發送當前數據
}

void main ()
{                        
        unsigned char ADC_R;//AD轉換值  
        unsigned int U_mv; //電壓值
        UartInit();        //串口初始化
        InitADC();         //adc初始化
        while(1)
        {
                ADC_R=GetADCResult(0X01);//通道1轉換結果
                U_mv = (5000*(long)ADC_R/256+5)/10;//強制轉換數據類型,轉換成10進制(4舍5入)電壓值
                //串口助手以文本模式接收
                SendData(U_mv/100%10+'0');//整數位
                SendData('.');            //小數點
                SendData(U_mv/10%10+'0'); //小數第1位
                SendData(U_mv%10+'0');    //小數第2位
                Delay500ms();
        }
}
/*
void uaut () interrupt 4
{
        while(!TI);
        TI=0;
}*/

作者: Hephaestus    時間: 2024-2-7 21:48
也可以定義一個unsigned int變量,把結果加195次,那么這個變量從0~50000分別對應0~5000.0mV,更加直觀計算量還小。
作者: 354724834    時間: 2024-2-8 19:38
wulin 發表于 2024-2-7 13:35
void UartInit(void)     //9600bps@11.0592MHz
{
        PCON &= 0x7F;                //波特率不倍速

非常感謝指點,下載之后無顯示,后來我把 sbuf =dat; 放在while(!TI)前面就好了

作者: 354724834    時間: 2024-2-8 19:53
Hephaestus 發表于 2024-2-7 21:48
也可以定義一個unsigned int變量,把結果加195次,那么這個變量從0~50000分別對應0~5000.0mV,更加直觀計算 ...

厲害

作者: 大漠落日    時間: 2024-2-8 23:35
簡單標定一下就行,測量一個已知電壓,讀出AD值,標定一下,就行了。下面可以按比例計算出待測電壓的數值。
作者: rayin    時間: 2024-2-20 08:29
獲取的AD轉換值, 最好要做下濾波算法, 比如去掉最大值, 最小值, 得到平均值, 這樣得到的數值才是比較精準的.
作者: 354724834    時間: 2024-12-4 22:01
Hephaestus 發表于 2024-2-7 21:48
也可以定義一個unsigned int變量,把結果加195次,那么這個變量從0~50000分別對應0~5000.0mV,更加直觀計算 ...

為什么加195

作者: WL0123    時間: 2024-12-5 13:43
發表于 2024-12-4 22:01
為什么加195

50000/256≈195。有人這么%嗎?為什么要加195次?不會乘法?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品99久久久久久久久 | 日韩中文视频 | www.色.com| 91精品一区二区三区久久久久 | 国产成人网 | 伊人久久精品一区二区三区 | 一区二区三区免费在线观看 | 国产91在线播放精品91 | 18gay男同69亚洲网站 | 999久久久国产精品 欧美成人h版在线观看 | 日韩中文字幕一区 | 国产精品99久久久久久www | 一区二区三区精品在线视频 | 日本高清不卡视频 | 亚洲国产精品一区二区久久 | 免费在线成人网 | 亚洲人成在线播放 | 超碰在线免费av | 98久久| 国产超碰人人爽人人做人人爱 | 久在线视频播放免费视频 | 国产精品日韩欧美一区二区三区 | 亚洲综合在线一区 | 亚洲精品日韩欧美 | 久久久国产一区二区三区四区小说 | 国产欧美一区二区三区在线看 | 成年人视频在线免费观看 | 综合久久综合久久 | 91精品一区二区三区久久久久 | 亚洲精品一区二区三区在线观看 | 亚洲一区二区三区四区五区午夜 | 黄网免费 | 国产精品一区二区三区免费观看 | 日本超碰 | av黄色在线 | 久久精品黄色 | 色综合天天网 | jizz18国产| 国际精品鲁一鲁一区二区小说 | 免费在线观看一区二区三区 | a级片www |