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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5470|回復: 35
收起左側

關于STC8單片機改用內部上拉電阻后每次上電按鍵INT0誤觸發1次原因探討

  [復制鏈接]
ID:975054 發表于 2022-12-20 22:56 | 顯示全部樓層 |閱讀模式
一、問題
近日碰到個奇怪的問題:STC8單片機按鍵接P32腳INT0(邊沿或下降沿),用外部上拉電阻本來很正常的,后來改用內部上拉4.1K電阻后,每次上電INT0誤觸發+1次!理應等同,已驗證內部上拉電阻設置成功,已排除其他干擾,百思不得其解!決定必須一查到底!
二、之前代碼
  1. void BOOT()                     //總初始化 最簡整理221215;      (STC8G1K08)        
  2. {                                                         
  3.     dl_ms(100);                 //上電適當延時一下好些;
  4.     P1M1=P5M1=0x00, P1=P5=0xff, //P1P5口:均設雙向置1;    其他默認;   
  5.     P3M1=0x0C;       P3 |=0xf3; //P3  口:P32按鍵、P33腳都是邊沿中斷設高阻不置1,其余雙向置1;   
  6.    
  7.     status=Kc= 0;               //初值: status工作狀態標志 (開機0/待機1/復位2), Kc短按次數);           
  8.     G=R=b=W=0, dl_ms(1000);     //開機/復位后: 綠紅藍白燈 全亮1s滅1s;
  9.     G=R=b=W=1, dl_ms(1000);     //               問題發現: 以上3行放最后面編譯代碼少1B;奇怪?   

  10.     P_SW2 |= 0x80;              //訪問XSRF先BIT7=1; 統一放前無需歸零(有外擴64K擴展RAM時才要);   
  11.     P3IE=0x0C, P1IE=0x00, P5IE=0x20; //輸入只留P32、P33、P55(其余全關);
  12.                                 //P55控制大燈W(用到if W==1讀端口還是讀引腳?先不關);
  13.     P3PU=0x04;                  //使能內部上拉電阻;
  14.     TMOD= 0x01;                 //T0:模式01;16位不自動重載(默認12T);消抖用的查詢方式;
  15.     EX0=EX1=EA =1;              //開中斷;
  16.                               
  17. }
復制代碼
三、措施對策
1、 先暫時軟件處理-1次。可以解決。但還得追究根本原因;
2、先后試了開中斷前后加空操作或足夠的延時等辦法,均無效;
3、最后,調整段落,發現將第3段代碼(最后5行)改到第2段代碼(中間3行)的前面后,居然就正常了(終于用內部上拉或外部上拉都完全一樣了)!代碼附后;
4、但還是百思不得其解! 后面有空再繼續研究,走過路過感興趣的朋友不妨一起查查具體原因。
      理論上:  上拉電阻用外接或內置完全等同, 只需注意先設置好后再開中斷;
      問題是:后2段代碼前后調換,究竟哪里不同了?  注意到編譯后代碼量還會差1B; 為什么?        
四、目前代碼
  1. void BOOT()                         //總初始化 最簡整理221217改;      (STC8G1K08)        
  2. {                                                         
  3.     dl_ms(100);                      //不變;
  4.     P1M1=P5M1=0x00, P1=P5=0xff,      //不變;   
  5.     P3M1=0x0C;       P3 |=0xf3;      //不變;   

  6.     P_SW2 |= 0x80;                   //;
  7.     P3IE=0x0C, P1IE=0x00, P5IE=0x20; //;
  8.     P3PU=0x04;                       //;
  9.     TMOD= 0x01;                      //;
  10.     EX0=EX1=EA =1;                   //開中斷; 前4行任1條放最后面多1B;奇怪?  
  11.   //以上5行改放最后每次上電int0誤觸發1次! 但加外接上拉電阻隨便幾K就不會!奇怪?
  12.    
  13.     status=Kc= 0;                    //;           
  14.     G=R=b=W=0, dl_ms(1000);          //;
  15.     G=R=b=W=1, dl_ms(1000);
  16. }
復制代碼






回復

使用道具 舉報

ID:975054 發表于 2022-12-21 11:24 | 顯示全部樓層
csdn上面也有此文,均為本人所發,暫未有人答復。
回復

使用道具 舉報

