久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

搜索
查看: 18427|回復(fù): 52
打印 上一主題 下一主題
收起左側(cè)

STC8G1K08單片機(jī)adc采集問題

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:807182 發(fā)表于 2021-6-1 10:23 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在AD采集中,ADC_FLAG硬件不能自動(dòng)置一,但是單片機(jī)其他功能都可以用,比如定時(shí)器,PWM,都可以用,會(huì)是單片機(jī)的問題嘛
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:47286 發(fā)表于 2021-6-1 11:02 | 只看該作者
可能不是片子問題 再仔細(xì)讀一下手冊(cè) 8G系的ADC和之前的有點(diǎn)不一樣 ADC_FLAG的地址是不同的 你看下是不是沒寫對(duì)
回復(fù)

使用道具 舉報(bào)

板凳
ID:807182 發(fā)表于 2021-6-1 11:26 | 只看該作者
dzbj 發(fā)表于 2021-6-1 11:02
可能不是片子問題 再仔細(xì)讀一下手冊(cè) 8G系的ADC和之前的有點(diǎn)不一樣 ADC_FLAG的地址是不同的 你看下是不是沒 ...

這個(gè)是我定義的
#define ADC_POWER        (1<<7)        //ADC 電源
#define ADC_START        (1<<6)        //ADC 轉(zhuǎn)換啟動(dòng)控制位。自動(dòng)清0
#define ADC_FLAG        (1<<5)        //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位。軟件清0
#define ADC_EPWMT        (1<<4)        //使能 PWM 同步觸發(fā) ADC 功能






回復(fù)

使用道具 舉報(bào)

地板
ID:807182 發(fā)表于 2021-6-1 11:29 | 只看該作者
暖西夏 發(fā)表于 2021-6-1 11:26
這個(gè)是我定義的
#define ADC_POWER        (1

手冊(cè)上面也是這個(gè)樣子
回復(fù)

使用道具 舉報(bào)

5#
ID:879348 發(fā)表于 2021-6-1 11:49 | 只看該作者
應(yīng)該是沒有啟動(dòng)轉(zhuǎn)換
回復(fù)

使用道具 舉報(bào)

6#
ID:554500 發(fā)表于 2021-6-1 13:25 | 只看該作者
沒有遇到你說的情況,參考下我的:

//P3.5電壓采集
void ADC_Init()
{
        P3M1|=        1<<5;         //10高阻輸入
        P3M0&=~(1<<5);

        ADCTIM=0x3F;    //采樣時(shí)間
        ADCCFG=0x2F;    //數(shù)據(jù)右對(duì)齊,ADC時(shí)鐘SYSclk/2/(16+1)  1.0368MHZ
        IE&=~(1<<5);          //禁止ADC中斷
        ADC_CONTR&=~(1<<5); //清除轉(zhuǎn)換結(jié)束標(biāo)志位
        ADC_CONTR=0x80; //打開ADC電源
}

u16 ADC_START(u8 ADC_CHx)
{
        if(ADC_CHx>15)
                return 0;
       
        ADC_CONTR&=0xF0;
        ADC_CONTR|=ADC_CHx;
       
        ADC_CONTR|=1<<6; //開始轉(zhuǎn)換
        _nop_();
  _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_(); //ADC啟動(dòng)后,必須要延時(shí) 33.1776MHZ 10個(gè)nop大約是337.7ns

        while((ADC_CONTR&0x20)==0);
        ADC_CONTR&=~(1<<5); //清除轉(zhuǎn)換結(jié)束標(biāo)志位

        return ((u16)ADC_RES<<8)|ADC_RESL;
}


回復(fù)

使用道具 舉報(bào)

7#
ID:718536 發(fā)表于 2021-6-1 16:41 | 只看該作者
硬件連線有沒有錯(cuò)?有VREF+腳的不能懸空額。還有ADC通道有沒有設(shè)置錯(cuò)誤?數(shù)據(jù)手冊(cè)哪里不是有官方例程了嗎?還有8G1K08 是20PIN的還是8PIN的?好像8PIN的沒有ADC功能吧
回復(fù)

使用道具 舉報(bào)

