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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18201|回復: 52
打印 上一主題 下一主題
收起左側

STC8G1K08單片機adc采集問題

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

使用道具 舉報

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

使用道具 舉報

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

這個是我定義的
#define ADC_POWER        (1<<7)        //ADC 電源
#define ADC_START        (1<<6)        //ADC 轉換啟動控制位。自動清0
#define ADC_FLAG        (1<<5)        //ADC 轉換結束標志位。軟件清0
#define ADC_EPWMT        (1<<4)        //使能 PWM 同步觸發 ADC 功能






回復

使用道具 舉報

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

手冊上面也是這個樣子
回復

使用道具 舉報

5#
ID:879348 發表于 2021-6-1 11:49 | 只看該作者
應該是沒有啟動轉換
回復

使用道具 舉報

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

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

        ADCTIM=0x3F;    //采樣時間
        ADCCFG=0x2F;    //數據右對齊,ADC時鐘SYSclk/2/(16+1)  1.0368MHZ
        IE&=~(1<<5);          //禁止ADC中斷
        ADC_CONTR&=~(1<<5); //清除轉換結束標志位
        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; //開始轉換
        _nop_();
  _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_(); //ADC啟動后,必須要延時 33.1776MHZ 10個nop大約是337.7ns

        while((ADC_CONTR&0x20)==0);
        ADC_CONTR&=~(1<<5); //清除轉換結束標志位

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


回復

使用道具 舉報

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

使用道具 舉報

8#
ID:883031 發表于 2021-6-1 18:04 | 只看該作者
應該有例程
回復

使用道具 舉報

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

這是STC8頭文件里的相關部分,你重復定義并且是錯的。
//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
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

12#
ID:624769 發表于 2021-9-4 22:01 | 只看該作者
STC8G1K08 是沒有ADC的,請先確認你的單片機,有ADC功能,再測試ADC功能。
回復

使用道具 舉報

13#
ID:401564 發表于 2021-9-5 00:06 | 只看該作者
188610329 發表于 2021-9-4 22:01
STC8G1K08 是沒有ADC的,請先確認你的單片機,有ADC功能,再測試ADC功能。

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

使用道具 舉報

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

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

使用道具 舉報

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





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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

將您的程序貼上來,估計是您的程序問題
回復

使用道具 舉報

17#
ID:298713 發表于 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斷電后的關斷信號輸出




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


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


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






/************************ IO口輸出推挽配置 ****************************/
void        GPIO_config(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                                //結構定義
       
        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;                                //結構定義
       
        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配置函數 *******************/
void        ADC_config(void)
{
        ADC_InitTypeDef                ADC_InitStructure;                //結構定義
        ADC_InitStructure.ADC_SMPduty   = 31;                //ADC 模擬信號采樣時間控制, 0~31(注意: SMPDUTY 一定不能設置小于 10)
        ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道選擇時間控制 0(默認),1
        ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道選擇保持時間控制 0,1(默認),2,3
        ADC_InitStructure.ADC_Speed     = ADC_SPEED_2X16T;                //設置 ADC 工作時鐘頻率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
        ADC_InitStructure.ADC_Power     = ENABLE;                                //ADC功率允許/關閉        ENABLE,DISABLE
        ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC結果調整,右對齊        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
        ADC_InitStructure.ADC_Polity    = Polity_0;                        //指定中斷優先級(低到高)  Polity_0,Polity_1,Polity_2,Polity_3
        ADC_InitStructure.ADC_Interrupt = DISABLE;                        //中斷允許        ENABLE,DISABLE
        ADC_Inilize(&ADC_InitStructure);                                        //初始化


       
//          ADCCFG = 0x26;    // 轉換數據右對齊,設置AD工作時鐘頻率 SYSclk/2/6
//          P_SW2 |= 0x80;   //打開操作特殊功能寄存器
//          ADCTIM = 0x3f;
//          P_SW2 |= 0x7f;   //關閉操作特殊功能寄存器
}




/******************** 主函數**************************/
void main(void)
{
        u16 DC_Data = 0;                   //AD轉換數據緩沖
        u16 DC_Data24V = 0;
               


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


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




回復

使用道具 舉報

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


回復

使用道具 舉報

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

回復

使用道具 舉報

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

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

使用道具 舉報

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

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

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

使用道具 舉報

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

ADC_CONTR = 0x82;  //打開AD轉換電源,選擇AD的第二通道
ADC_CONTR |= 0x40;  //啟動AD轉換

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

使用道具 舉報

23#
ID:298713 發表于 2021-9-6 15:58 | 只看該作者
void        GPIO_config_HighZ(void)
{
        
        GPIO_InitTypeDef        GPIO_InitStructure;                                //結構定義
        
        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,沒什么區別,剛開始就是這么寫的,燒寫后還是原樣。
回復

使用道具 舉報

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

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

使用道具 舉報

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

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

void main(void)
{
        u16 DC_Data = 0;                   //AD轉換數據緩沖       
        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;                   //設置ADC時鐘為系統頻率的/2/16
        ADC_CONTR=0x80;                //使能ADC模塊
        NOP(100);
      
        ADC_RES=0;                           //清除結果
        ADC_CONTR|=0x02;               // 設定轉換的通道,P3.3是0011
        ADC_CONTR|=0x40;                     // 開始AD轉換,即ADC_START=1
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));    //  等待轉換完成 ,即ADC_FLAG=1
        ADC_CONTR&=~0x20;              //  清零 即D3位start清零,D4位轉換結束標志位ADC_flag清零
        DC_Data=ADC_RES;                         //  取高八位
        P3M1=0x00;
        P3M0=0x00;
        P31 = 1;          //點亮一個LED
                         
     }
回復

使用道具 舉報

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

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


回復

使用道具 舉報

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



如上圖, 可以的
回復

使用道具 舉報

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

P_SW2|=0x7f;??這是干嘛使的?
不應該是P_SW2&=0x7f;的嗎?
P3M1=0x00;
P3M0=0x00;??這又是干嘛?傳統端口不一定能點亮LED的,運氣好的會亮,運氣不好就不亮,除非你有上拉電阻
回復

使用道具 舉報

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

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

使用道具 舉報

30#
ID:298713 發表于 2021-9-7 16:56 | 只看該作者
問題已經解決,感謝各位的相助。由于對AD轉換后的數值計算錯誤,導致后面的判斷出錯。以為點不亮LED是程序死在了while判斷轉換標志內。下面是修改后的主函數:
void main(void)
{
        u16 DC_Data = 0;         //AD轉換數據緩沖
        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轉換數值*最小量化值再*分壓比。   24v分壓取樣比例為6,,真實值為DC_Data的6倍
                if(DC_Data24V < 24)
                        PC_OFF = 1;              //點亮一個LED
                else
                        PC_OFF = 0;               
        }
       
}


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

