#define uchar unsigned char #define uint unsigned int
#define ADC_POWER 0X80 #define ADC_FLAG 0x10 #define ADC_START 0X08 #define ADC_SPEEDLL 0X00 #define ADC_SPEEDL 0X20 #define ADC_SPEEDH 0X40 #define ADC_SPEEDHH 0X60
sfr ADC_CONTR=0XBC; sfr ADC_RES=0XBD; sfr ADC_LOW2=0XBE; sfr PLASF=0X9D; sfr AUXR1=0XA2;
void InitUart(); void InitADC();
void SendData(uchar dat); uint GetADCResult(uchar ch); void Delay(uint n);
void ShowResult(uchar ch);
void delay1(uint z);
void main() { InitUart(); InitADC(); while(1) {
ShowResult(3);
delay1(2000); delay1(2000); delay1(2000); delay1(2000); delay1(2000); delay1(2000); } }
void InitUart() { SCON=0X5a; TMOD=0X20; TH1=0xfd; // 利用T1的溢出率来定义波特率 TL1=0xfd; TR1=1; }
void InitADC() { PLASF=0XFF; ADC_CONTR=ADC_POWER|ADC_SPEEDLL&(~ADC_FLAG); ADC_RES=0; ADC_LOW2=0; Delay(2); }
uint GetADCResult(uchar ch) { ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(!(ADC_CONTR & ADC_FLAG)); //转换完成
ADC_CONTR=ADC_CONTR & (~ADC_FLAG); //标志位复位0 return(ADC_RES*4+ADC_LOW2); //10位分辨率,返回值 }
void ShowResult(uchar ch) { float V_data; uint ADC_data; uchar ge,shifen,baifen;
SendData(ch); ADC_data=GetADCResult(ch); V_data=(ADC_data*5*10)/1024; ADC_data=V_data; ge=ADC_data/10; shifen=ADC_data%100/10; baifen=ADC_data%10; SendData(ge); SendData(shifen); SendData(baifen); }
void SendData(uchar dat) { SBUF=dat; while(!TI); TI=0; }
void Delay(uint n) { uint x; while(n--) { x=5000;
while(x--); } }
void delay1(uint z) { uint x,y; for(x=z;x>0;x--) for(y=250;y>0;y--); }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务