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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4300|回復: 9
打印 上一主題 下一主題
收起左側(cè)

stc8單片機ADC 不起作用

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:837933 發(fā)表于 2020-11-2 19:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void main()
{
        P3M0 = 0x00;
        P3M1 = 0X04;                   //設置P3^2為高阻輸入
        ADCCFG = 0x0F;                   //轉(zhuǎn)換結(jié)果左對齊,時鐘16分頻給ADC
        ADC_CONTR = 0x8A;      //使能并啟動ADC模塊,選擇P3^2口為ADC輸入口
        ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40|0X0A ;    //啟動 AD 轉(zhuǎn)換
        _nop_();
        _nop_();
        _nop_()
        _nop_();
        _nop_();
        P11 = 0;
        while(!(ADC_CONTR & 0X20));
        ADC_CONTR &= ~0X20;
        while(1)
        {
                P11 = !P11;
                delay();
        }
}

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:235200 發(fā)表于 2020-11-3 00:32 | 只看該作者
說明 while(!(ADC_CONTR & 0X20));這一循環(huán)無法結(jié)束
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2020-11-3 08:18 | 只看該作者
如果是用Keil調(diào)試, 這里while(!(ADC_CONTR & 0X20));會過不去,可人為操作轉(zhuǎn)換完成標志1,燒程序時再改回來。
        while(!(ADC_CONTR & 0X20))
        {
                ADC_CONTR|=0X20;
        }
        ADC_CONTR &= ~0X20;
回復

使用道具 舉報

地板
ID:401564 發(fā)表于 2020-11-3 08:18 | 只看該作者
如果你對于STC單片機操作已經(jīng)差不多了,那以后編程就直接到下載器那復制代碼就可以了,對于一些常用操作,比如:ADC,定時器,PWM,都是有的
回復

使用道具 舉報

5#
ID:382454 發(fā)表于 2020-11-3 10:17 | 只看該作者
火龍電子有,人家寫的非常好,自已摸,太費時間了。
回復

使用道具 舉報

6#
ID:608872 發(fā)表于 2020-12-7 20:26 | 只看該作者
univers 發(fā)表于 2020-11-3 10:17
火龍電子有,人家寫的非常好,自已摸,太費時間了。

紅龍電子怎么找呢
回復

使用道具 舉報

7#
ID:975054 發(fā)表于 2022-3-5 23:26 | 只看該作者
本帖最后由 ax6808 于 2022-3-5 23:48 編輯

剛好近日用到STC8G1K08(3.3V)的ADC:     測3.7V鋰電池電壓,代碼今天已最優(yōu)化,并有最為詳細的說明(兩通道中之一的代碼),供參考:
//   ADC設置(查詢方式):  
    ADCCFG = 0x2f;  //設置ADC時鐘為系統(tǒng)時鐘/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轉(zhuǎn)換(B6:1)、選通道A(P32);
    _nop_(),_nop_();                 //參考手冊這里空操作2次;
    while (!(ADC_CONTR & 0x20));          //查詢ADC完成標志;  手冊:檢測工作約耗時1mS;
    ADC_CONTR &= ~0x20;                   //清完成標志;
    //ADC_CONTR &= 0x7F;                   //可選ADC轉(zhuǎn)換完即斷電更省電;        20220305;ok
    res = (ADC_RES << 8) | ADC_RESL;  //讀取ADC結(jié)果(右對齊:高2位低8位,前面自動補0);
    BAT1 = (int)(3300L*res/1024L);        //計算監(jiān)測電壓mV;特別注意數(shù)據(jù)類型后面帶L(因I易混淆)!及VDD3.3V參考電壓穩(wěn)定性;

回復

使用道具 舉報

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

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

使用道具 舉報

9#
ID:942056 發(fā)表于 2022-3-7 19:10 來自觸屏版 | 只看該作者
p3口不能用于adc輸入,p0和p1才是吧
回復

使用道具 舉報

10#
ID:975054 發(fā)表于 2022-3-19 00:38 | 只看該作者
Dxiaofeng 發(fā)表于 2022-3-7 19:10
p3口不能用于adc輸入,p0和p1才是吧

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表