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

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

QQ登錄

只需一步,快速開(kāi)始

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

關(guān)于STC8單片機(jī)改用內(nèi)部上拉電阻后每次上電按鍵INT0誤觸發(fā)1次原因探討

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

  10.     P_SW2 |= 0x80;              //訪問(wèn)XSRF先BIT7=1; 統(tǒng)一放前無(wú)需歸零(有外擴(kuò)64K擴(kuò)展RAM時(shí)才要);   
  11.     P3IE=0x0C, P1IE=0x00, P5IE=0x20; //輸入只留P32、P33、P55(其余全關(guān));
  12.                                 //P55控制大燈W(用到if W==1讀端口還是讀引腳?先不關(guān));
  13.     P3PU=0x04;                  //使能內(nèi)部上拉電阻;
  14.     TMOD= 0x01;                 //T0:模式01;16位不自動(dòng)重載(默認(rèn)12T);消抖用的查詢方式;
  15.     EX0=EX1=EA =1;              //開(kāi)中斷;
  16.                               
  17. }
復(fù)制代碼
三、措施對(duì)策
1、 先暫時(shí)軟件處理-1次。可以解決。但還得追究根本原因;
2、先后試了開(kāi)中斷前后加空操作或足夠的延時(shí)等辦法,均無(wú)效;
3、最后,調(diào)整段落,發(fā)現(xiàn)將第3段代碼(最后5行)改到第2段代碼(中間3行)的前面后,居然就正常了(終于用內(nèi)部上拉或外部上拉都完全一樣了)!代碼附后;
4、但還是百思不得其解! 后面有空再繼續(xù)研究,走過(guò)路過(guò)感興趣的朋友不妨一起查查具體原因。
      理論上:  上拉電阻用外接或內(nèi)置完全等同, 只需注意先設(shè)置好后再開(kāi)中斷;
      問(wèn)題是:后2段代碼前后調(diào)換,究竟哪里不同了?  注意到編譯后代碼量還會(huì)差1B; 為什么?        
四、目前代碼
  1. void BOOT()                         //總初始化 最簡(jiǎn)整理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;                   //開(kāi)中斷; 前4行任1條放最后面多1B;奇怪?  
  11.   //以上5行改放最后每次上電int0誤觸發(fā)1次! 但加外接上拉電阻隨便幾K就不會(huì)!奇怪?
  12.    
  13.     status=Kc= 0;                    //;           
  14.     G=R=b=W=0, dl_ms(1000);          //;
  15.     G=R=b=W=1, dl_ms(1000);
  16. }
復(fù)制代碼






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

使用道具 舉報(bào)

沙發(fā)
ID:975054 發(fā)表于 2022-12-21 11:24 | 只看該作者
csdn上面也有此文,均為本人所發(fā),暫未有人答復(fù)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:624769 發(fā)表于 2022-12-21 16:07 來(lái)自手機(jī) | 只看該作者
要先開(kāi)上拉,再清 IE0,IE1, 最后, 再開(kāi)中斷。
回復(fù)

使用道具 舉報(bào)

地板
ID:1034262 發(fā)表于 2022-12-21 16:51 | 只看該作者
上電時(shí)INT0已經(jīng)檢測(cè)到一次上升沿,所以你一允許外部中斷,立刻進(jìn)去中斷。
正確的初始化應(yīng)該是:每次允許外部中斷前,設(shè)置中斷方式,清除外部中斷標(biāo)志,加3個(gè)NOP,然后允許外部中斷。
原則上,其余的中斷我都會(huì)先清除中斷標(biāo)志再允許,比如定時(shí)器,如果溢出過(guò),則溢出標(biāo)志會(huì)置1,一旦允許定時(shí)器中斷,則馬上就進(jìn)去中斷了,所以要先清除中斷標(biāo)志。
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2022-12-21 21:16 | 只看該作者
代碼書(shū)寫(xiě)不規(guī)范所致。
回復(fù)

使用道具 舉報(bào)

6#
ID:401564 發(fā)表于 2022-12-21 21:38 | 只看該作者
代碼一段一段的,也不知道你要干嘛
P3端口要讀取外部電平,必需 P3 = 0xff