while(!(ADC_CONTR & 0x20));                        //查詢轉換結束標志
if((ADC_CONTR & 0x20) == 1)PC_OFF = 1;        //點亮一個LED
ADC_CONTR &= (~0x20);          //清除轉換標志
以上三條語句中,中間一條if語句始終執行不到,也看不到LED被點亮證明AD轉換ADC_FLAG標志已經被置1。個人猜測這標志極可能AD轉換結束置1后,如果被查詢就自動清零了。

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



回復

使用道具 舉報

31#
ID:624769 發表于 2021-9-7 21:28 | 只看該作者
wjw7680 發表于 2021-9-7 16:56
問題已經解決,感謝各位的相助。由于對AD轉換后的數值計算錯誤,導致后面的判斷出錯。以為點不亮LED是程序 ...



仿真里你選錯了, 要選 STC,如上圖。


回復

使用道具 舉報

32#
ID:401564 發表于 2021-9-8 09:07 | 只看該作者
wjw7680 發表于 2021-9-7 16:56
問題已經解決,感謝各位的相助。由于對AD轉換后的數值計算錯誤,導致后面的判斷出錯。以為點不亮LED是程序 ...

仿真?我現在都還不會用那個軟件,倒是Multisim用得多,也就這玩意仿真是最接近實際結果的
就單片機而言,沒有什么比開發板加萬用表更好用的了,只可惜沒有錢買示波器
回復

使用道具 舉報

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

選了STC Monitor-51 Driver這選項也不能仿真


回復

使用道具 舉報

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

仿真時,你的代碼里不能用到 3.0 3.1, 不然仿真會失敗, 因為整個仿真的通信,是通過3.0 3.1 建立的. 目標單片機也要燒好仿真系統,  在Keil 里面 芯片設置也要設置為 STC8G1K08A。 STC8G系列 我基本都仿真過,都是可以的,穩定性也很好, 比STC8F系列好很多, 你可以再試試。
回復

使用道具 舉報

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






后來向STC官方技術支持免費申請快遞了一個U8W,這才算解決芯片仿真問題
keil_v5.14.2
U8W固件版本:7.3.12U


回復

使用道具 舉報

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

實際上使用CH340與PL2303的USB轉串口工具都是可以進行硬件仿真的(親測)。
回復

使用道具 舉報

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

使用道具 舉報

38#
ID:624769 發表于 2021-9-13 01:09 | 只看該作者
Y_G_G 發表于 2021-9-8 09:07
仿真?我現在都還不會用那個軟件,倒是Multisim用得多,也就這玩意仿真是最接近實際結果的
就單片機而言,沒 ...

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合伊人一区二区三 | 欧美性网站| 一区二区三区久久 | 国产精品综合 | 羞羞视频网 | 欧美日韩不卡在线 | aaa天堂 | 欧美精品日韩精品国产精品 | 国产精品av久久久久久毛片 | 五月婷亚洲 | 日韩视频区 | 精品成人一区二区 | 日韩人体在线 | 欧美日韩在线一区 | 亚洲成人免费 | 亚洲国产网站 | 成人激情视频免费观看 | 91视频网址 | 天天影视网天天综合色在线播放 | 亚洲天堂免费在线 | 国产亚洲精品久久久久久牛牛 | 欧美激情视频一区二区三区免费 | 黄色大片观看 | 日韩成人免费 | 91av在线电影| 欧美成人激情视频 | 国产欧美一区二区三区在线看 | 九九久久国产 | 男女视频网站 | 亚洲第一女人av | 91免费在线视频 | 性做久久久久久免费观看欧美 | 99av成人精品国语自产拍 | 国产乱码一二三区精品 | 91精品免费 | 午夜影院 | 成人福利在线 | 国产午夜精品久久久 | www.国产| 99久久视频 | 日韩视频免费看 |