(基于51核的STC12C5A60S2,keil uvision5 mdk 5.25 编译)
#include <STC12C5A60S2.h>
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag
#define ADC_START 0x08 //ADC start control bit
#define ADC_SPEEDLL 0x00 //420 cLOCks
#define ADC_SPEEDL 0x20 //280 clocks
#define ADC_SPEEDH 0x40 //140 clocks
#define ADC_SPEEDHH 0x60 //70 clocks
#define ADC_CH1 0x01 //选择通道1
typedef unsigned char u8;
sbit BEEP = P1 ^ 0; //置1则响
void delay_2ms(unsigned long int time) //2ms的基
{
unsigned long int i;
for (i = 0; i < time * 100; i++);
}
void UART1_Init()
{
SCON = 0x50;
EA = 1;
ES = 1;
TR1 = 1;
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
}
void Uart1_ISR() interrupt 4
{
ES = 0;
if (TI == 1) // 如果TI=1,则说明中断是由发送完成引发的
{
TI = 0;
}
else if (RI == 1) // 如果RI=1,则说明中断是由发送完成引发的
{
RI = 0;
}
ES = 1;
}
void ADC_Init()
{
P1ASF = 0xff; //Open 8 channels ADC function
ADC_RES = 0; //Clear previous result
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
delay_2ms(1); //ADC power-on and delay
}
u8 GetADCVal(u8 ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
ADC_CONTR &= !ADC_FLAG; //Close ADC
return ADC_RES; //Return ADC result
}
//-------------------------------------------------------------------------
void main()
{
BEEP = 0;
UART1_Init();
ADC_Init();
while (1)
{
SBUF = GetADCVal(1);
delay_2ms(100);
}
}