STC12C5A60S2 单片机的A/D转换c语言实例
发表于: 2018-08-14 22:29:17 | 已被阅读: 103 | 分类于: 单片机
STC12C5A60S2 单片机带有的 A/D 转换口在

当 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 值,并将其通过