STC单片机的AD采样引脚悬空时,所得的值是多少?

2019-07-16 05:41发布

高手求助,我的STC单片机在AD引脚悬空时,所测得的值是0,请问这个正确吗?
而且我没有传感器,请问用电池可以模拟传感器的电压信号吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
luoshuwen
2019-07-16 08:10
#include <REG51.h>                        //通用89C51头文件
#include <INTRINS.H>                      //
#define FOSC  11059200L
#define BAUD  9600
typedef unsigned char BYTE;
typedef unsigned int  WORD;
sbit    LDR       = P1^0;

/* Declare SFR associated with the ADC */
sfr ADC_CONTR      = 0XC5;
sfr ADC_DATA       = 0XC6;
sfr ADC_LOW2       = 0XBE;
sfr P1M0           = 0X91;
sfr P1M1           = 0X92;
/* Define ADC operation const for ADC_CONTR */
#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

/* Millisecond function  */
void MSDELAY(WORD M)
{
  WORD S;
  while(--M !=0)
  {
    for(S=0; S<125; S++);
  }
}
/* Microsecond function *
void USDELAY(WORD U)
{
  while(--U);
}
/* Initial ADC sfr */
void INIT_ADC()
{
  P1M0 = 0X01;
  P1M1 = 0X00;
  ADC_DATA = 0;
  ADC_CONTR = ADC_POWER |ADC_SPEEDLL;
  MSDELAY(2);
}
/* Get ADC result */
BYTE GET_ADC(BYTE CH)
{
  ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | CH;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  while (!(ADC_CONTR & ADC_FLAG));
  ADC_CONTR &= ~ADC_FLAG;
  return ADC_DATA;
}
/*  Initial UART */
void INIT_UART()
{
   SCON = 0X50;
   TMOD = 0X20;
   TH1 = TL1 = -(FOSC/12/32/BAUD);
   PCON = 0X80;
   TR1  = 1;
   ES = 1;
   EA =1;
}
/* UART Send one byte data to PC */
void UART_TX(BYTE dat)
{
   SBUF = dat;
   while(!TI);
   TI = 0;
}
/* main function */
void main (void)
{
  INIT_ADC();
  INIT_UART();
  while(1)
  {
    GET_ADC(0);
    UART_TX(ADC_DATA);
    MSDELAY(400);
  }
}


这个事我用数据手册上的稍微改了一下,用p1.0做AD,其他还是正常的IO,主要是P1M1 P1M0,和CH,看数据手册有详细说明,我用的是STC 12LE5604AD AD老坏,不知是什么原因,如果你也用这个系列的成功了请给我说一下的的方案谢谢!

一周热门 更多>