标题:
STC12C5A60S2中ADC应用之一--查询法
[打印本页]
作者:
51hei单片
时间:
2016-3-13 02:15
标题:
STC12C5A60S2中ADC应用之一--查询法
#include "intrins.h"
/*Declare SFR associated with the ADC */
sfr ADC_CONTR = 0xBC; //ADC控制寄存器
sfr ADC_RES = 0xBD; //AD结果寄存器
sfr ADC_LOW2 = 0xBE; //AD结果寄存器 ADC low 2-bit result register
sfr P1ASF = 0x9D; //P1模拟功能设置寄存器
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x10 //AD转换结束标志位
#define ADC_START 0x08 //AD转换开始控制位
#define ADC_SPEEDLL 0x00 //420时钟周期转换一次
#define ADC_SPEEDL 0x20 //280时钟周期转换一次
#define ADC_SPEEDH 0x40 //140时钟周期转换一次
#define ADC_SPEEDHH 0x60 //70时钟周期转换一次void Delay(uint n);//延时
void InitADC();//ADC寄存
uchar GetADCResult(uchar ch);//ADC数据转换
void Delay1(uint n)//延时
{
uint x;
while (n--)
{
x = 5000;
while (x--);
}
}
void InitADC()//ADC寄存器初始化
{
P1ASF = 0x80; //打开P17 ADC通道
ADC_RES = 0; //Clear previous result
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay1(2); //ADC power-on and delay
}
uchar GetADCResult(uchar ch)//ADC数据转换
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//相应置位:电源+420时钟周期转换一次+通道+转换开始
_nop_(); //适当延时
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
ADC_CONTR &= ~ADC_FLAG; //清除ADC
return ADC_RES; //返回ADC数据
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1