8#
ID:883031 發(fā)表于 2021-6-1 18:04 | 只看該作者
應(yīng)該有例程
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2021-6-1 20:26 | 只看該作者
暖西夏 發(fā)表于 2021-6-1 11:26
這個(gè)是我定義的
#define ADC_POWER        (1

這是STC8頭文件里的相關(guān)部分,你重復(fù)定義并且是錯(cuò)的。
//ADC 特殊功能寄存器
sfr ADC_CONTR   =   0xbc;
#define ADC_POWER   0x80
#define ADC_START   0x40
#define ADC_FLAG    0x20
sfr ADC_RES     =   0xbd;
sfr ADC_RESL    =   0xbe;
sfr ADCCFG      =   0xde;
#define ADC_RESFMT  0x20
回復(fù)

使用道具 舉報(bào)

10#
ID:298713 發(fā)表于 2021-9-4 16:36 | 只看該作者
我也遇到了一模一樣的問題,讀取不到ADC_FLAG標(biāo)志位,程序一直死在了while(!(ADC_CONTR & 0x20))中。查了好幾天都沒結(jié)果。程序基本上是用的芯片規(guī)格書中的范例。我的芯片是STC8G1K08A
回復(fù)

使用道具 舉報(bào)

11#
ID:748788 發(fā)表于 2021-9-4 21:53 | 只看該作者
STC8G1K08沒有adc,有adc的是STC8G1K08a,型號(hào)后面帶a
回復(fù)

使用道具 舉報(bào)

12#
ID:624769 發(fā)表于 2021-9-4 22:01 | 只看該作者
STC8G1K08 是沒有ADC的,請(qǐng)先確認(rèn)你的單片機(jī),有ADC功能,再測(cè)試ADC功能。
回復(fù)

使用道具 舉報(bào)

13#
ID:401564 發(fā)表于 2021-9-5 00:06 | 只看該作者
188610329 發(fā)表于 2021-9-4 22:01
STC8G1K08 是沒有ADC的,請(qǐng)先確認(rèn)你的單片機(jī),有ADC功能,再測(cè)試ADC功能。

STC8G1K08-8Pin沒有ADC
STC8G1K08-20/16Pin的可都是有ADC的
回復(fù)

使用道具 舉報(bào)

14#
ID:624769 發(fā)表于 2021-9-5 17:02 | 只看該作者
Y_G_G 發(fā)表于 2021-9-5 00:06
STC8G1K08-8Pin沒有ADC
STC8G1K08-20/16Pin的可都是有ADC的

恩,重新查了一遍手冊(cè),確實(shí)如你所說,16/20 pin 的 都有ADC,只有 8 Pin的沒有ADC。
所以,樓主只要應(yīng)該 先確認(rèn)一下 他是多少 PIN 的IC ,再測(cè)試ADC.
反正,我 STC8G1K08A-8PIN 上  ADC_FLAG 沒有他說的不置位的問題,但是STC8G1K08-8PIN 上 ADC_FLAG 是不會(huì)置位的。
回復(fù)

使用道具 舉報(bào)

15#
ID:298713 發(fā)表于 2021-9-6 09:49 | 只看該作者
我用的就是后綴帶A的,芯片型號(hào)STC8G1K08A。查找芯片手冊(cè)上說明帶有6路ADC。





但就是這樣也讀取不到ADC_FLAG標(biāo)志位,程序一直死在了while(!(ADC_CONTR & 0x20))中。查了好幾天都沒結(jié)果。程序基本上是用的芯片規(guī)格書中的范例。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

16#
ID:170318 發(fā)表于 2021-9-6 10:37 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 09:49
我用的就是后綴帶A的,芯片型號(hào)STC8G1K08A。查找芯片手冊(cè)上說明帶有6路ADC。

將您的程序貼上來,估計(jì)是您的程序問題
回復(fù)

使用道具 舉報(bào)

17#
ID:298713 發(fā)表于 2021-9-6 10:43 | 只看該作者
以下是ADC采集程序:




#include        "config.h"
#include        "timer.h"
#include        "GPIO.h"
#include        "adc.h"


#define        POW_19V_ON   P54 //定義電源控制腳
#define Farad_ON  P55            //定義法拉電容供電控制腳
#define PC_OFF    P31           //定義PC斷電后的關(guān)斷信號(hào)輸出




