[信号传感和变送]

大神帮忙看下C8051F410程序下,ADC测电压,测得值一直为0X0fff满值

[复制链接]
1298|2
手机看帖
扫描二维码
随时随地手机跟帖
809965167|  楼主 | 2018-6-12 15:45 | 显示全部楼层 |阅读模式
void ADC_Init()
{
  ADC0MX    = 0x12;             //P2.2模拟输入
  ADC0CF    = 0x00;                 //转换时间周期控制,右对齐,复位值0xF0;
  ADC0CN    = 0x02;             //AD0EN=0,ADC0 Burst Mode Closed,写CNV启动中断
  ADC0TK    = 0xF9;      //Pre-tracking mode  F8  3个    F9  4个
}

void Port_IO_Init()
{
    P0MDIN    = 0xFD;         //P0.1 模拟输入 MISO  0.5不能配置成模拟输出,否则接收不到数据
        P1MDIN    = 0xFB;             //P1.2 Vref模拟输入
    P2MDIN    = 0xFB;        //P2.2 ADC电压采集输入
  
        P0MDOUT   = 0x9D;        //P0.3,P0.4Tx,P0.7LYreset P0.0(SCK),P0.2(MOSI)推免输出
    P1MDOUT   = 0x40;        //P1.6 SPI CS 推免输ru       
    P2MDOUT   = 0x1B;        //P2.0 SHT11 HTSCK,P2.1 SHT11 HTDATA,P2.3 GATE,P2.4 LY WK        
    P1SKIP    = 0x07;                 //X1,X2,Vref跳过
    P2SKIP    = 0x04;           //跳过P2.2 ADC输入
    XBR0      = 0x03;                 //UART0连接到端口
    XBR1      = 0x50;                 //使能
}
/******晶振初始化*******/
void Oscillator_Init()
{
  OSCXCN    = 0x20;           //有源晶振2分频,11059200/2
  CLKSEL    = 0x01;           //选择外部时钟
  OSCICN    = 0x00;           //关闭内部时钟
}

/********中断初始化********/
void Interrupts_Init()
{
  EIE1      = 0x08;                      //ADC转换结束中断使能
  IE        = 0x10;                          //UART0中断使能
  ES0=1;
}
void UART_Init()
{
    SCON0     = 0x10;
}

/********CPU初始化********/
void Init_Device(void)
{
  Timer_Init();
  UART_Init();
  SPI_Init();
  ADC_Init();
  Port_IO_Init();
  Oscillator_Init();
  Interrupts_Init();
  lcd_config();
}

void task()
{
     switch(UARTCmd)
      {
        case 0x36:      if(Flag){
                               Gate=0;
                               AD0INT=0; //ADC中断完成标志
                               for(i=0;i<200;i++){}///时间长了进不去中断
                              AD0EN=1;       
                       Gate=1;
                           Flag=0;   
                           }
                           else{
                                Gate=0;
                                AD0EN=0;
                                           }break;                                          
           default :       break;  
    }
}

//UART0中断
void UART0_ISR(void) interrupt 4
{
uint i;
if(RI0)
{
  UARTCmd = SBUF0;              //读缓冲区数据
  Delayms(10);     //不加延时会出错
  RI0=0;
  Flag=1;
}
}

void ADC_INTI(void) interrupt 10
{
  AD0INT=0;
  Gate=0;
  ADCtemp=(ADC0H|0xFFFF)<<8|ADC0L;
  ADCtemp=ADCtemp>>4;          //每次为连续转换1次结果8位结果
  DataTable[1]=ADCtemp;

  data_convertor( ADCtemp);  //液晶屏显示
  Display();
    Gate=1;
        Delayms(10);
}

相关帖子

809965167|  楼主 | 2018-6-12 15:48 | 显示全部楼层
sbit  Gate      = P2^3;   //外部ADC转化启动信号上升沿

使用特权

评论回复
ayb_ice| | 2018-6-13 16:36 | 显示全部楼层
ADCtemp=(ADC0H|0xFFFF)<<8|ADC0L;

ADC0H*256 | ADC0L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

21

帖子

0

粉丝