欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: stc8單片機ADC 不起作用 [打印本頁]

作者: hejj    時間: 2020-11-2 19:32
標題: stc8單片機ADC 不起作用
void main()
{
        P3M0 = 0x00;
        P3M1 = 0X04;                   //設置P3^2為高阻輸入
        ADCCFG = 0x0F;                   //轉換結果左對齊,時鐘16分頻給ADC
        ADC_CONTR = 0x8A;      //使能并啟動ADC模塊,選擇P3^2口為ADC輸入口
        ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40|0X0A ;    //啟動 AD 轉換
        _nop_();
        _nop_();
        _nop_()
        _nop_();
        _nop_();
        P11 = 0;
        while(!(ADC_CONTR & 0X20));
        ADC_CONTR &= ~0X20;
        while(1)
        {
                P11 = !P11;
                delay();
        }
}

上面程序有啥錯,P3.2作ADC輸入口,程序一直運行不到最后while(1)循環里面


作者: csmyldl    時間: 2020-11-3 00:32
說明 while(!(ADC_CONTR & 0X20));這一循環無法結束
作者: wulin    時間: 2020-11-3 08:18
如果是用Keil調試, 這里while(!(ADC_CONTR & 0X20));會過不去,可人為操作轉換完成標志1,燒程序時再改回來。
        while(!(ADC_CONTR & 0X20))
        {
                ADC_CONTR|=0X20;
        }
        ADC_CONTR &= ~0X20;
作者: Y_G_G    時間: 2020-11-3 08:18
如果你對于STC單片機操作已經差不多了,那以后編程就直接到下載器那復制代碼就可以了,對于一些常用操作,比如:ADC,定時器,PWM,都是有的
作者: univers    時間: 2020-11-3 10:17
火龍電子有,人家寫的非常好,自已摸,太費時間了。
作者: yinnan128    時間: 2020-12-7 20:26
univers 發表于 2020-11-3 10:17
火龍電子有,人家寫的非常好,自已摸,太費時間了。

紅龍電子怎么找呢
作者: ax6808    時間: 2022-3-5 23:26
本帖最后由 ax6808 于 2022-3-5 23:48 編輯

剛好近日用到STC8G1K08(3.3V)的ADC:     測3.7V鋰電池電壓,代碼今天已最優化,并有最為詳細的說明(兩通道中之一的代碼),供參考:
//   ADC設置(查詢方式):  
    ADCCFG = 0x2f;  //設置ADC時鐘為系統時鐘/2/16 ,右對齊;
  //P_SW2 |= 0x80;  //訪問擴展RAM寄存器(ADCTIM)需先將P_SW2的BIT7置1才可正常讀寫; 后面P_SW2 &= 0x7f釋放非必要!
  //ADCTIM = 0x30;  //用復位默認值0X2A(0010,1010)可去掉這2句;設置ADC時序控制2A~3F,采樣時間0A~1F; 低5位不能小于默認值A;
                              //P32ADC10:測BAT1一半分壓值);                              
    ADC_CONTR = 0xCA;          //3句合并ok!;復位000x,0000;開ADC電源(B7:1)、啟動AD轉換(B6:1)、選通道A(P32);
    _nop_(),_nop_();                 //參考手冊這里空操作2次;
    while (!(ADC_CONTR & 0x20));          //查詢ADC完成標志;  手冊:檢測工作約耗時1mS;
    ADC_CONTR &= ~0x20;                   //清完成標志;
    //ADC_CONTR &= 0x7F;                   //可選ADC轉換完即斷電更省電;        20220305;ok
    res = (ADC_RES << 8) | ADC_RESL;  //讀取ADC結果(右對齊:高2位低8位,前面自動補0);
    BAT1 = (int)(3300L*res/1024L);        //計算監測電壓mV;特別注意數據類型后面帶L(因I易混淆)!及VDD3.3V參考電壓穩定性;


作者: ax6808    時間: 2022-3-6 00:20
我又仔細看了一下你的代碼:
經過試驗驗證,運行沒任何問題(前提:頭文件等都完備、I/O口設置正確);
你前面ADC沒有錯,轉換完了也給了個標志!
但是:1.你最后死循環并沒有用到ADC轉換結果數據呀!
          2.除 P3.0 和 P3.1 外,其余所有 I/O 口上電后的狀態均為高阻輸入狀態,用戶在使用 I/O 口時必須先設置 I/O 口模式;你只設了P3口,P1口未重新設置就是高阻輸入,所以不能輸出驅動P11 LED!
         應加上:P1M0=0x00;P1M1=0x00;就對了

#include "STC8G_H.h"              //主要頭文件;
#include "intrins.h"                 //_nop_() 等要;
#include "stdio.h"                    //pringf()等要;

作者: Dxiaofeng    時間: 2022-3-7 19:10
p3口不能用于adc輸入,p0和p1才是吧
作者: ax6808    時間: 2022-3-19 00:38
Dxiaofeng 發表于 2022-3-7 19:10
p3口不能用于adc輸入,p0和p1才是吧

看手冊吧, 20Pin的STC8G就有十5路ADC呢!!!8H少4路換為PWM稍有不同.




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1