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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6269|回復: 4
打印 上一主題 下一主題
收起左側

請問ADC獲取的電壓,怎么轉換成數值?謝謝!

[復制鏈接]
跳轉到指定樓層
樓主
ID:70095 發表于 2021-3-6 23:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
10黑幣
#include "STC8xxxx.H"        //頭文件
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)

#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
sbit led = P5^5;
int *BGV; //內部1.19V參考信號源值存放在idata中
//idata的EFH地址存放高字節
//idata的F0H地址存放低字節
//電壓單位為毫伏(mV)                                 
bit busy;
void UartIsr() interrupt 4
{
if (TI)
{
TI = 0;
busy = 0;
}
if (RI)
{
RI = 0;
}
}
void UartInit()
{
SCON = 0x50;
TMOD = 0x00;
TL1 = BRT;
TH1 = BRT >> 8;
TR1 = 1;
AUXR = 0x40;
busy = 0;
}
void UartSend(char dat)
{
while (busy);
busy = 1;
SBUF = dat;
}
void ADCInit()
{
P_SW2 |= 0x80;
ADCTIM = 0x3f; //設置ADC內部時序
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //設置ADC時鐘為系統時鐘/2/16/16
ADC_CONTR = 0x8f; //使能ADC模塊,并選擇第15通道
}
int ADCRead()
{
int res;
ADC_CONTR |= 0x40; //啟動AD轉換
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查詢ADC完成標志
ADC_CONTR &= ~0x20; //清完成標志
res = (ADC_RES << 8) | ADC_RESL; //讀取ADC結果
return res;
}
void main()
{
int res;
int vcc;
int i;
P5M0 = 0x00;
P5M1 = 0x00;
BGV = (int idata *)0xef;
ADCInit(); //ADC初始化
UartInit(); //串口初始化
ES = 1;
EA = 1;
// ADCRead();
// ADCRead(); //前兩個數據建議丟棄
res = 0;
for (i=0; i<8; i++)
{
res += ADCRead(); //讀取8次數據
}
res >>= 3; //取平均值
vcc = (int)(1024L * *BGV / res); //(10位ADC算法)計算VREF管腳電壓,即電池電壓

//printf(vcc);
// vcc = (int)(4096L * *BGV / res); //(12位ADC算法)計算VREF管腳電壓,即電池電壓
//注意,此電壓的單位為毫伏(mV)
UartSend(vcc >> 8); //輸出電壓值到串口,顯示為“0D”
UartSend(vcc); //輸出電壓值到串口,顯示為顯示為“14”

//將16進制“0D 14”轉換成10進制是“3348”,請問如何在C語言程序中,將“vcc >> 8”和“vcc”相加等于“3348”?謝謝!
//我想要實現如下的效果,當電壓高于3200毫伏時亮燈
if (vcc > 3200){
        led = 0; //LED燈亮起,電量提醒
}

while (1);
}

最佳答案

查看完整內容

由于此例VCC以mV計算占兩個字節,所以要將高低8位分解后才能通過串口傳輸。 樓主電量提醒程序直接使用vcc即可,沒有必要先分解再合并。 合并計算方法示例:vcc=0x0d
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2021-3-6 23:44 | 只看該作者
由于此例VCC以mV計算占兩個字節,所以要將高低8位分解后才能通過串口傳輸。
樓主電量提醒程序直接使用vcc即可,沒有必要先分解再合并。
合并計算方法示例:vcc=0x0d<<8|0x14;

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:420836 發表于 2021-3-7 05:18 | 只看該作者
ADC的參考電壓對應于ADC數字值的滿量程。 例如,10位ADC的滿量程數字值為1024,如果參考電壓為5V,則2.5V表示ADC為512之后的數字值。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:280000 發表于 2021-3-20 00:11 | 只看該作者
有一個公司,模數轉化的
回復

使用道具 舉報

5#
ID:894154 發表于 2021-3-20 11:04 | 只看該作者
Vref/(2的n次方-1)再乘以res =3.2V Vref為參考電壓, n為存儲ADC轉換值的寄存器位數,res為你程序中得到到ADC的值
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产乱码精品一区二区三区中文 | 色.com| 69av在线视频| 在线看91| 成人h片在线观看 | 欧美成人黄色小说 | 午夜视频网站 | 亚洲瑟瑟| 亚洲国产精品人人爽夜夜爽 | 欧美精品福利 | 久久久久亚洲 | 日韩精品 | 亚洲一区二区久久久 | 国产一区二区三区四区 | 在线亚洲电影 | 天天综合网91 | 亚洲成人自拍 | 伊人春色成人 | 日日射夜夜骑 | 都市激情亚洲 | 成人在线一区二区三区 | 日韩免费视频 | 美女福利视频网站 | 男女视频在线看 | 久久宗合色 | 精品伊人 | 亚洲在线一区 | 免费中文字幕日韩欧美 | 欧美 日韩 中文 | 国产美女黄色片 | 久久亚洲一区二区 | 97caoporn国产免费人人 | 亚洲综合色视频在线观看 | 男人av在线 | 国产成人综合一区二区三区 | 日韩高清中文字幕 | 国产精品久久久久久久久久久久久久 | 亚洲国产精品精华素 | av网站免费在线观看 | 免费亚洲视频 | 国产精品久久久久久久久久了 |