ID:624769 發表于 2022-12-21 16:07 來自觸屏版 | 顯示全部樓層
要先開上拉,再清 IE0,IE1, 最后, 再開中斷。
回復

使用道具 舉報

ID:1034262 發表于 2022-12-21 16:51 | 顯示全部樓層
上電時INT0已經檢測到一次上升沿,所以你一允許外部中斷,立刻進去中斷。
正確的初始化應該是:每次允許外部中斷前,設置中斷方式,清除外部中斷標志,加3個NOP,然后允許外部中斷。
原則上,其余的中斷我都會先清除中斷標志再允許,比如定時器,如果溢出過,則溢出標志會置1,一旦允許定時器中斷,則馬上就進去中斷了,所以要先清除中斷標志。
回復

使用道具 舉報

ID:213173 發表于 2022-12-21 21:16 | 顯示全部樓層
代碼書寫不規范所致。
回復

使用道具 舉報

ID:401564 發表于 2022-12-21 21:38 | 顯示全部樓層
代碼一段一段的,也不知道你要干嘛
P3端口要讀取外部電平,必需 P3 = 0xff 51hei截圖20221221213728.png

也就是說,你之前的程序并不對,只是誤打誤撞而已
回復

使用道具 舉報

ID:879348 發表于 2022-12-22 08:51 | 顯示全部樓層
不用探討,任何外部中斷開啟前都要清理標記位

評分

參與人數 1黑幣 +15 收起 理由
ax6808 + 15 徹底解決問題的稻草!

查看全部評分

回復

使用道具 舉報

ID:975054 發表于 2022-12-25 12:02 | 顯示全部樓層
188610329 發表于 2022-12-21 16:07
要先開上拉,再清 IE0,IE1, 最后, 再開中斷。

收到,謝謝! 近日全羊在家休息,能量恢復中...   
其實就1段5行代碼,其他用上電復位值(如默認采用邊沿中斷IT0=IT2=0等):
    P_SW2 |= 0x80;                               //必須放前面的,訪問XSRF先BIT7=1;
    P3IE=0x0C, P1IE=0x00, P5IE=0x20;  //輸入允許設置(省電考慮的事情,只留P32等3個腳,寫成一行而已);
    P3PU=0x04;                                    //使能P32上拉;
    TMOD= 0x01;                                 //T0:設模式01,消抖用;
    EX0=EX1=EA =1;                           //最后開中斷; 寫成1行而已;
                                                         //其他都是默認上電復位值(如邊沿中斷IT0=IT2=0等)
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 12:11 | 顯示全部樓層
coody_sz 發表于 2022-12-21 16:51
上電時INT0已經檢測到一次上升沿,所以你一允許外部中斷,立刻進去中斷。
正確的初始化應該是:每次允許外 ...

收到,謝謝指導!
分析的有道理! 因只涉及到上電或軟復位,而我只用了復位后已有的默認值,可能偷工減料了!
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 12:18 | 顯示全部樓層
wulin 發表于 2022-12-21 21:16
代碼書寫不規范所致。

感謝總工指導!  
近期我在代碼整理中,確實大量使用了簡寫連寫等,不過已盡量完善注釋:
1、一行中好幾條同類代碼的連寫;
2、甚至用;代替NOP等等;
3、大量使用了默認復位值;
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 13:01 | 顯示全部樓層
本帖最后由 ax6808 于 2022-12-25 15:27 編輯
Y_G_G 發表于 2022-12-21 21:38
代碼一段一段的,也不知道你要干嘛
P3端口要讀取外部電平,必需 P3 = 0xff

感謝總工指導!近日全羊在家休息研究暫停了幾天;
1.  其實代碼功能很簡單:主要就是想好好利用邊沿中斷(INT0/P32判斷按鍵長短按,用INT1/P33判斷充電狀態);其他就好說了,都是陪襯;
2.  其實關鍵就2行:
    P3M1=0x0C;  P3 |=0xf3; //P3口:P32、P33都默認邊沿中斷,設高阻不置1,其余雙向置1;
                                        // P3口要讀外部電平,必需P3=0xff : P3 |=0xf3: 其實都可省掉,反正復位都是1;
    P3PU=0x04;                  //使能內部上拉電阻;
   說明:I/O口設置:P32按鍵腳采用內部上拉電阻省個外接電阻,可設雙向或高阻,最后統一設成高阻了;
                          P33腳平時未充電已外部拉低,充電:上升沿+外部電平檢測,設高阻省電,拔電:下降沿+電平實時判斷;