/*************        GPIO端口功能說明        **************


本例程基于STC8G1K08A-8PIN 為主控芯片的編寫測(cè)試
1)P3.3的ADC3端采樣超級(jí)電容充放電電壓狀態(tài)
2)P3.2的ADC2端口采樣外部24V失電后下降速率。
3)P5.4使能DC_DC開關(guān)電源對(duì)PC供電。條件是P3.2失電低于22.8V使能DC_DC開始供電PC。
4)P5.5使能超級(jí)電容向外部供電。條件是P3.2采樣外部24V電壓下降到22.8V。


******************************************/






/************************ IO口輸出推挽配置 ****************************/
void        GPIO_config(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                                //結(jié)構(gòu)定義
       
        GPIO_InitStructure.Pin  = GPIO_Pin_0|GPIO_Pin_1;                                //指定要初始化的IO, GPIO_Pin_0  GPIO_Pin_1
        GPIO_InitStructure.Mode = GPIO_OUT_PP;                        //指定IO推挽的輸入或輸出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
       
        GPIO_InitStructure.Pin  = GPIO_Pin_4|GPIO_Pin_5;                                //指定要初始化的IO, GPIO_Pin_4  GPIO_Pin_5
        GPIO_InitStructure.Mode = GPIO_OUT_PP;                        //指定IO推挽的輸入或輸出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
        GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);        //初始化
}




/********************* 配置P3.2與P3.3的ADC端口浮空輸入 **************************/


void        GPIO_config_HighZ(void)
{
       
        GPIO_InitTypeDef        GPIO_InitStructure;                                //結(jié)構(gòu)定義
       
        GPIO_InitStructure.Pin  = GPIO_Pin_2|GPIO_Pin_3;                                //指定要初始化的IO, GPIO_Pin_2, GPIO_Pin_3
        GPIO_InitStructure.Mode = GPIO_HighZ;                        //指定IO浮空輸入方式
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
       
}




/******************* AD配置函數(shù) *******************/
void        ADC_config(void)
{
        ADC_InitTypeDef                ADC_InitStructure;                //結(jié)構(gòu)定義
        ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模擬信號(hào)采樣時(shí)間控制, 0~31(注意: SMPDUTY 一定不能設(shè)置小于 10)
        ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道選擇時(shí)間控制 0(默認(rèn)),1
        ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道選擇保持時(shí)間控制 0,1(默認(rèn)),2,3
        ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X16T;                //設(shè)置 ADC 工作時(shí)鐘頻率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
        ADC_InitStructure.ADC_Power     = ENABLE;                                //ADC功率允許/關(guān)閉        ENABLE,DISABLE
        ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC結(jié)果調(diào)整,右對(duì)齊        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
        ADC_InitStructure.ADC_Polity    = Polity_0;                        //指定中斷優(yōu)先級(jí)(低到高)  Polity_0,Polity_1,Polity_2,Polity_3
        ADC_InitStructure.ADC_Interrupt = DISABLE;                        //中斷允許        ENABLE,DISABLE
        ADC_Inilize(&ADC_InitStructure);                                        //初始化


       
//          ADCCFG = 0x26;    // 轉(zhuǎn)換數(shù)據(jù)右對(duì)齊,設(shè)置AD工作時(shí)鐘頻率 SYSclk/2/6
//          P_SW2 |= 0x80;   //打開操作特殊功能寄存器
//          ADCTIM = 0x3f;
//          P_SW2 |= 0x7f;   //關(guān)閉操作特殊功能寄存器
}




