•  找回密碼
     立即注冊(cè)

    QQ登錄

    只需一步,快速開(kāi)始

    搜索
    查看: 5081|回復(fù): 2
    收起左側(cè)

    [求助]STC 12LE5604AD 接光敏電阻 學(xué)習(xí)AD,ad損壞

    [復(fù)制鏈接]
    ID:40740 發(fā)表于 2012-5-23 22:46 | 顯示全部樓層 |閱讀模式

    我用的最小系統(tǒng),接了個(gè)光敏電阻,MCU是3.3v的,用ams1117-3.3做電源,p1.0做AD檢測(cè),剛寫(xiě)入程序,ad還正常,隨著環(huán)境光的變化變化,但是一旦關(guān)機(jī)從新上電,ad的數(shù)值就從f0-ff變化了,就不能正常使用了,最后在電源ams1117后面加了個(gè)1n4148壓降到2.8v左右,ad口只接了104,和1k電阻后懸空從新?lián)Q了塊MCU,從新寫(xiě)入程序,不斷電數(shù)據(jù)都正常,數(shù)值不斷接近00,在什么都沒(méi)有接的情況下,斷電,從新接電后數(shù)據(jù)又變成f0-f8-ff之間變化,來(lái)回?fù)Q了7、8個(gè)mcu了,沒(méi)找到問(wèn)題,我用5v的mcu沒(méi)有出現(xiàn)這些問(wèn)題,很穩(wěn)定,為什么3.3的怎么都弄不好,請(qǐng)老師指點(diǎn)指點(diǎn)。
    程序:

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


    謝謝!

     

     

    回復(fù)

    使用道具 舉報(bào)

    ID:43184 發(fā)表于 2012-7-23 23:05 | 顯示全部樓層

    STK mcu

    QQ:1123803079

    回復(fù)

    使用道具 舉報(bào)

    ID:40740 發(fā)表于 2012-5-24 11:48 | 顯示全部樓層

    謝謝!老師不吝賜教!。

    回復(fù)

    使用道具 舉報(bào)

    本版積分規(guī)則

    小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

    Powered by 單片機(jī)教程網(wǎng)

    快速回復(fù) 返回頂部 返回列表