找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1866|回復: 12
收起左側(cè)

STC8G1K08單片機的AD結(jié)果轉(zhuǎn)換是16位還是10位

[復制鏈接]
ID:1125912 發(fā)表于 2024-6-18 20:26 | 顯示全部樓層 |閱讀模式
我測試,只有16位才是正確結(jié)果,也就是(寄存器的值/65535*VCC),但是官網(wǎng)寫的是10位應該用1024???是我撞對了還是手冊錯了?


#include <STC8.H>

unsigned int ADCReadBt;
unsigned char ADCReadBtH,ADCReadBtL;
unsigned int VREF;
unsigned char VREFnow;
unsigned char flag = 0;
void Delay1000ms(void)        //@11.0592MHz
{
        unsigned char data i, j, k;

        
        i = 43;
        j = 6;
        k = 203;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



void STC8UartInit(){
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x40;                //定時器時鐘1T模式
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發(fā)生器
        TMOD &= 0x0F;                //設(shè)置定時器模式
        TL1 = 0xE0;                        //設(shè)置定時初始值
        TH1 = 0xFE;                        //設(shè)置定時初始值
        ET1 = 0;                        //禁止定時器中斷
        TR1 = 1;                        //定時器1開始計時
        
}


void STC8UartSend(unsigned int ADCRead){
        SBUF = ADCRead;
        while(TI==0);
        TI=0;
}

void ADCInit(){
        ADC_CONTR = 0xCF;
        ADCCFG = 0x0F;
        ADCTIM = 0x2A;//2a
        EA = 1;
        EADC = 1;
}


void ADCIRT()interrupt 5{
        ADC_CONTR = 0x8F;
        flag = 1;
        ADCReadBt = ADC_RES<<8 | ADC_RESL;
        
        
        
        ADCReadBtH = ADCReadBt/256;
        ADCReadBtL = ADCReadBt%256;
}

void main(){
        P1M0 = 0x00;
        P1M1 = 0x04;
        
        ADCReadBt = 0;
        ADCReadBtH = 0;
        ADCReadBtL = 0;
        ADCInit();
        STC8UartInit();
        while(1){
                if(flag){
                        flag = 0;
                        STC8UartSend(ADC_RES);
                        STC8UartSend(ADC_RESL);
        //                STC8UartSend('\r');
        //                STC8UartSend('\n');
                        ADC_CONTR = 0xCF;
                }
        
        Delay1000ms();
        }
}


回復

使用道具 舉報

ID:1125912 發(fā)表于 2024-6-18 20:28 | 顯示全部樓層
批注 2024-06-18 202755.png
回復

使用道具 舉報

ID:344848 發(fā)表于 2024-6-18 22:27 | 顯示全部樓層

請相信官網(wǎng)所說的AD結(jié)果是10位,不是12位,更不是16位;目前單片機歐洲的ST公司AD轉(zhuǎn)換是12位,Ti公司AD轉(zhuǎn)換是16位。他們的價格都比國產(chǎn)單片機的價格貴。
回復

使用道具 舉報

ID:1034262 發(fā)表于 2024-6-18 23:55 | 顯示全部樓層
STC8G1K08是10位的ADC
回復

使用道具 舉報

ID:1034262 發(fā)表于 2024-6-18 23:55 | 顯示全部樓層
donglw 發(fā)表于 2024-6-18 22:27
請相信官網(wǎng)所說的AD結(jié)果是10位,不是12位,更不是16位;目前單片機歐洲的ST公司AD轉(zhuǎn)換是12位,Ti公司AD轉(zhuǎn) ...

STC8H系列、STC32G系列的12位ADC非常精準的。
回復

使用道具 舉報

ID:344848 發(fā)表于 2024-6-19 02:28 | 顯示全部樓層
coody_sz 發(fā)表于 2024-6-18 23:55
STC8H系列、STC32G系列的12位ADC非常精準的。

如你所言,本人認為可能某些環(huán)境精度達不到呀,從南京到北京買的沒有賣的精,若比較完善達到12位為何說成10位,匪夷所思,
回復

使用道具 舉報

ID:1125957 發(fā)表于 2024-6-19 08:51 | 顯示全部樓層
官網(wǎng)發(fā)布的一般都是正確的,你這個16位應該是撞對了 10位是對的
回復

使用道具 舉報

ID:401564 發(fā)表于 2024-6-19 11:53 | 顯示全部樓層
那是你沒有認真看數(shù)據(jù)手冊,STC的8G系列目前都是10位,你要是用16位計算對了,那就是你代碼錯了
回復

使用道具 舉報

ID:857072 發(fā)表于 2024-6-19 12:03 來自觸屏版 | 顯示全部樓層
有效值是十位,但是寄存器是高八位和低八位 兩個八位的寄存器合起來你讀寄存器的時候它是16位的值
回復

使用道具 舉報

ID:123289 發(fā)表于 2024-6-20 20:20 | 顯示全部樓層
為何不求助于手冊呢?
回復

使用道具 舉報

ID:675287 發(fā)表于 2024-6-21 08:31 | 顯示全部樓層
10位的,但是數(shù)據(jù)可以舍棄后兩位變成8位,如果不需要那么高的精度的話,也可以16位,高六位為0
回復

使用道具 舉報

ID:624769 發(fā)表于 2024-6-22 20:21 | 顯示全部樓層
你沒發(fā)現(xiàn)你以為的16位 最低的 6 位 始終始終是 0 么?
要按你這樣就算 16位 的話,你再 左移個16位,就成32位ADC了, STC能吹上天了。
回復

使用道具 舉報

ID:69038 發(fā)表于 2024-6-23 21:54 | 顯示全部樓層
STC的ADC是10位或12位。比如8H1K08、8H1K28系列為10位,而8H1K08T、8H3K、8H4K、8H8K系列為12位。
但你是要用16位(ADC_RES、ADC_RESL從高到低bit15:bit0)去讀取。
你要是設(shè)成左對齊(ADCCFG^RESFMT=0),低6位(ADC_RESL的bit5:bit0)或低4位(ADC_RESL的bit3:bit0)全是0,
你要是設(shè)成右對齊(ADCCFG^RESFMT=1),則高6位(ADC_RES的bit15:bit10)或高4位(ADC_RES的bit15:bit12)全是0,
如果要求不高,也可以設(shè)為左對齊,只讀取高8位即ADC_RES
強烈建議你認真讀一下手冊中的ADC相關(guān)章節(jié)。。
回復

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表