也就是說(shuō),你之前的程序并不對(duì),只是誤打誤撞而已
回復(fù)

使用道具 舉報(bào)

7#
ID:879348 發(fā)表于 2022-12-22 08:51 | 只看該作者
不用探討,任何外部中斷開(kāi)啟前都要清理標(biāo)記位

評(píng)分

參與人數(shù) 1黑幣 +15 收起 理由
ax6808 + 15 徹底解決問(wèn)題的稻草!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

8#
ID:975054 發(fā)表于 2022-12-25 12:02 | 只看該作者
188610329 發(fā)表于 2022-12-21 16:07
要先開(kāi)上拉,再清 IE0,IE1, 最后, 再開(kāi)中斷。

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

使用道具 舉報(bào)

9#
ID:975054 發(fā)表于 2022-12-25 12:11 | 只看該作者
coody_sz 發(fā)表于 2022-12-21 16:51
上電時(shí)INT0已經(jīng)檢測(cè)到一次上升沿,所以你一允許外部中斷,立刻進(jìn)去中斷。
正確的初始化應(yīng)該是:每次允許外 ...

收到,謝謝指導(dǎo)!
分析的有道理! 因只涉及到上電或軟復(fù)位,而我只用了復(fù)位后已有的默認(rèn)值,可能偷工減料了!
回復(fù)

使用道具 舉報(bào)

10#
ID:975054 發(fā)表于 2022-12-25 12:18 | 只看該作者
wulin 發(fā)表于 2022-12-21 21:16
代碼書(shū)寫(xiě)不規(guī)范所致。

感謝總工指導(dǎo)!  
近期我在代碼整理中,確實(shí)大量使用了簡(jiǎn)寫(xiě)連寫(xiě)等,不過(guò)已盡量完善注釋:
1、一行中好幾條同類代碼的連寫(xiě);
2、甚至用;代替NOP等等;
3、大量使用了默認(rèn)復(fù)位值;
回復(fù)

使用道具 舉報(bào)

11#
ID:975054 發(fā)表于 2022-12-25 13:01 | 只看該作者
本帖最后由 ax6808 于 2022-12-25 15:27 編輯
Y_G_G 發(fā)表于 2022-12-21 21:38
代碼一段一段的,也不知道你要干嘛
P3端口要讀取外部電平,必需 P3 = 0xff

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

使用道具 舉報(bào)

12#
ID:975054 發(fā)表于 2022-12-25 13:05 | 只看該作者
wufa1986 發(fā)表于 2022-12-22 08:51
不用探討,任何外部中斷開(kāi)啟前都要清理標(biāo)記位

感謝指導(dǎo)!
任何外部中斷開(kāi)啟前都要清理標(biāo)記位? 我暫時(shí)是盡量使用的上電復(fù)位值,及硬件自動(dòng)置位或清0,有空我再試試...
回復(fù)

使用道具 舉報(bào)

13#
ID:975054 發(fā)表于 2022-12-25 13:13 | 只看該作者
wufa1986 發(fā)表于 2022-12-22 08:51
不用探討,任何外部中斷開(kāi)啟前都要清理標(biāo)記位

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

使用道具 舉報(bào)

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

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


回復(fù)

使用道具 舉報(bào)

15#
ID:975054 發(fā)表于 2022-12-25 13:19 | 只看該作者
前面補(bǔ)充上傳了長(zhǎng)短按及充電狀態(tài)監(jiān)控中斷服務(wù)代碼, 最后都回主函數(shù)主循環(huán)處理(較簡(jiǎn)單,未貼出代碼)
目前總體代碼運(yùn)行還是很穩(wěn)定的.P32長(zhǎng)短按功能手感也很好.
回復(fù)

使用道具 舉報(bào)

16#
ID:401564 發(fā)表于 2022-12-25 14:23 | 只看該作者
ax6808 發(fā)表于 2022-12-25 13:19
前面補(bǔ)充上傳了長(zhǎng)短按及充電狀態(tài)監(jiān)控中斷服務(wù)代碼, 最后都回主函數(shù)主循環(huán)處理(較簡(jiǎn)單,未貼出代碼)
目前總 ...

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

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
ax6808 + 5

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

