打印
[国产单片机]

STC 12LE5604AD 接光敏电阻 学习AD,老是把ad损坏

[复制链接]
3548|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 luoshuwen 于 2012-5-23 20:52 编辑

我用的最小系统,接了个光敏电阻,MCU是3.3v的,用ams1117-3.3做电源,p1.0做AD检测,刚写入程序,ad还正常,随着环境光的变化变化,但是一旦关机从新上电,ad的数值就从f0-ff变化了,就不能正常使用了,最后在电源ams1117后面加了个1n4148压降到2.8v左右,ad口只接了104,和1k电阻后悬空从新换了块MCU,从新写入程序,不断电数据都正常,数值不断接近00,在什么都没有接的情况下,断电,从新接电后数据又变成f0-f8-ff之间变化,来回换了7、8个mcu了,没找到问题,我用5v的mcu没有出现这些问题,很稳定,为什么3.3的怎么都弄不好,请老师指点指点。
程序:

#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);
  }
}


谢谢!

11.jpg (69.81 KB )

原理图

原理图

相关帖子

沙发
luoshuwen|  楼主 | 2012-5-23 19:29 | 只看该作者
老师,别光路过,指点一下,谢谢了!

使用特权

评论回复
板凳
luoshuwen|  楼主 | 2012-5-23 19:31 | 只看该作者
谢谢老师!!!我困惑呀!

使用特权

评论回复
地板
airwill| | 2012-5-24 11:20 | 只看该作者
看来 MCU 内核应该没有坏掉.
先判断坏的情况, 到底坏成什么样了, IO口重新输入输出, 有没有坏?
其他的 AD 端口有没有坏?
是不是什么电压打坏了芯片端口, 输入回路串个保护电阻进去试试

使用特权

评论回复
5
luoshuwen|  楼主 | 2012-5-24 11:40 | 只看该作者
io口还是好的,可以控制led,但就是AD不行了,我在ad的io口上接了104,和1个1k的电阻,试了还是坏,就晕了。

使用特权

评论回复
6
airwill| | 2012-5-24 12:46 | 只看该作者
AD 端口接了 1K 电阻才和外面相连? 是不是其他 AD 口也坏了呢?

使用特权

评论回复
7
lawdge| | 2013-10-31 11:46 | 只看该作者
量一下AD电压,不能超过MCU VDD电压。

使用特权

评论回复
8
autopccopy| | 2013-11-1 13:38 | 只看该作者
图中光敏的接法理论上不会损坏MCU!

建议使用万用表监控光敏输入脚(有示波器更好)。
然后将光敏改为可调电阻试试故障会否重现?重新烧录单片机正常吗?

使用替代法检查,一定可以找到问题。

(838)

使用特权

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

本版积分规则

0

主题

6

帖子

0

粉丝