3.  之前的程序并不對,只是誤打誤撞而已: 我也懷疑多處使用了上電復位值等,可能真是誤打誤撞;
4.等感冒完全恢復了,我再一條條試試;
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 13:05 | 顯示全部樓層
wufa1986 發表于 2022-12-22 08:51
不用探討,任何外部中斷開啟前都要清理標記位

感謝指導!
任何外部中斷開啟前都要清理標記位? 我暫時是盡量使用的上電復位值,及硬件自動置位或清0,有空我再試試...
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 13:13 | 顯示全部樓層
wufa1986 發表于 2022-12-22 08:51
不用探討,任何外部中斷開啟前都要清理標記位

外部中斷0的中斷標志位必須由(硬件) 清零。
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 13:15 | 顯示全部樓層
  1. void INT0() interrupt 0              //INT0:長短按: 改邊沿觸發+20msT0消抖+電平檢測; 理論上:按鍵檢測用邊沿觸發+定時消抖最可靠;                                                                                                
  2. {                                                                                          //關鍵:短按一般0.1~0.3s,彈起很快;
  3.     TH0=TL0=0xB8, TR0=1;             //消抖: 20ms(B8實20.2),每次跳變抖動都重新計時;
  4.     while(!TF0) ; TF0=0;             //查詢: 一直等TF0=1才往下執行,注意用;號;查詢方式要清0; 雙沿EA=0沒必要;
  5.     if(key==1) {Kc++, Kc=Kc%6;}      //短按: 上升沿有效; 彈起20ms即可切換1次彩燈:6次循環; Kc=Kc%6等效if(Kc>=6) Kc=0;         
  6.     else                                         //長按: 下降沿有效; 短按一般0.1~0.3s,超過為長按,彈起很快;
  7.    { dl_ms( 480);                                 //      按下0.3-0.5s仍未彈起趕緊執行長按代碼(不然總體太慢);
  8.      if(key==0)                             //           未彈起(再處理大白燈和待機):
  9.     {dl_ms(1000);                                 //           再延時1s,總1.5s;
  10.      if(key==0)   W=!W;              //白燈: 長按1.5s則:白燈開/關; Kc要-1;                    
  11.      dl_ms(1000);                                 //           再延時1s,總2.5s;
  12.      if(key==1)   Kc--;                       //           按下1.5-2s期間已經彈起, Kc先-1;
  13.       else                                         //復位: 按下1.5-2s期間仍未彈起, 則準備處理復位;
  14.      {dl_ms(500), W=!W;              //           先延時0.5s,總3s;白燈閃1次再準備進復位,方便觀察;效果很好!
  15.              dl_ms(100), status=2;                 //           長按超3s則:復位;狀態標志2(開機0/待機1/復位2); ok!很好!
  16.    }}}                                          //效果: 改雙沿后短按迅速(之前等0.5秒), 無需開關中斷防干擾;
  17. }

  18. void INT1() interrupt 2            //INT1:充電監控: 邊沿觸發+20msT0消抖+電平檢測;主要實時喚醒掉電狀態; 1212;
  19. {                                          //理論: 本監控電路其實只用中斷+20ms軟件消抖也可靠,暫統一用邊沿觸發+定時消抖好了;
  20.     TH0=TL0=0xB8, TR0=1;             //消抖: 20ms(實20.2),每次跳變抖動都重新計時;
  21.     while(!TF0) ; TF0=0;             //查詢: 一直等到TF0=1才往下執行,注意;號; 查詢方式要清0; EA=0防干擾沒必要;
  22. }
復制代碼


回復

使用道具 舉報

ID:975054 發表于 2022-12-25 13:19 | 顯示全部樓層
前面補充上傳了長短按及充電狀態監控中斷服務代碼, 最后都回主函數主循環處理(較簡單,未貼出代碼)
目前總體代碼運行還是很穩定的.P32長短按功能手感也很好.
回復

使用道具 舉報