/******************** 主函數(shù)**************************/
void main(void)
{
        u16 DC_Data = 0;                   //AD轉(zhuǎn)換數(shù)據(jù)緩沖
        u16 DC_Data24V = 0;
               


        GPIO_config();
        Timer_config();
        GPIO_config_HighZ();
        ADC_config();
       
       
       
        EA = 1;          //開放所有中斷
        TR1 = 1;         //允許定時(shí)器1運(yùn)行
        PC_OFF = 0;      //不激活觸發(fā)PC關(guān)閉信號(hào)
        POW_19V_ON = 1;  //打開19V的DC_DC電源
        Farad_ON = 0;
       


        while(1)
        {
               
                        ADC_CONTR = 0x82;  //打開AD轉(zhuǎn)換電源,選擇AD的第二通道
                ADC_CONTR |= 0x40;  //啟動(dòng)AD轉(zhuǎn)換
               
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
       
                while(!(ADC_CONTR & 0x20));  //查詢轉(zhuǎn)換結(jié)束標(biāo)志
                ADC_CONTR &= (~0x20);          //清除轉(zhuǎn)換標(biāo)志
               
                DC_Data = ((u16)ADC_RES << 8) | ADC_RESL;        //ADC_RES強(qiáng)制轉(zhuǎn)換成16位,與低八位轉(zhuǎn)換數(shù)據(jù)邏輯或后生成最終轉(zhuǎn)換數(shù)據(jù)
               
                DC_Data24V = DC_Data*6;    //24v分壓取樣比例為6,,真實(shí)值為DC_Data的6倍
                      if(DC_Data24V < 24)
                         PC_OFF = 1;              //點(diǎn)亮一個(gè)LED
                      else
                         PC_OFF = 0;       
        }
       
}




回復(fù)

使用道具 舉報(bào)

18#
ID:298713 發(fā)表于 2021-9-6 10:47 | 只看該作者
以下的電路圖:


回復(fù)

使用道具 舉報(bào)

19#
ID:298713 發(fā)表于 2021-9-6 13:43 | 只看該作者
編寫了一段中斷程序并開放ADC中斷,在中斷內(nèi)清除ADC_FLAG,點(diǎn)亮LED。就這樣也行不通,真心懷疑這個(gè)帶“A”后綴的MCU與不帶“A”后綴的是一伙的
void  ADC_VECTOR_int (void) interrupt  ADC_VECTOR
{
                 P31 = 1;                       //點(diǎn)亮LED
                ADC_CONTR &= (~0x20);          //清除轉(zhuǎn)換標(biāo)志
         
}

回復(fù)

使用道具 舉報(bào)

20#
ID:170318 發(fā)表于 2021-9-6 14:02 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 13:43
編寫了一段中斷程序并開放ADC中斷,在中斷內(nèi)清除ADC_FLAG,點(diǎn)亮LED。就這樣也行不通,真心懷疑這個(gè)帶“A” ...

帶“A”的與不帶“A”的不一樣,前者有ADC功能
回復(fù)

使用道具 舉報(bào)

21#
ID:170318 發(fā)表于 2021-9-6 14:27 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 10:43
以下是ADC采集程序:

P3.3和P3.2端口要設(shè)置成“高阻”,轉(zhuǎn)換通道也沒有開
給個(gè)參考一下,結(jié)果取多少位自己去弄
void P33_ADC()                                                    //P3.3檢測(cè)
{
        P3M1=0x08;                           //P3.3高阻輸入模式,P3.0-3.2為推挽
        P3M0=0x00;
        P_SW2|=0x80;
        ADCTIM=0x3f;
        P_SW2&=0x7f;
        ADCCFG=0x0f;                   //設(shè)置ADC時(shí)鐘為系統(tǒng)頻率的/2/16
        ADC_CONTR=0x80;                //使能ADC模塊
        _nop_();
        _nop_();
        ADC_RES=0;                           //清除結(jié)果
        ADC_CONTR|=0x03;               // 設(shè)定轉(zhuǎn)換的通道,P3.3是0011
        ADC_CONTR|=0x40;                     // 開始AD轉(zhuǎn)換,即ADC_START=1
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));    //  等待轉(zhuǎn)換完成 ,即ADC_FLAG=1
        ADC_CONTR&=~0x20;              //  清零 即D3位start清零,D4位轉(zhuǎn)換結(jié)束標(biāo)志位ADC_flag清零
        V_C=ADC_RES;                         //  取高八位
        P3M1=0x00;
        P3M0=0x00;
}