17#
ID:1034262 發(fā)表于 2022-12-25 14:24 | 只看該作者
ax6808 發(fā)表于 2022-12-25 13:13
外部中斷0的中斷標(biāo)志位必須由(硬件) 清零。

外部中斷0的中斷標(biāo)志位,在進(jìn)入中斷時(shí)會(huì)自動(dòng)清零。但是如果沒(méi)允許INT0中斷,則開(kāi)中斷前,要手動(dòng)清零。

評(píng)分

參與人數(shù) 1黑幣 +7 收起 理由
ax6808 + 7

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

18#
ID:975054 發(fā)表于 2022-12-25 22:32 來(lái)自手機(jī) | 只看該作者
Y_G_G 發(fā)表于 2022-12-25 14:23
這種程序,最好是上傳工程文件,想必也不是什么商業(yè)機(jī)密
人家有條件的,可以直接下載打開(kāi)
代碼不全,很難看 ...

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

使用道具 舉報(bào)

19#
ID:975054 發(fā)表于 2022-12-25 22:36 來(lái)自手機(jī) | 只看該作者
統(tǒng)一回復(fù):感謝大家出謀獻(xiàn)策!等我感冒好利索了,會(huì)繼續(xù)進(jìn)行各種對(duì)比試驗(yàn)!務(wù)必查出本案內(nèi)/外部上拉電阻效果就是不同的根本原因!究竟
回復(fù)

使用道具 舉報(bào)

20#
ID:401564 發(fā)表于 2022-12-26 22:50 | 只看該作者
ax6808 發(fā)表于 2022-12-25 22:32
感謝批評(píng)指正!老射頻工程師,才搞嵌入式一年多,個(gè)人經(jīng)驗(yàn)不足,有些基本功能還在逐步探索應(yīng)用中,沒(méi)有任 ...

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

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
ax6808 + 5

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

21#
ID:77589 發(fā)表于 2022-12-27 11:14 | 只看該作者
兄弟,這個(gè)問(wèn)題不是禿子頭上的虱子嗎?
外部上拉,只要系統(tǒng)供電正常,P32就馬上拉成高電平,不管你MCU是否工作。
如果是內(nèi)部上拉呢?必須要等MCU正常啟動(dòng)后(最起碼要系統(tǒng)時(shí)鐘正常穩(wěn)定后),運(yùn)行代碼去配置P32內(nèi)部上拉。在你的程序還沒(méi)有執(zhí)行到配置P32內(nèi)部上拉的時(shí)候,P32就響應(yīng)了一次外中斷。

所以,外部上拉還是靠譜的多。如果要堅(jiān)持使用內(nèi)部上拉,估計(jì)得調(diào)整代碼,先讓程序配置P32內(nèi)部上拉,穩(wěn)定后,再開(kāi)啟外中斷。
回復(fù)

使用道具 舉報(bào)

22#
ID:1042619 發(fā)表于 2022-12-27 15:05 | 只看該作者
       這種小問(wèn)題,您應(yīng)該去他們新官網(wǎng)下載個(gè)正規(guī)的新資料看下 I/O 部分,不就懂了1 現(xiàn)在的MCU太快,外部上拉,是MCU 正式開(kāi)跑之前,外部已被拉高;外部無(wú)上拉,程序開(kāi)跑時(shí),你才打開(kāi)內(nèi)部上拉,你要等1段時(shí)間,外部才被拉高,現(xiàn)在是高速數(shù)字電路的時(shí)代
      如有問(wèn)題您@我頭像

回復(fù)

使用道具 舉報(bào)

23#
ID:1042619 發(fā)表于 2022-12-27 15:12 | 只看該作者
不是誤觸發(fā),是 MCU 太快
這種小問(wèn)題,看下 I/O 部分,不就懂了, 現(xiàn)在的MCU 太快  !
外部上拉,是MCU 正式開(kāi)跑之前,外部已被拉高;
外部無(wú)上拉,程序開(kāi)跑時(shí),你才打開(kāi)內(nèi)部上拉,你要等1段時(shí)間,外部才會(huì)被拉高到2V以上,
===你程序要加延時(shí)!!!
STC8/STC32G系列是高速M(fèi)CU 時(shí)代

評(píng)分