ID:401564 發表于 2022-12-25 14:23 | 顯示全部樓層
ax6808 發表于 2022-12-25 13:19
前面補充上傳了長短按及充電狀態監控中斷服務代碼, 最后都回主函數主循環處理(較簡單,未貼出代碼)
目前總 ...

這種程序,最好是上傳工程文件,想必也不是什么商業機密
人家有條件的,可以直接下載打開
代碼不全,很難看明白的,雖說都是C,但是,每個人編程的思維是不一樣的

評分

參與人數 1黑幣 +5 收起 理由
ax6808 + 5

查看全部評分

回復

使用道具 舉報

ID:1034262 發表于 2022-12-25 14:24 | 顯示全部樓層
ax6808 發表于 2022-12-25 13:13
外部中斷0的中斷標志位必須由(硬件) 清零。

外部中斷0的中斷標志位,在進入中斷時會自動清零。但是如果沒允許INT0中斷,則開中斷前,要手動清零。

評分

參與人數 1黑幣 +7 收起 理由
ax6808 + 7

查看全部評分

回復

使用道具 舉報

ID:975054 發表于 2022-12-25 22:32 來自觸屏版 | 顯示全部樓層
Y_G_G 發表于 2022-12-25 14:23
這種程序,最好是上傳工程文件,想必也不是什么商業機密
人家有條件的,可以直接下載打開
代碼不全,很難看 ...

感謝批評指正!老射頻工程師,才搞嵌入式一年多,個人經驗不足,有些基本功能還在逐步探索應用中,沒有任何商業秘密可言…
這個問題:是本人用內置上拉電阻替換外部上拉電阻的反復拷機試驗中才發現的,千真萬確存在的一個莫名其妙問題!幾乎與設置無關,只與上電期間某些機理有關。
等我感冒恢復了,會繼續查下去……
回復

使用道具 舉報

ID:975054 發表于 2022-12-25 22:36 來自觸屏版 | 顯示全部樓層
統一回復:感謝大家出謀獻策!等我感冒好利索了,會繼續進行各種對比試驗!務必查出本案內/外部上拉電阻效果就是不同的根本原因!究竟
回復

使用道具 舉報

ID:401564 發表于 2022-12-26 22:50 | 顯示全部樓層
ax6808 發表于 2022-12-25 22:32
感謝批評指正!老射頻工程師,才搞嵌入式一年多,個人經驗不足,有些基本功能還在逐步探索應用中,沒有任 ...

我并沒有非常認真的看你的程序,只是大概的看了一下
但我還是認為:很多時候,問題出在人身上,或者是說單片機本身就是這個特性,你只是"自我的"覺得它不正常而已
STC雖說不是ST這樣的大公司,但上拉這種小問題肯定是不會有的,而且,STC也是一直在進步的
所以,更多的把精力放在自身的問題上,不要想著單片機有什么問題

評分

參與人數 1黑幣 +5 收起 理由
ax6808 + 5

查看全部評分

回復

使用道具 舉報

ID:77589 發表于 2022-12-27 11:14 | 顯示全部樓層
兄弟,這個問題不是禿子頭上的虱子嗎?
外部上拉,只要系統供電正常,P32就馬上拉成高電平,不管你MCU是否工作。
如果是內部上拉呢?必須要等MCU正常啟動后(最起碼要系統時鐘正常穩定后),運行代碼去配置P32內部上拉。在你的程序還沒有執行到配置P32內部上拉的時候,P32就響應了一次外中斷。

所以,外部上拉還是靠譜的多。如果要堅持使用內部上拉,估計得調整代碼,先讓程序配置P32內部上拉,穩定后,再開啟外中斷。
回復

使用道具 舉報

ID:1042619 發表于 2022-12-27 15:05 | 顯示全部樓層
       這種小問題,您應該去他們新官網下載個正規的新資料看下 I/O 部分,不就懂了1 現在的MCU太快,外部上拉,是MCU 正式開跑之前,外部已被拉高;外部無上拉,程序開跑時,你才打開內部上拉,你要等1段時間,外部才被拉高,現在是高速數字電路的時代
      如有問題您@我頭像

回復

使用道具 舉報