void P32_ADC()                                                    //P3.2檢測(cè)
{
        P3M1=0x04;                           //P3.2高阻輸入模式,P3.0-3.2為推挽
        P3M0=0x00;
        P_SW2|=0x80;
        ADCTIM=0x3f;
        P_SW2&=0x7f;
        ADCCFG=0x0f;                   //設(shè)置ADC時(shí)鐘為系統(tǒng)頻率的/2/16
        ADC_CONTR=0x80;                //使能ADC模塊
        _nop_();
        _nop_();
        ADC_RES=0;                           //清除結(jié)果
        ADC_CONTR|=0x02;               // 設(shè)定轉(zhuǎn)換的通道,P3.2是0010
        ADC_CONTR|=0x40;                     // 開始AD轉(zhuǎn)換,即ADC_START=1
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));    //  等待轉(zhuǎn)換完成 ,即ADC_FLAG=1
        ADC_CONTR&=~0x20;              //  清零 即D3位start清零,D4位轉(zhuǎn)換結(jié)束標(biāo)志位ADC_flag清零
        V_A=ADC_RES;                         //  取高八位
        P3M1=0x00;
        P3M0=0x00;
}
回復(fù)

使用道具 舉報(bào)

22#
ID:624769 發(fā)表于 2021-9-6 15:08 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 10:43
以下是ADC采集程序:

ADC_CONTR = 0x82;  //打開AD轉(zhuǎn)換電源,選擇AD的第二通道
ADC_CONTR |= 0x40;  //啟動(dòng)AD轉(zhuǎn)換

你嘗試合并成  ADC_CONTR  = 0xC2;  試試看,
我用  STC8G1K08A  作了好幾個(gè)東西,都沒有這個(gè)問題。
不過我的代碼是  C + 匯編 混合編寫的,就不發(fā)上來了,
不過,你要是有興趣的話,可以跟我說一下。
回復(fù)

使用道具 舉報(bào)

23#
ID:298713 發(fā)表于 2021-9-6 15:58 | 只看該作者
void        GPIO_config_HighZ(void)
{
        
        GPIO_InitTypeDef        GPIO_InitStructure;                                //結(jié)構(gòu)定義
        
        GPIO_InitStructure.Pin  = GPIO_Pin_2|GPIO_Pin_3;                                //指定要初始化的IO, GPIO_Pin_2, GPIO_Pin_3
        GPIO_InitStructure.Mode = GPIO_HighZ;                        //指定IO浮空輸入方式
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化
        
}
以上代碼就是配置GPIO的AD輸入模式的。
至于ADC_CONTR = 0x82;  ADC_CONTR |= 0x40; 合并寫成ADC_CONTR = 0xc2,沒什么區(qū)別,剛開始就是這么寫的,燒寫后還是原樣。
回復(fù)

使用道具 舉報(bào)

