AD转换程序无法转换出正确的数据,求解决

2019-07-15 12:47发布

串口助手无法显示监控如何解决

/***************/
uint8 g,m;
uint8 datah0=0;
uint8 datah1=0;
uint8 datah2=0;
uint8 datah3=0;
uint8 tab[4];
void StartUART( void );   
void R_S_Byte(uint8 R_Byte);
void chuantongda(uint8 k);
void ADC_Init0(void)
{
P1ASF=0x0F;//P1.0,P1.1,P1.2,P1.3口作为模拟功能AD使用。
ADC_CONTR=0X80;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD转换控制位初始化为0,选择P1.0作为AD输入来用。
EA=1;
EADC=1;//中断允许控制为
AUXR1=0X00;//低两位存放在ADCRESL低两位中,高八位存放在ADCRES中
//        PADC=0;
}
void ADC_Init1(void)
{
ADC_CONTR=0X81;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD转换控制位初始化为0,选择P1.1作为AD输入来用。
}
void ADC_Init2(void)
{
ADC_CONTR=0X82;
}
void ADC_Init3(void)
{
ADC_CONTR=0X83;
}
void display(uint8 num)
{
uint8 hundred,ten,one;
float a;
int        b;
a=(num+0.005)/51;
a=a*100;
b=a;
hundred=b/100;
ten=b%100/10;
one=b%10;
}


void main()
{       
uint8 i;
        uint16 j=0;
StartUART();
    ADC_Init0();
        init_io();
while(1)  
{ uint8 tab[4];
chuantongda(0);
R_S_Byte(datah0);
chuantongda(1);
R_S_Byte(datah1);
  chuantongda(2);
  R_S_Byte(datah2);
  chuantongda(3);
   R_S_Byte(datah3);
                                  
}

}

void adc_isr() interrupt 5  
{
  if(ADC_CONTR==0X88)
  {
ADC_CONTR=0X80;
_nop_();
_nop_();                           
_nop_();
_nop_();



datah0=ADC_RES;
  // R_S_Byte(datah0);
ADC_RES=0; }

/***************************/
if(ADC_CONTR==0X89)
{
ADC_CONTR=0X81;
_nop_();
_nop_();
_nop_();
_nop_();
datah1=ADC_RES;
// R_S_Byte(datah1);
ADC_RES=0;
}
if(ADC_CONTR==0X8A)
{
ADC_CONTR=0X82;           
_nop_();
_nop_();
_nop_();
_nop_();
datah2=ADC_RES;
// R_S_Byte(datah2);
ADC_RES=0;
}
if(ADC_CONTR==0X8B)
{
ADC_CONTR=0X83;
_nop_();
_nop_();
_nop_();
_nop_();
datah3=ADC_RES;
        //R_S_Byte(datah3);
ADC_RES=0;
}
                                  
                       
}
void StartUART( void )
{
    //波特率9600
    SCON = 0x50;
    TMOD = 0x20;
    TH1 = 0xFD;
    TL1 = 0xFD;
    PCON = 0x00;
    TR1 = 1;
}
//************************************通过串口将接收到数据发送给PC端**************************************
void R_S_Byte(uint8 R_Byte)
{
    SBUF = R_Byte;
    while( ti == 0 );    //查询法
    TI = 0;
}

         void chuantongda(uint8 k)
         {                 g=k;
   switch(g)
          {
          case (0):ADC_CONTR=0X88;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.0作为AD输入来用。
_nop_();
_nop_();
_nop_();
_nop_(); while(ADC_FLAG==1);        delay();

tab[0]=datah0;           // R_S_Byte(datah0);
P2=tab[0];
          case (1):ADC_CONTR=0X89;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.0作为AD输入来用。
_nop_();
_nop_();
_nop_();
_nop_();while(ADC_FLAG==1);        delay();
tab[1]=datah1; //R_S_Byte(datah1);

          case (2):ADC_CONTR=0X8A;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.0作为AD输入来用。
_nop_();
_nop_();
_nop_();
_nop_();while(ADC_FLAG==1);        delay();
tab[2]=datah2;// R_S_Byte(datah2);

          case (3):ADC_CONTR=0X8B;//打开ADC转换电源,540个周期转换一次,初始化ADC标志位为0,AD开始转换,选择P1.0作为AD输入来用。
_nop_();
_nop_();
_nop_();
_nop_();while(ADC_FLAG==1);        delay();
tab[3]=datah3; //        R_S_Byte(datah3);
}


         }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
langzitianya
1楼-- · 2019-07-15 14:08
你可以下载官方的实例进行测试,里边还包括了库函数呢!

STC15系列库函数与例程测试版V1.0.rar 下载积分: 积分 -1 分

2.25 MB, 下载次数: 4, 下载积分: 积分 -1 分

乐开怀儿
2楼-- · 2019-07-15 17:58
langzitianya 发表于 2016-10-24 18:12
你可以下载官方的实例进行测试,里边还包括了库函数呢!

有没有STC12系列的
langzitianya
3楼-- · 2019-07-15 22:29
 精彩回答 2  元偷偷看……

一周热门 更多>