ID:1042619 發表于 2022-12-27 15:12 | 顯示全部樓層
不是誤觸發,是 MCU 太快
這種小問題,看下 I/O 部分,不就懂了, 現在的MCU 太快  !
外部上拉,是MCU 正式開跑之前,外部已被拉高;
外部無上拉,程序開跑時,你才打開內部上拉,你要等1段時間,外部才會被拉高到2V以上,
===你程序要加延時!!!
STC8/STC32G系列是高速MCU 時代

評分

參與人數 1黑幣 +9 收起 理由
ax6808 + 9 感謝支持和鼓勵!

查看全部評分

回復

使用道具 舉報

ID:975054 發表于 2022-12-28 00:40 | 顯示全部樓層
wufa1986 發表于 2022-12-22 08:51
不用探討,任何外部中斷開啟前都要清理標記位

統一回復:
拜讀查閱了大量案例, 結論:
1. 確實"不用探討,任何外部中斷開啟前都要清理標志位"才可靠! 本案我反復測試在EX0=EX1=EA =1前加上IE0=0就ok了(IE1=0可加可不加,無影響,是P33充電檢測腳,平時已拉低);
2. 外接上拉電阻和內置上拉電阻正常運行時完全一樣,但注意在剛上電或軟復位或剛設置上拉未穩定期間一定有所不同,需要以自行測試結果為準,無需大驚小怪;
    例如本案:若開中斷前未清理IE0標志位,不管我怎么弄,開機后狀態兩者就是不同,我不再繼續鉆牛角尖了,解決了就好!
3.其他: 因我這次的按鍵P32及串口P30和P31還想復用兼容軟件復位進入模擬USB下載等等,所以又好好學習了一下最新版手冊;
      附:   STC8最新版手冊又增加了一些新的說明(特別是第4-5條,呵呵,學無止境):
  關于 I/O 的注意事項:
  1、 P3.0 和 P3.1 口上電后的狀態為弱上拉雙向口模式
  2、 除 P3.0 和 P3.1 外,其余所有 IO 口上電后的狀態均為高阻輸入狀態,用戶在使用 IO 口
前必須先設置 IO 口模式
  3、 芯片上電時如果不需要使用 USB 進行 ISP 下載, P3.0/P3.1/P3.2 這 3 個 I/O 口不能同時
為低電平,否則會進入 USB 下載模式而無法運行用戶代碼
  4、 芯片上電時,若 P3.0 和 P3.1 同時為低電平, P3.2 口會短時間由高阻輸入狀態切換到雙
向口模式,用以讀取 P3.2 口外部狀態來判斷是否需要進入 USB 下載模式
  5、 當使用 P5.4 當作復位腳時,這個端口內部的 4K 上拉電阻會一直打開; 但 P5.4 做普通
I/O 口時,基于這個 I/O 口與復位腳共享管腳的特殊考量, 端口內部的 4K 上拉電阻依
然會打開大約 6.5 毫秒時間,再自動關閉( 當用戶的電路設計需要使用 P5.4 口驅動外
部電路時,請務必考慮上電瞬間會有 6.5 毫秒時間的高電平的問題)
回復

使用道具 舉報

ID:975054 發表于 2022-12-28 00:58 | 顯示全部樓層
統一補充回復: 目前:
1.  反正用“四、目前代碼”: 開中斷前無需清0,  用內置電阻就很正常,跟用外部上拉一模一樣;
2.  反正用“二、之前代碼“: 開中斷前必須清0,  用內置電阻就很正常,跟用外部上拉一模一樣;
    若不先清0:無論我怎么處理內置上拉電阻,如前后延遲1秒或幾秒,都會誤觸發1次,而外接上拉就永遠不會;
3.  情況就是這么個情況,呵呵呵! 謝謝大家一起研究!
回復

使用道具 舉報

ID:975054 發表于 2022-12-28 01:09 | 顯示全部樓層
Y_G_G 發表于 2022-12-26 22:50
我并沒有非常認真的看你的程序,只是大概的看了一下
但我還是認為:很多時候,問題出在人身上,或者是說單片 ...

嗯!有道理! 我91年畢業后在某通信研究所專業從事射頻空間抗干擾研究多年,對某些干擾類機理比較敏感;學無止境,喜歡STC!
回復

使用道具 舉報