24#
ID:624769 發(fā)表于 2021-9-6 16:40 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 15:58
void        GPIO_config_HighZ(void)
{
        

STC8G1K08A 自帶仿真功能,建議你仿真一下看看,具體問題出在哪里。看你的電路圖,3.0,3.1也沒有占用,完全可以仿真查原因。
回復(fù)

使用道具 舉報(bào)

25#
ID:298713 發(fā)表于 2021-9-6 18:57 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 15:58
void        GPIO_config_HighZ(void)
{
        

我把你的程序稍微改了下AD采樣通道,成以下形式。如果采樣成功則點(diǎn)亮一個(gè)LED,很遺憾沒看到led亮起來,問題還是老問題,程序死在了 while(!(ADC_CONTR & 0x20));這條語句上。

void main(void)
{
        u16 DC_Data = 0;                   //AD轉(zhuǎn)換數(shù)據(jù)緩沖       
        EA = 1;          //開放所有中斷       
        P31 = 0;      //led熄滅

        while(1)
        {
       
        P3M1=0x0C;                      //P3.3高阻輸入模式,P3.0-3.2為推挽
        P3M0=0x00;
        P_SW2|=0x80;
        ADCTIM=0x3f;
        P_SW2|=0x7f;
        ADCCFG=0x2f;                   //設(shè)置ADC時(shí)鐘為系統(tǒng)頻率的/2/16
        ADC_CONTR=0x80;                //使能ADC模塊
        NOP(100);
      
        ADC_RES=0;                           //清除結(jié)果
        ADC_CONTR|=0x02;               // 設(shè)定轉(zhuǎn)換的通道,P3.3是0011
        ADC_CONTR|=0x40;                     // 開始AD轉(zhuǎn)換,即ADC_START=1
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));    //  等待轉(zhuǎn)換完成 ,即ADC_FLAG=1
        ADC_CONTR&=~0x20;              //  清零 即D3位start清零,D4位轉(zhuǎn)換結(jié)束標(biāo)志位ADC_flag清零
        DC_Data=ADC_RES;                         //  取高八位
        P3M1=0x00;
        P3M0=0x00;
        P31 = 1;          //點(diǎn)亮一個(gè)LED
                         
     }
回復(fù)

使用道具 舉報(bào)

26#
ID:298713 發(fā)表于 2021-9-6 19:16 | 只看該作者
188610329 發(fā)表于 2021-9-6 16:40
STC8G1K08A 自帶仿真功能,建議你仿真一下看看,具體問題出在哪里。看你的電路圖,3.0,3.1也沒有占用, ...

STC8G1K08A仿真不支持,STC官方的ISP下載器“仿真器使用說明”中表述:


回復(fù)

使用道具 舉報(bào)

27#
ID:624769 發(fā)表于 2021-9-6 19:30 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 19:16
STC8G1K08A仿真不支持,STC官方的ISP下載器“仿真器使用說明”中表述:



如上圖, 可以的
回復(fù)

使用道具 舉報(bào)

28#
ID:401564 發(fā)表于 2021-9-6 22:45 | 只看該作者
wjw7680 發(fā)表于 2021-9-6 18:57
我把你的程序稍微改了下AD采樣通道,成以下形式。如果采樣成功則點(diǎn)亮一個(gè)LED,很遺憾沒看到led亮起來,問 ...

P_SW2|=0x7f;??這是干嘛使的?
不應(yīng)該是P_SW2&=0x7f;的嗎?
P3M1=0x00;
P3M0=0x00;??這又是干嘛?傳統(tǒng)端口不一定能點(diǎn)亮LED的,運(yùn)氣好的會(huì)亮,運(yùn)氣不好就不亮,除非你有上拉電阻
回復(fù)

使用道具 舉報(bào)

29#
ID:624769 發(fā)表于 2021-9-6 23:15 | 只看該作者
Y_G_G 發(fā)表于 2021-9-6 22:45
P_SW2|=0x7f;??這是干嘛使的?
不應(yīng)該是P_SW2&=0x7f;的嗎?
P3M1=0x00;

你可以看他前面的電路圖, 他接了 NPN的三級(jí)管,2uA的 電流夠了。
回復(fù)

使用道具 舉報(bào)

30#
ID:298713 發(fā)表于 2021-9-7 16:56 | 只看該作者
問題已經(jīng)解決,感謝各位的相助。由于對(duì)AD轉(zhuǎn)換后的數(shù)值計(jì)算錯(cuò)誤,導(dǎo)致后面的判斷出錯(cuò)。以為點(diǎn)不亮LED是程序死在了while判斷轉(zhuǎn)換標(biāo)志內(nèi)。下面是修改后的主函數(shù):
void main(void)
{
        u16 DC_Data = 0;         //AD轉(zhuǎn)換數(shù)據(jù)緩沖
        float  REF = (5.0/1024.0);   //10位AD的最小量化值
        float  DC_Data24V = 0;

        while(1)
        {       
                DC_Data = Get_ADCResult(2);
                               
                DC_Data24V = DC_Data*REF*6;  //AD轉(zhuǎn)換數(shù)值*最小量化值再*分壓比。   24v分壓取樣比例為6,,真實(shí)值為DC_Data的6倍
                if(DC_Data24V < 24)
                        PC_OFF = 1;              //點(diǎn)亮一個(gè)LED
                else
                        PC_OFF = 0;               
        }
       
}


問題雖然解決了,但是疑問還存在。

while(!(ADC_CONTR & 0x20));                        //查詢轉(zhuǎn)換結(jié)束標(biāo)志
if((ADC_CONTR & 0x20) == 1)PC_OFF = 1;        //點(diǎn)亮一個(gè)LED
ADC_CONTR &= (~0x20);          //清除轉(zhuǎn)換標(biāo)志
以上三條語句中,中間一條if語句始終執(zhí)行不到,也看不到LED被點(diǎn)亮證明AD轉(zhuǎn)換ADC_FLAG標(biāo)志已經(jīng)被置1。個(gè)人猜測(cè)這標(biāo)志極可能AD轉(zhuǎn)換結(jié)束置1后,如果被查詢就自動(dòng)清零了。

另外,STC仿真問題。如果能仿真,這個(gè)問題早就解決了,純粹盲人摸象。按照STC官方ISP燒寫器中“仿真器使用說明”,只有個(gè)別MCU能仿真。后來不死心,在列表中找到自己的MCU型號(hào)添加,設(shè)置好USB端口號(hào)與波特率,在Keil根目錄的INC文件夾中也看到了STC的頭文件列表。Keil5的Debug選項(xiàng)中配置Use:Keil Monitor-51 Driver。點(diǎn)開仿真燒寫入目標(biāo)MCU,但最后還是死在這個(gè)對(duì)話框上。



回復(fù)

使用道具 舉報(bào)

31#
ID:624769 發(fā)表于 2021-9-7 21:28 | 只看該作者
wjw7680 發(fā)表于 2021-9-7 16:56
問題已經(jīng)解決,感謝各位的相助。由于對(duì)AD轉(zhuǎn)換后的數(shù)值計(jì)算錯(cuò)誤,導(dǎo)致后面的判斷出錯(cuò)。以為點(diǎn)不亮LED是程序 ...



仿真里你選錯(cuò)了, 要選 STC,如上圖。


回復(fù)

使用道具 舉報(bào)

32#
ID:401564 發(fā)表于 2021-9-8 09:07 | 只看該作者
wjw7680 發(fā)表于 2021-9-7 16:56
問題已經(jīng)解決,感謝各位的相助。由于對(duì)AD轉(zhuǎn)換后的數(shù)值計(jì)算錯(cuò)誤,導(dǎo)致后面的判斷出錯(cuò)。以為點(diǎn)不亮LED是程序 ...

仿真?我現(xiàn)在都還不會(huì)用那個(gè)軟件,倒是Multisim用得多,也就這玩意仿真是最接近實(shí)際結(jié)果的
就單片機(jī)而言,沒有什么比開發(fā)板加萬用表更好用的了,只可惜沒有錢買示波器
回復(fù)

使用道具 舉報(bào)

33#
ID:298713 發(fā)表于 2021-9-8 09:29 | 只看該作者
188610329 發(fā)表于 2021-9-7 21:28
仿真里你選錯(cuò)了, 要選 STC,如上圖。

選了STC Monitor-51 Driver這選項(xiàng)也不能仿真


回復(fù)

使用道具 舉報(bào)

34#
ID:624769 發(fā)表于 2021-9-8 14:01 | 只看該作者
wjw7680 發(fā)表于 2021-9-8 09:29
選了STC Monitor-51 Driver這選項(xiàng)也不能仿真

仿真時(shí),你的代碼里不能用到 3.0 3.1, 不然仿真會(huì)失敗, 因?yàn)檎麄(gè)仿真的通信,是通過3.0 3.1 建立的. 目標(biāo)單片機(jī)也要燒好仿真系統(tǒng),  在Keil 里面 芯片設(shè)置也要設(shè)置為 STC8G1K08A。 STC8G系列 我基本都仿真過,都是可以的,穩(wěn)定性也很好, 比STC8F系列好很多, 你可以再試試。
回復(fù)

