|
你這代碼怎么像是我當(dāng)初學(xué)C語言時的代碼?
給你一段我改過之后的代碼
注釋全在里面了,實際驗證過的/*──────────────────────────────────────────────────────────────────────────────────Stc8a4k_Adc.c文件
編寫:YGG
完成日期:20211120
功能:Stc8a系列單片機(jī)的ADC功能,采用中斷方式進(jìn)行ADC
完成狀態(tài):已經(jīng)完成
──────────────────────────────────────────────────────────────────────────────────*/
#include "Stc8a.h"
#include "Stc8a_Adc.h"
#define ADC_P10 0x80
#define ADC_P11 0x81
#define ADC_P12 0x82
#define ADC_P13 0x83
#define ADC_P14 0x84
#define ADC_P15 0x85
#define ADC_P16 0x86
#define ADC_P17 0x87
#define ADC_P1f 0x8f
#define ADC_COUNT 32
//──────────────────────────────────────────────────────────────────────────────────────────────────
unsigned char ADC_LINE; //ADC通道記錄
unsigned int ADC_AN0; //ADC0數(shù)據(jù)
unsigned int ADC_AN1; //ADC1數(shù)據(jù)
//──────────────────────────────────────────────────────────────────────────────────────────────────
void Stc8a_Adc_Init() //ADC初始化
{
unsigned int i;
P1M1|=0x03; //p1.0和p1.1用作ADC端口
ADC_CONTR=0x80; //打開adc電源
ADCCFG=0x2f; //設(shè)定ADC轉(zhuǎn)換結(jié)果保存格式,ADC時鐘選擇最慢
for(i=10000;i>0;i--); //延時一段時間
ADC_CONTR=ADC_P10; //選擇P1.f端口ADC
ADC_LINE=ADC_P10; //默認(rèn)啟動的ADC通道
ADC_CONTR|=0x40; //啟動ADC
EADC=1; //ADC中斷允許
}
//─────────────────────────────────────────────────────────────────────────────────────────────
void ADC_ISR()interrupt 5 //ADC中斷處理
{
static unsigned char count0; //ADC通道6轉(zhuǎn)換次數(shù)記錄
static unsigned char count1; //ADC通道f轉(zhuǎn)換次數(shù)記錄,內(nèi)部參考電壓通道
static unsigned long int ADC_DATA0; //ADC0數(shù)據(jù),累加
static unsigned long int ADC_DATA1; //ADCf數(shù)據(jù),累加
ADC_CONTR&=~0x20; //清除中斷標(biāo)志位
//──────────────────────────────────────────────────────────────────────────
if(ADC_LINE==ADC_P10) //檢測觸發(fā)ADC中斷的通道
{
if(count0>=ADC_COUNT) //檢測ADC轉(zhuǎn)換次數(shù)
{
ADC_AN0=ADC_DATA0/ADC_COUNT; //取平均值
ADC_DATA0=0x00; //清除ADC累加結(jié)果
count0=0x00; //清除ADC轉(zhuǎn)換次數(shù)記錄
}
ADC_DATA0+=ADC_RES*256+ADC_RESL; //ADC結(jié)果累加
count0++;
ADC_CONTR=ADC_LINE=ADC_P11; //選擇下一個ADC通道
}
//──────────────────────────────────────────────────────────────────────────
else if(ADC_LINE==ADC_P11)
{
if(count1>=ADC_COUNT)
{
ADC_AN1=ADC_DATA1/ADC_COUNT;
ADC_DATA1=0x00;
count1=0x00;
}
ADC_DATA1+=ADC_RES*256+ADC_RESL;
count1++;
ADC_CONTR=ADC_LINE=ADC_P10;
}
//──────────────────────────────────────────────────────────────────────────
ADC_CONTR|=0x40; //啟動ADC
}
//─────────────────────────────────────────────────────────────────────────────────────────────
|
|