完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用STC15W单片机里面自带的AD转换,测P1口八路通道各自的电压,但数据都是乱码来的,明明AD启动了,为什么采集不到电压呢?用串口显示 #include "AD.H" #include "UART.h" /*******AD转换初始化*********/ void InitADC() { P1ASF = 0xff; //设置P1口为AD口 ADC_RES = 0; //清除结果寄存器 CLK_DIV &= ADRJ; //ADRJ=0; ADC_CONTR = 0x80;//ADC上电并设置好频率 Delayms_ADC(4); //ADC上电需延时稳定 } /*******读取AD转换的结果*********/ unsigned int GetADCResult(unsigned char CHS) //CHS为模拟输入通道选择 { unsigned int ADC_DAT; ADC_CONTR = ADC_POWER | ADC_SPEEDLL | CHS | ADC_START; _nop_(); //等待4个NOP _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成 ADC_CONTR=0x80; ADC_DAT = ADC_RES*4+ADC_RESL; return(ADC_DAT); //返回ADC结果 } /******在12MH的晶振下的毫秒延时函数***********/ void Delayms_ADC(unsigned int k) { unsigned int i,j; for(i=k;i>0;i--) for(j=747;j>0;j--); } #include "UART.h" unsigned char code_data=9; void Init_UART() { SCON = 0x50; //工作方式1,REN=1(允许串行接收),无校验,8位可变波特率 T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值 T2H = (65536 - (FOSC/4/BAUD))>>8; AUXR = 0x14; //T2为1T模式, 并启动定时器2(T2R=1,T2x12=1) AUXR |= 0x01; //选择定时器2为串口1的波特率发生器(SIST2=1) } /***********发送单字节**************/ void SendData(unsigned char dat) { SBUF = dat; //写数据到UART数据寄存器 while(!ti); //等待发送数据完成 TI=0; //清除发送完成标志位 } /***********发送一个字符串**************/ void SendString(unsigned char *s) { while(*s!=' |