使用道具 舉報(bào)

35#
ID:298713 發(fā)表于 2021-9-10 13:31 | 只看該作者
使用一般外購的下載器(CH340或者PL2303)在KEIL中按下“CTRL+F5”后都會(huì)出現(xiàn)如下提示"Connection to target system lost! Please reset your target systemp and try again"。出現(xiàn)仿真失敗,鏈接不上目標(biāo)單元。
打STC官方技術(shù)支持后客服反饋,要使用STC官方的U8W(編程/仿真器)進(jìn)行仿真并設(shè)置直通模式才可以。






后來向STC官方技術(shù)支持免費(fèi)申請(qǐng)快遞了一個(gè)U8W,這才算解決芯片仿真問題
keil_v5.14.2
U8W固件版本:7.3.12U


回復(fù)

使用道具 舉報(bào)

36#
ID:298713 發(fā)表于 2021-9-11 13:29 | 只看該作者
鄭重道歉,由于建立STC工程的時(shí)失誤沒有添加啟動(dòng)文件“STARTUP.A51”文件,導(dǎo)致硬件仿真時(shí)候出現(xiàn)如下問題。

實(shí)際上使用CH340與PL2303的USB轉(zhuǎn)串口工具都是可以進(jìn)行硬件仿真的(親測(cè))。
回復(fù)

