您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > STC12C5A60S2单片机的AD转换(8位)
A/D转换测试程序(ADC查询方式)#include“stc12c5a.h”//头文件在STC公司主页上下载#include”intrins.h”//与STC12C5A60S2单片机ADC相关的寄存器说明//SfrADC_CONTR=0xBC;//AD转换控制寄存器SfrADC_RES=0xBD;//AD转换结果寄存器高SfrADC_RESL=0xBE;//AD转换结果寄存器低SfrP1ASF=0x9D;//P1口模拟转换功能控制寄存器SfrAURX1=0xA2;//AD转换结果存储方式控制位#defineADC_POWER0x80//ADC电源开#defineADC_FLAG0x10//ADC结束标志位#defineADC_START0x08//ADC启动控制位设为开#defineADC_SPEEDLL0x00//设为540个时钟周期ADC一次#defineADC_SPEEDL0x20//设为360个时钟周期ADC一次#defineADC_SPEEDH0x40//设为180个时钟周期ADC一次#defineADC_SPEEDHH0x60//设为90个时钟周期ADC一次voidAD_init(void);voiddelay(unsignedinta);unsignedintAD_get(unsignedcharn);floatAD_work(unsignedcharn);voidmain(){unsignedchari;AD_init();while(1){for(i=0;i8;i++){AD_work(i);delay(20);}}}unsignedintAD_get(unsignedcharn)//第n通道ADC采样函数{unsignedintadc_data;ADC_RES=0;//清零ADC_CONTR=ADC_POWER|ADC_SPEEDLL|n|ADC_START;//打开AD转换电源、设定转换速度、设定通道号、AD转换开始_nop_();_nop_();_nop_();_nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR寄存器while(!(ADC_CONTR&ADC_FLAG));//等待转换完成adc_data=ADC_RES;//转换结果计算,取8位结果ADC_CONTR&=~ADC_FLAG;//关闭AD转换,ADC_FLAG位由软件清0returnadc_data;//返回ADC的值}floatAD_work(unsignedcharn){floatAD_val;//定义处理后的数值AD_val为浮点数unsignedchari;for(i=0;i100;i++)AD_val+=AD_get(n);//转换100次求平均值(提高精度)AD_val/=100;AD_val=(AD_val*5)/256;//AD的参考电压是单片机上的5v,所以乘5即为实际电压值returnAD_val;}voidAD_init(void){P1ASF=0xff;//P1口全部作为模拟功能A/D使用ADC_RES=0;//清零转换结果寄存器高8位ADC_CONTR=ADC_POWER|ADC_SPEEDLL;delay(2);//等待1ms,让AD电源稳定}voiddelay(unsignedinta){unsignedinti;while(a--){i=5000;while(i--);}}
本文标题:STC12C5A60S2单片机的AD转换(8位)
链接地址:https://www.777doc.com/doc-4954735 .html