參與人數(shù) 1黑幣 +9 收起 理由
ax6808 + 9 感謝支持和鼓勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

24#
ID:975054 發(fā)表于 2022-12-28 00:40 | 只看該作者
wufa1986 發(fā)表于 2022-12-22 08:51
不用探討,任何外部中斷開(kāi)啟前都要清理標(biāo)記位

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

使用道具 舉報(bào)

25#
ID:975054 發(fā)表于 2022-12-28 00:58 | 只看該作者
統(tǒng)一補(bǔ)充回復(fù): 目前:
1.  反正用“四、目前代碼”: 開(kāi)中斷前無(wú)需清0,  用內(nèi)置電阻就很正常,跟用外部上拉一模一樣;
2.  反正用“二、之前代碼“: 開(kāi)中斷前必須清0,  用內(nèi)置電阻就很正常,跟用外部上拉一模一樣;
    若不先清0:無(wú)論我怎么處理內(nèi)置上拉電阻,如前后延遲1秒或幾秒,都會(huì)誤觸發(fā)1次,而外接上拉就永遠(yuǎn)不會(huì);
3.  情況就是這么個(gè)情況,呵呵呵! 謝謝大家一起研究!
回復(fù)

使用道具 舉報(bào)

26#
ID:975054 發(fā)表于 2022-12-28 01:09 | 只看該作者
Y_G_G 發(fā)表于 2022-12-26 22:50
我并沒(méi)有非常認(rèn)真的看你的程序,只是大概的看了一下
但我還是認(rèn)為:很多時(shí)候,問(wèn)題出在人身上,或者是說(shuō)單片 ...

嗯!有道理! 我91年畢業(yè)后在某通信研究所專業(yè)從事射頻空間抗干擾研究多年,對(duì)某些干擾類機(jī)理比較敏感;學(xué)無(wú)止境,喜歡STC!
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

28#
ID:401564 發(fā)表于 2022-12-29 19:52 | 只看該作者
kmsj 發(fā)表于 2022-12-28 15:19
我的一些程序,經(jīng)常在STC和AVR之間移植過(guò)來(lái)移植過(guò)去,就發(fā)現(xiàn)STC單片機(jī)只要把端口設(shè)置為推挽輸出,端口立即 ...

個(gè)人玩的東西,我還是很喜歡STC的單片機(jī)的,當(dāng)然,就功能而言,還是更喜歡STM32,用STM32很多時(shí)候壓根就用考慮內(nèi)存,浮點(diǎn)數(shù)據(jù)運(yùn)算速度之類的
但做產(chǎn)品的話,基本上沒(méi)用過(guò)STC做產(chǎn)品,沒(méi)什么優(yōu)勢(shì)可言,畢竟低到3毛的STC單片機(jī)是沒(méi)有的,人家OTP型單片機(jī)3毛錢就能有幾路12位的ADC......
回復(fù)

使用道具 舉報(bào)

29#
ID:1059700 發(fā)表于 2022-12-29 22:29 | 只看該作者
代碼書(shū)寫(xiě)的邏輯問(wèn)題。
回復(fù)

使用道具 舉報(bào)

30#
ID:1034262 發(fā)表于 2022-12-31 17:36 | 只看該作者
kmsj 發(fā)表于 2022-12-28 15:19
我的一些程序,經(jīng)常在STC和AVR之間移植過(guò)來(lái)移植過(guò)去,就發(fā)現(xiàn)STC單片機(jī)只要把端口設(shè)置為推挽輸出,端口立即 ...

那是因?yàn)槟悴皇煜?1架構(gòu)造成的。51架構(gòu)的MCU出現(xiàn)與上世紀(jì)80年代初,復(fù)位后準(zhǔn)雙向口輸出高電平,后來(lái)的8086、8098、80186都是類似的。
STC8系列的改為上電為高阻,不會(huì)再出現(xiàn)你所說(shuō)的問(wèn)題。而AVR上電后也是高阻。
先輸出低電平,再設(shè)置為推挽輸出。
回復(fù)

使用道具 舉報(bào)