使用道具 舉報(bào)

37#
ID:298713 發(fā)表于 2021-9-11 13:31 | 只看該作者
STC工具使用說明書-20210701.pdf (7.39 MB, 下載次數(shù): 132)
回復(fù)

使用道具 舉報(bào)

38#
ID:624769 發(fā)表于 2021-9-13 01:09 | 只看該作者
Y_G_G 發(fā)表于 2021-9-8 09:07
仿真?我現(xiàn)在都還不會(huì)用那個(gè)軟件,倒是Multisim用得多,也就這玩意仿真是最接近實(shí)際結(jié)果的
就單片機(jī)而言,沒 ...

STC的 硬件仿真, 嚴(yán)格來講已經(jīng)不算"仿真"了, 他是直接在單片機(jī)里面Debug你的程序,可以單步執(zhí)行,實(shí)時(shí)驗(yàn)證走到每一步的時(shí)候內(nèi)存值,寄存器值,以及IO口的狀態(tài)。對(duì)于不確定程序哪部分出問題時(shí)候,這種硬件仿真真的很直觀。畢竟當(dāng)你 MOV P1,@R1   的時(shí)候,直接能看到  R1 是 多少  @R1 是多少, P1 是多少,而且都是在單片機(jī)里面的真實(shí)值。 那么最后點(diǎn)亮了幾個(gè)LED, 你都能 直接明白是地址取錯(cuò)了,還是值算錯(cuò)了,還是P1寄存器不對(duì),還是說硬件電路不對(duì),可以省心很多。
回復(fù)

使用道具 舉報(bào)

39#
ID:695275 發(fā)表于 2021-10-27 15:41 | 只看該作者
用的USB_TTL仿真,總是出現(xiàn)這個(gè)錯(cuò)誤,一個(gè)下午沒有解決,顯示出現(xiàn)錯(cuò)誤,然后KEIL直接出錯(cuò)關(guān)閉
回復(fù)

使用道具 舉報(bào)

40#
ID:998702 發(fā)表于 2021-12-30 20:18 來自手機(jī) | 只看該作者
wjw7680 發(fā)表于 2021-9-11 13:29
鄭重道歉,由于建立STC工程的時(shí)失誤沒有添加啟動(dòng)文件“STARTUP.A51”文件,導(dǎo)致硬件仿真時(shí)候出現(xiàn)如下問題。 ...

我也遇到了和樓主一樣的無法連接的問題,沒去注意這個(gè)a51,回家試試。真是,白天仿真得好好的,晚上忽然就不行了,差點(diǎn)沒氣死
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天射影院 | 久久小视频 | 国产精品久久久久久 | 国产美女黄色片 | 91毛片网| 日韩亚洲欧美综合 | 日本不卡免费新一二三区 | 中文精品视频 | 99国产视频 | 伊人网在线看 | 四季久久免费一区二区三区四区 | 亚洲成人蜜桃 | 99精品视频免费观看 | jlzzjlzz国产精品久久 | 成人av一区二区亚洲精 | 国产亚洲欧美另类一区二区三区 | 日韩在线欧美 | 另类专区成人 | 亚洲一区中文字幕在线观看 | 黄a在线观看| 中文字幕中文字幕 | 欧美日韩在线一区二区三区 | 一区欧美 | 亚洲天堂av一区 | 日日操操 | 国产乱人伦精品一区二区 | 久久久久久久久久久久一区二区 | 99国产精品一区二区三区 | 久久无毛 | 国产福利在线 | 黄色大片网 | 亚洲精品欧美一区二区三区 | 欧美成人一区二区 | 久久综合伊人 | 一区二区三区国产在线观看 | 国产自产21区 | 亚洲成人自拍 | 国产精品久久久久久久久久久新郎 | 色视频一区二区 | 日本一区二区三区免费观看 | 国产精品久久久久久久久久久久冷 |