ID:383215 發表于 2022-12-28 15:19 | 顯示全部樓層
我的一些程序,經常在STC和AVR之間移植過來移植過去,就發現STC單片機只要把端口設置為推挽輸出,端口立即就是高電平,假如這個端口驅動繼電器,繼電器就吸合,即使后面加一句這個端口=0,也不行,每次上電繼電器都會“喀嗒”一聲,AVR單片機就沒有這個問題,我立即就知道這是因為51內核上電之后的端口為高,所以我在端口設置為推挽輸出之前加一句這個端口=0,之后再設置為推挽輸出,繼電器就不會吸合了。說具體點,傳統51單片機上電復位期間端口為高電平,STC單片機上電復位期間端口為高阻高電平,而AVR單片機上電復位期間端口為高阻低電平,所以AVR單片機就不存在這個問題。
樓主發現“每次上電按鍵INT0誤觸發1次”和我發現的每次上電繼電器都會“喀嗒”一聲可能是一樣的原因,這個原因就是STC單片機自身的原因,和自己的編程沒有關系,STC單片機把51架構玩成一朵花,你就得把這些怪異的問題用代碼解決。樓上有人說“更多的把精力放在自身的問題上,不要想著單片機有什么問題”,這個就是單片機自身的問題。我多次說過,至少要學會兩種以上單片機,互相對比編程,比只學一種單片機學到的東西更多更實在,只會一種單片機,有的問題百思不得其解。假如樓主用AVR單片機編程,“每次上電按鍵INT0誤觸發1次”這個問題可能并不存在。我并不是說AVR單片機比STC單片機好,目前來看,AVR單片機除了抗干擾略比STC強一點,其它優勢不值一提,最大問題是AVR單片機價格太高了,我已經放棄AVR單片機,用STC8H1K08替換ATMEG8,試驗已經成功。
回復

使用道具 舉報

ID:401564 發表于 2022-12-29 19:52 | 顯示全部樓層
kmsj 發表于 2022-12-28 15:19
我的一些程序,經常在STC和AVR之間移植過來移植過去,就發現STC單片機只要把端口設置為推挽輸出,端口立即 ...

個人玩的東西,我還是很喜歡STC的單片機的,當然,就功能而言,還是更喜歡STM32,用STM32很多時候壓根就用考慮內存,浮點數據運算速度之類的
但做產品的話,基本上沒用過STC做產品,沒什么優勢可言,畢竟低到3毛的STC單片機是沒有的,人家OTP型單片機3毛錢就能有幾路12位的ADC......
回復

使用道具 舉報

29#
無效樓層,該帖已經被刪除
ID:1059700 發表于 2022-12-29 22:29 | 顯示全部樓層
代碼書寫的邏輯問題。
回復

使用道具 舉報

ID:1034262 發表于 2022-12-31 17:36 | 顯示全部樓層
kmsj 發表于 2022-12-28 15:19
我的一些程序,經常在STC和AVR之間移植過來移植過去,就發現STC單片機只要把端口設置為推挽輸出,端口立即 ...

那是因為你不熟悉51架構造成的。51架構的MCU出現與上世紀80年代初,復位后準雙向口輸出高電平,后來的8086、8098、80186都是類似的。
STC8系列的改為上電為高阻,不會再出現你所說的問題。而AVR上電后也是高阻。
先輸出低電平,再設置為推挽輸出。
回復

使用道具 舉報

ID:383215 發表于 2022-12-31 22:03 | 顯示全部樓層
Y_G_G 發表于 2022-12-29 19:52
個人玩的東西,我還是很喜歡STC的單片機的,當然,就功能而言,還是更喜歡STM32,用STM32很多時候壓根就用考慮 ...

對于我而言,一塊多錢的STC8H1K08我非常滿意,之前ATMEGA8只用了1兆的內部RC振蕩器,移植程序到STC8H1K08也只用了1兆的內部RC振蕩器,后來發現,有的STC8H1K08無法使用1兆的內部RC振蕩器,就被迫把內部RC振蕩器提高到1.2兆,至于STM32,我只學習到流水燈就沒有學下去了,一塊多錢的STC8H1K08能做到的事情,我為什么要用七、八塊錢甚至十幾塊錢的STM32?至于那些幾毛錢的單片機,目前我用不上,有個老朋友的一個老產品要是可以上量的話,我可能會考慮幾毛錢的單片機,但是,那個產品上量的可能性幾乎為零。

