|
本帖最后由 zhth1979 于 2022-1-7 11:31 編輯
前兩天發(fā)了求助帖,但沒有什么找到這方面的例程 ,自己摸索寫了一段三通道輪詢方式檢測ADC的值,好像不正確,請大家指點!單片機型號:STC8H3K32S2
11.png (61.85 KB, 下載次數(shù): 30)
下載附件
2022-1-5 09:24 上傳
12.png (129.04 KB, 下載次數(shù): 50)
下載附件
2022-1-5 09:25 上傳
33444.png (5.29 KB, 下載次數(shù): 41)
下載附件
2022-1-6 15:49 上傳
#include "AD.h"
unsigned char ad_flag=1;
unsigned char ad_result=0;
int ad_show1=0;
int ad_show2=0;
unsigned char ADC_Conv(unsigned char channel)
{
// unsigned char ad_result=0;
P1M1 = 0x07; P1M0 = 0x00; //設(shè)置 P1.0 P1.1 P1.2 為 ADC 輸入口
ADC_SetChannel(channel); //1.選通道
P_SW2|=0X80;
ADCTIM=0X3F; //設(shè)置ADC內(nèi)部時序
P_SW2&=0X7F;
ADCCFG=0X0F; //設(shè)置ADC時鐘為系統(tǒng)時鐘/2/16
ADC_CONTR = 0x80 | channel; ADC_CONTR|=0X40; //啟動AD轉(zhuǎn)換
_nop_();
_nop_();
while(!(ADC_CONTR&0x20)); //查詢ADC完成標(biāo)志
ADC_CONTR &=~0X20; //清完成標(biāo)志
ad_result=(ADC_RES<<8)|ADC_RESL; //讀取ADC結(jié)果
_nop_();
_nop_();
return ad_result;
}
void Timer0Init()
{
TMOD &= 0XF0; //設(shè)置定時器模式
TMOD |=0X01; //設(shè)置定時器16位不可重裝載模式
TH0=0XFC; //設(shè)置定時初值
TL0=0X18; //設(shè)置定時初值
TF0=0; //清除TF0標(biāo)志
ET0=1; //定時器0的中斷開關(guān)
TR0=1; //定時器0開始計時
}
void timer0_ISR() interrupt 1
{
static unsigned int timer0Cnt;
timer0Cnt++;
if(timer0Cnt>=1000)
{
timer0Cnt=0;
ad_flag=1;
}
TR0=0;
TH0=0XFC;
TL0=0X18;
TR0=1;
}
void adc()
{
unsigned int ad_0,ad_1,ad_2;
unsigned char channel=0;
Timer0Init();
EA=1;
if(ad_flag==1)
{
ad_flag=0;
ad_0=ADC_Conv(0);
ad_1=ADC_Conv(1);
ad_2=ADC_Conv(2);
ad_show1 = ad_0- ad_1; //壓力傳感器差分值
ad_show2 = ad_2/4096*2.5; //測量電池電壓
}
}
主函數(shù)再調(diào)用 adc(); ad_show1和ad_show2兩個值。
|
|