31#
ID:383215 發(fā)表于 2022-12-31 22:03 | 只看該作者
Y_G_G 發(fā)表于 2022-12-29 19:52
個(gè)人玩的東西,我還是很喜歡STC的單片機(jī)的,當(dāng)然,就功能而言,還是更喜歡STM32,用STM32很多時(shí)候壓根就用考慮 ...

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

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
ax6808 + 5

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

32#
ID:383215 發(fā)表于 2022-12-31 22:31 | 只看該作者
coody_sz 發(fā)表于 2022-12-31 17:36
那是因?yàn)槟悴皇煜?1架構(gòu)造成的。51架構(gòu)的MCU出現(xiàn)與上世紀(jì)80年代初,復(fù)位后準(zhǔn)雙向口輸出高電平,后來(lái)的808 ...

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

使用道具 舉報(bào)

33#
ID:975054 發(fā)表于 2023-1-1 22:10 | 只看該作者
嗯!大家新年快樂(lè)!
可笑的三年!剛好有個(gè)小設(shè)備沒(méi)人愿意做我就頂上去了,沒(méi)想到讓我這個(gè)射頻工程師老鳥(niǎo)學(xué)會(huì)了STC嵌入式單片機(jī),可以隨型所欲的極簡(jiǎn)設(shè)計(jì)一些傳感+控制+3D小外殼設(shè)計(jì)全套玩意,也是一種莫大的收獲及樂(lè)趣! 共勉!
回復(fù)

使用道具 舉報(bào)

34#
ID:975054 發(fā)表于 2023-1-2 02:38 | 只看該作者
今天又碰到個(gè)問(wèn)題:
STC8省電: 平時(shí)2秒掉電喚醒1次正常, 但自動(dòng)待機(jī)后4秒還會(huì)誤喚醒1次?想了好一會(huì),原來(lái)是我在自動(dòng)待機(jī)前忘關(guān)掉電喚醒定時(shí)器了,呵呵! 原來(lái)如此!  
自動(dòng)待機(jī)前關(guān)掉掉電喚醒定時(shí)器后,拿高精度萬(wàn)用表測(cè)試了一下待機(jī)電流,工作電壓約3.8V時(shí)約0.5μA(手冊(cè)5V時(shí)0.6μA),很舒服哦!  
之前只測(cè)過(guò)最低2.3μA,原來(lái)是含掉電喚醒定時(shí)器工作電流,而一直待機(jī)不含(手冊(cè)里的數(shù)據(jù)得到比較精確的驗(yàn)證,呵呵!)
回復(fù)

使用道具 舉報(bào)

35#
ID:308903 發(fā)表于 2023-1-3 08:55 | 只看該作者
感覺(jué)~好高端的問(wèn)題
回復(fù)

使用道具 舉報(bào)

36#
ID:975054 發(fā)表于 2023-4-30 16:35 | 只看該作者
1261867136qq 發(fā)表于 2023-1-3 08:55
感覺(jué)~好高端的問(wèn)題

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

節(jié)日無(wú)事,偶來(lái)這里學(xué)習(xí)學(xué)習(xí),順便留言! 順祝大家節(jié)日快樂(lè)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品激情 | 欧美高清dvd | 国产免费又黄又爽又刺激蜜月al | 欧美一级在线 | www.黄网| 国产精品久久久久aaaa樱花 | 九九热re| 国产伦精品一区二区三区高清 | 国产一区二区三区在线 | 亚洲国产成人精品久久 | 久久久精品黄色 | 免费看啪啪网站 | 毛片a级毛片免费播放100 | 日韩一区二区三区视频 | 在线亚洲免费 | 草比av| 91玖玖 | 亚洲欧美日韩在线不卡 | 美人の美乳で授乳プレイ | 欧美成人免费在线视频 | 久久久久久看片 | 亚洲精品91 | 性高湖久久久久久久久 | 一级黄色片在线看 | 欧美一区二区三区在线 | 国产美女精品 | 免费看91| 久久高潮 | 欧美激情精品久久久久久 | 国产91av视频在线观看 | 精品国产一区二区三区性色av | 男人的天堂在线视频 | 91正在播放| 在线观看日本网站 | 一级黄色片网址 | а天堂中文最新一区二区三区 | 99久久久久久久久 | 一区二区免费视频 | 亚洲精品中文在线观看 | 日韩免费视频一区二区 | 久久亚洲国产 |