您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > STC12C5A60S2单片机的10位AD转换程序
STC12C5A60S2单片机的10位AD转换程序#includestc12c5a.h//头文件在STC公司主页上下载#includestdio.h//输入输出函数#includeintrins.h//------------------------------------------------------------------------------voidAD_init();//初始化ADvoidserial_init();voiddelay(unsignedinta);floatAD_work(unsignedcharchannel);unsignedintAD_get(unsignedcharchannel);//------------------------------------------------------------------------------voidmain()//主程序{AD_init();//A/D转换初始化serial_init();//串口初始化while(1){unsignedchari;for(i=0;i8;i++)//循环发送P1.0-P1.7的转换数值{TI=1;//使用printf函数前须先将发送标志位TI置1printf(TheP1.%bdvoltageis%f\n,i,AD_work(i));TI=0;delay(1000);//延时约1s}}}//------------------------------------------------------------------------------unsignedintAD_get(unsignedcharchannel){ADC_CONTR=0x88|channel;//开启AD转换10001000即POWERSPEED1SPEED0ADC_FLAGADC_STARTCHS2CHS1CHS0_nop_();_nop_();_nop_();_nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR寄存器while(!(ADC_CONTR&0x10));//等待转换完成ADC_CONTR&=0xe7;//关闭AD转换,ADC_FLAG位由软件清0return(ADC_RES*4+ADC_RESL);//返回AD转换完成的10位数据(16进制)}//------------------------------------------------------------------------------floatAD_work(unsignedcharchannel){floatAD_val;//定义处理后的数值AD_val为浮点数unsignedchari;for(i=0;i100;i++)AD_val+=AD_get(channel);//转换100次求平均值(提高精度)AD_val/=100;AD_val=(AD_val*5)/1024;//AD的参考电压是单片机上的5v,所以乘5即为实际电压值returnAD_val;}//------------------------------------------------------------------------------voiddelay(unsignedinta)//延时约1ms{unsignedinti;while(--a!=0)for(i=600;i0;i--);//1T单片机i=600,若是12T单片机i=125}//------------------------------------------------------------------------------voidserial_init(){TMOD=0x20;TH1=0xfd;TL1=0xfd;//设置9600波特率SCON=0x50;//串口方式1,允许接收TR1=1;}//------------------------------------------------------------------------------voidAD_init(){P1ASF=0xff;//P1口全部作为模拟功能AD使用ADC_RES=0;//清零转换结果寄存器高8位ADC_RESL=0;//清零转换结果寄存器低2位ADC_CONTR=0x80;//开启AD电源delay(2);//等待1ms,让AD电源稳定}/*
本文标题:STC12C5A60S2单片机的10位AD转换程序
链接地址:https://www.777doc.com/doc-2860757 .html