我要努力工作,加油!

STC12C5A60S2 单片机的A/D转换c语言实例

		发表于: 2018-08-14 22:29:17 | 已被阅读: 30 | 分类于: 单片机
		

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
) 输出到串口。