STC12C5A60S2 单片机带有的 A/D 转换口在 P1
口,是 10 位的转换器,速度可达250kHz。结构如下:
当 AUXR1.1/ADRJ = 0 时,转换结果的组合如下:
当 AUXR1.1/ADRJ = 0 时,转换结果的组合如下:
STC12C5A60S2 的 AD 转换相关寄存器如下:
以下是一个测试 demo
\#include "intrins.h"
void Delay(WORD n)
{
WORD x;
while(n--){
x = 5000;
while(x--);
}
}
void InitADC()
{
P1ASF = 0xff; // 8 个通道都开
ADC_RES = 0;
ADC_CONTR = ADC_POWER|ADC_SPEEDLL;
Delay(2);
}
// 获取高 8 位的 adc 值
BYTE GetADCResH8bit(BYTE ch)
{
ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ch;
_nop_(); _nop_();_nop_();_nop_(); // 等待转换完成
while(!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
return ADC_RES;
}
// 获取 10 位 adc
WORD GetADCRes(BYTE ch)
{
WORD res = 0;
res = GetADCResH8bit(ch);
res <<= 2;
res |= ADC_LOW2;
return res;
}
void main()
{
InitADC();
InitUart(); // 参考之前的章节
WORD res = GetADCRes(0); // 得到通道 0 的 adc 值
printf("adc: %d\n", (int)res);
while(1);
}
以上代码的功能就是再启动时,从通道 0 读取 adc 值,并将其通过 printf
(可参考:stc 51 单片机使用 printf) 输出到串口。