搜档网
当前位置:搜档网 › STC12C5410AD内部AD使用

STC12C5410AD内部AD使用

/************ STC12C5410AD学习板 ******************/
/*功能描述:STC12C5410AD内部AD使用 */
/*作者:郑 文 ClimberWin */
/*编写时间:2008.8.14 */
/*功能:使用内部AD功能,并把采集的数据传给PC机 */
/*外部晶振22.1184 MHZ */
/*把波特率设置为51的12倍,现在波特率 115200 */
/*注意:需要测得实际电源电压作为参考电压 */
/*L7805稳压在4.88-4.98V之间,根据实际测量确定电压 */
/**************************************************/
/*修改时间: */
/*修改内容: */


#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

sbit PWM0 = P3^7; //pwm口定义green
sbit PWM1 = P3^5; //pwm口定义blue
sbit PWM2 = P2^0; //pwm口定义
sbit PWM3 = P2^4; //pwm口定义red

sbit AD0 = P1^0; //电位器和外部电压输入共用同一AD口,用跳帽来选择。
sbit AD1 = P1^1; //用做AD按键的输出口。
sbit AD2 = P1^2; //温度测量,测量热敏电阻的参数。


void Delay1ms(unsigned int count);
void init_rs232(void); //串口初始化
void STC12C5410AD_int(void); //AD初始化


void Delay1ms(unsigned int count);
void init_rs232(void); //串口初始化

/***************************1秒延时子程序start***************************/
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;ifor(j=0;j<120;j++);
}

/***************************1秒延时子程序end***************************/

/* 串口通信初始化设置 */
void init_rs232(void)
{
AUXR=74; //设置波特率是普通51的12倍 ,允许AD中断
SCON=0x50;
PCON=0x00;
TH1=0xFA; //波特率 115200 22.1184MHZ 时候(F4 4800 FA 9600 FDH 9600)*12
TL1=0XFA;
TMOD=0X20;
TR1=1;
}


/*STC12C5410AD的AD初始化程序*/
// ADC_CONTR=[ADC_POWER] [SPEED1] [SPEED0] [ADC_FLAG] [ADC_START] [CHS2] [CHS1] [CHS0]
// ADC_DATA 高8位 ADC_LOW2 //低2位
void STC12C5410AD_int(void)
{
ADC_CONTR=0x80 ; //开转换电源 设置转换速度为1080个时钟周期转换一次,选择AD0通道
Delay1ms(20); //稍做延时,大于1ms就可以

/*I/O口作为AD使用,设置漏极开路模式*/
P1M0=1;
P1M1=1;
}

/*******************************************/

/*****************主程序************************/
main()
{ //main start

uint ad_temp; //AD数据保存的地址
float f; //存放AD采集过来的数据,格式00.000,总共5位

Delay1ms(5000);

init_rs232(); //串口初始化
TI=1;

printf("STC12C5410AD学习板 AD测试程序\n");
printf("ClimberWin 2008.8.14\n\n");
Delay1ms(5000);


printf("串口初

始化成功\n\n");
Delay1ms(5000);



/*************************************************/

STC12C5410AD_int(); //AD初始化
printf("A/D初始化成功\n");
printf("选择通道AD0\n\n");
printf("进入AD采集程序\n\n");
while(1)
{
ADC_CONTR|=0x08; //开始AD转换(ADC_START=1)

// ADC_CONTR|=0x01; //选择AD1通道,AD按键
// ADC_CONTR|=0x02; //选择AD2通道

while(!(ADC_CONTR & 0x10)); //判断AD是否转换结束

ADC_CONTR&=0xef;//转换结束后标志位ADC_FLAG清零
//AD采集进来的数据进行转化
ad_temp=ADC_LOW2;
ad_temp=ad_temp+ ((uint)ADC_DATA)<<2;
f=(4.961*ad_temp)/1024; //基准电压调整,用7805做稳压需要测得实际电源电压
//通过串口打印AD采集进来的数据
printf("%.3f ",f); //串口传输AD采集数据
Delay1ms(5000);
}

} //mian end


相关主题