評分

參與人數 1黑幣 +5 收起 理由
ax6808 + 5

查看全部評分

回復

使用道具 舉報

ID:383215 發表于 2022-12-31 22:31 | 顯示全部樓層
coody_sz 發表于 2022-12-31 17:36
那是因為你不熟悉51架構造成的。51架構的MCU出現與上世紀80年代初,復位后準雙向口輸出高電平,后來的808 ...

我為什么一定要熟悉51架構?我學單片機是從48單片機開始的,傳統51單片機的代表芯片是8031,你知道48單片機的代表芯片是什么嗎?我只知道51單片機是48單片機的改進型單片機,還真不知道什么是51架構,我覺得我學單片機對我提高最大的就是48單片機,而且是本子京三制作所用48單片機制造的一個老設備,從這個48單片機的老設備我悟出了步驟式編程和CPU應用率編程,并且應用到51、430、AVR、STM32,經過20多年的總結,我可以讓我的程序占用CPU時間最短,我可以讓我的程序運行速度有的可以提高10倍以上。我為樓主回答的問題,是告訴樓主,沒有什么墨守成規的編程方法,多學幾種單片機就很容易發現不同單片機正確的編程方法。不過話又說回來,單片機編程只是我的業余愛好,懂不懂51架構對我編程沒有什么影響。
回復

使用道具 舉報

ID:975054 發表于 2023-1-1 22:10 | 顯示全部樓層
嗯!大家新年快樂!
可笑的三年!剛好有個小設備沒人愿意做我就頂上去了,沒想到讓我這個射頻工程師老鳥學會了STC嵌入式單片機,可以隨型所欲的極簡設計一些傳感+控制+3D小外殼設計全套玩意,也是一種莫大的收獲及樂趣! 共勉!
回復

使用道具 舉報

ID:975054 發表于 2023-1-2 02:38 | 顯示全部樓層
今天又碰到個問題:
STC8省電: 平時2秒掉電喚醒1次正常, 但自動待機后4秒還會誤喚醒1次?想了好一會,原來是我在自動待機前忘關掉電喚醒定時器了,呵呵! 原來如此!  
自動待機前關掉掉電喚醒定時器后,拿高精度萬用表測試了一下待機電流,工作電壓約3.8V時約0.5μA(手冊5V時0.6μA),很舒服哦!  
之前只測過最低2.3μA,原來是含掉電喚醒定時器工作電流,而一直待機不含(手冊里的數據得到比較精確的驗證,呵呵!)
回復

使用道具 舉報

ID:308903 發表于 2023-1-3 08:55 | 顯示全部樓層
感覺~好高端的問題
回復

使用道具 舉報

ID:975054 發表于 2023-4-30 16:35 | 顯示全部樓層
1261867136qq 發表于 2023-1-3 08:55
感覺~好高端的問題

見笑了!我是射頻總體技術工作三十幾年的老鳥,但嵌入式還只是近二年自己感興趣自學的菜鳥,好在系統總體經驗教訓相對較足,普通硬件外圍應用電路設計及PCB布板電裝測試驗證可以一條龍搞定,不然我老人家就根本吃不消了。。。
近期仍在不斷研究優化,力求小東西設計最簡、好用且最可靠、最省電...把簡單的東西做到越來越精致當快樂了!
很多東西都要具體問題具體分析,就如我前面上傳的單按鍵長短按中斷檢測消抖代碼(說明:當時T0定時器消抖用的還是查詢方式while(!TF0),其實與隨便調用一句20ms延時完全等效)。一般中斷里都盡量少調用延時(主要會延長處理時間,系統復雜時代碼執行易混亂),但我東西簡單主要就處理按鍵中斷,里面暫時全是延時,反正又不是鍵盤一直在按,可靠就好,另外的原因是我用的最小8腳MCU,配合外圍四個LED控制及早晚光控及充電電池檢測指示省電等等等基本特性功能,有幾個腳都復用了,包括這個關鍵引腳P32,代碼邏輯策略設計原因,暫時只能這樣處理,不排除后面還會繼續綜合優化。。。學海無涯回頭是岸

節日無事,偶來這里學習學習,順便留言! 順祝大家節日快樂!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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