资讯详情

STC12C5A60S2单片机的10位AD转换程序

//****************************************STC12C5A60S2 AD转换***********************************************// #include"stc12c5a.h" //头文件在STC公司主页上下载 #include"stdio.h" #include"intrins.h" //------------------------------------------------------------------------------ void AD_init(); void serial_init(); void delay(unsigned int a); float AD_work(unsigned char channel); unsigned int AD_get(unsigned char channel); //------------------------------------------------------------------------------ void main() { AD_init(); //A/D转换初始化 serial_init(); //串口初始化 while(1) { unsigned char i; for(i=0;i<8;i++) //循环发送P1.0-P1.7的转换数值 { TI=1; //使用printf函数前须先将发送标志位TI置1 printf("The P1.%bd voltage is %f\n",i,AD_work(i)); TI=0; delay(1000); //延时约1s } } } //------------------------------------------------------------------------------ unsigned int AD_get(unsigned char channel) { A_COR=0x88|channel; //开启AD转换1000 1000 即POWER EED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 _nop_(); _nop_(); _nop_(); _nop_();//要经过4个时钟的延时,其值才能够保证被设置进ADC_CTR 寄存器 while(!(ADC_CONTR&0x10)); //等待转换完成 ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0 return(ADC_RES*4+ADC_RE); //返回AD转换完成的10位数据(16进制) } //------------------------------------------------------------------------------ float AD_work(unsigned char channel) { float AD_val; //定义处理后的数值AD_val为浮点数 unsigned char i; for(i=0;i<100;i++) AD_val+=AD_get(channel); //转换100次求平均值(提高精度) AD_val/=100; AD_val=(AD_val*5)/1024; //AD的是单片机上的5v,所以乘5即为实际电压值 return AD_val; } //------------------------------------------------------------------------------ void delay(unsigned int a) //延时约1ms { unsigned int i; while (--a!=0) for(i=600;i>0;i--); //1T单片机i=600,若是12T单片机i=125 } //------------------------------------------------------------------------------ void serial_init() { TMOD=0x20; TH1=0xfd; =0xfd; //设置9600波特率 SCON=0x50; //串口方式1,允许接收 TR1=1; } //------------------------------------------------------------------------------ void AD_init() { P1ASF=0xff; //P1口全部作为模拟功能AD使用 ADC_RES=0; //清零转换结果寄存器高8位 ADC_RESL=0; //清零转换结果寄存器低2位 ADC_CONTR=0x80;//开启AD电源 delay(2); //等待1ms,让AD电源稳定 } /*

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台