亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

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

QQ登錄

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

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

小白請(qǐng)教大神們幾個(gè)51單片機(jī)中斷的問(wèn)題,請(qǐng)指點(diǎn),謝謝!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
20黑幣
小白請(qǐng)教大神們幾個(gè)51中斷的問(wèn)題,請(qǐng)指點(diǎn),謝謝!
我想利用89c51測(cè)量?jī)蓚(gè)按鍵按下先后時(shí)間間隔功能。先按啟動(dòng),再按停止然后數(shù)碼管顯示出兩者先后間隔時(shí)間,如果先按停止,不做處理。必須先按啟動(dòng),然后再按停止才能顯示時(shí)間,也就是啟動(dòng)和停止有先后順序,順序后了不處理。利用中斷1和中斷0在下降沿觸發(fā)方式和定時(shí)器0方式2去實(shí)現(xiàn),用prutues仿真,按一下啟動(dòng),再按一下停止,可以正常顯示時(shí)間。仿真時(shí)發(fā)現(xiàn)幾個(gè)問(wèn)題。
1.按一下啟動(dòng),再按一下啟動(dòng),IE1就會(huì)置1,(為什么?)再按一下停止,顯示時(shí)間,但T0不停止,仍然計(jì)時(shí),需再按一下停止,定時(shí)器T0停止,顯示時(shí)間。我想實(shí)現(xiàn)有功能是按下啟動(dòng),定時(shí)器啟動(dòng),再按啟動(dòng)沒(méi)有反應(yīng),按下停止,停止計(jì)時(shí),顯示時(shí)間,再按下停止或沒(méi)按啟動(dòng)先按停止,沒(méi)有反應(yīng)。但是現(xiàn)在如果按兩下啟動(dòng)同,必須按兩下停止才能停止定時(shí)器。
2.按一下啟動(dòng),再按一下停止,顯示時(shí)間,但再按一下停止,TE0就會(huì)置1,(為什么?)此時(shí)按一下啟動(dòng),顯示就會(huì)變成00,定時(shí)器也不啟動(dòng),再按下啟動(dòng),定時(shí)器才會(huì)啟動(dòng)。
請(qǐng)問(wèn)大神們,出現(xiàn)這種情況是什么原因,如果不改變中斷1和中斷0在下降沿觸發(fā)方式和定時(shí)器0方式2,如何解決,源文件附后,請(qǐng)大神們指點(diǎn)。

新手小白一枚,送點(diǎn)黑幣意思一下,請(qǐng)大神們不吝賜教,謝謝!用protues仿真,所以按鍵沒(méi)有去抖,應(yīng)該不是沒(méi)去抖的問(wèn)題。



  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uint Time=0;
  5. uint Time_Count=0;

  6. uchar Duan[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0x7f};//段碼0-9+全暗+"."

  7. uchar Wei[4]={0x08,0x04,0x02,0x01};   //位的控制端        (仿真)

  8. uchar Time_Buffer[]={0,0,0,0};                                        //時(shí)間緩存

  9. void delayms(uint x)                //延時(shí)函數(shù)
  10. {
  11.         uint i,j;
  12.         for(i = x; i > 0; i --)
  13.                 for(j = 125; j > 0; j --);               
  14. }

  15. void Show_Time()                                //數(shù)碼管動(dòng)態(tài)掃描顯示
  16. {
  17.                 uchar i;
  18.         /*****************數(shù)據(jù)轉(zhuǎn)換*****************************/
  19.         
  20.         
  21.                 Time_Buffer[0] = Time / 1000;                                //千位
  22.                 Time_Buffer[1] = Time % 1000 / 100;        //百位
  23.                 Time_Buffer[2] = Time % 100 /10;                //十位
  24.                 Time_Buffer[3] = Time % 10;                                        //個(gè)位

  25.                 if(Time_Buffer[0] == 0)        
  26.                         {        
  27.                                 Time_Buffer[0] = 10;
  28.                                 if(Time_Buffer[1] == 0)
  29.                                 {        
  30.                                         Time_Buffer[1] = 10;
  31.                                 }
  32.                         }               
  33.                
  34.                 for(i = 0;i < 4;i ++)
  35.                 {
  36.                         P0 = 0xFF;
  37.                         P1 = Wei[i];
  38.                         P0 = Duan[Time_Buffer[i]];
  39.                         delayms(2);
  40.                 }
  41. }

  42. /*************************************************************************
  43.                                 主函數(shù)        
  44. **************************************************************************/
  45. void main()
  46. {
  47.                 EX1=1;
  48.                 EX0=1;
  49.                 IT0=1;//低電平有效 下降沿有效
  50.                 IT1=1;
  51.                 EA=1;                                
  52.                
  53.                 TMOD=0x02;                //設(shè)置為自動(dòng)重載方式
  54.                 TH0=0x9c;                        //設(shè)置為100us的計(jì)數(shù)
  55.                 TL0=0x9c;
  56.                 TR0=0;
  57.                 Time=1898;
  58.                 while(1)
  59.                 {
  60.                         Show_Time();
  61.                 }
  62. }


  63. void Start_ExInt1()interrupt 2
  64. {
  65.                 TR0=1;
  66.                 EX1=0;
  67.                 ET0=1;               
  68.                 EX0=1;
  69. }

  70. void Timer_T0() interrupt 1
  71. {
  72.                 Time_Count++;

  73.                 EX0=1;
  74.                 if ( Time_Count==9999) //計(jì)時(shí)范圍0-9999
  75.                 {
  76.                          Time_Count=0;
  77.                 }
  78. }
  79. void Stop_Int0() interrupt 0
  80. {
  81.                 TR0=0;
  82.                 Time= Time_Count;
  83.                 Time_Count=0;
  84.                
  85.                 EX1=1;
  86.                 EX0=0;
  87.                 ET0=0;
  88. }
復(fù)制代碼


KEY1-2.rar (62.48 KB, 下載次數(shù): 4)


未按鍵時(shí).png (50.34 KB, 下載次數(shù): 131)

未按鍵時(shí).png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:383215 發(fā)表于 2020-6-7 23:51 | 只看該作者
你的程序根本不可能實(shí)現(xiàn)你想要的功能,主要原因是按鍵去抖動(dòng)你沒(méi)有解決,你只有穩(wěn)定得到鍵值才有可能測(cè)量出兩個(gè)按鍵的時(shí)間,兩個(gè)按鍵的時(shí)間大于0.5秒以上,不需要中斷,一個(gè)定時(shí)器足夠用了,初學(xué)單片機(jī)編程,不能濫用中斷,中斷用多的情況下問(wèn)題更多,要想得到更高的精度,除非用RS觸發(fā)器搞個(gè)硬件去抖動(dòng),你現(xiàn)在的程序也許可以用,你這個(gè)程序,看似簡(jiǎn)單,編好了還是不容易的,我不需要黑幣,你自己留著吧,這個(gè)論壇我需要的資料不太多。
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2020-6-8 11:09 | 只看該作者
按鍵必須去抖動(dòng),方式很多,各有其特點(diǎn)。
你的命題對(duì)按鍵的先后次序有要求,所以要仔細(xì)規(guī)劃一下,去抖動(dòng)的方式。
原則:按鍵按下時(shí)是有彈動(dòng)的,即按一下,不只一下,短時(shí)內(nèi)是多下。
你只認(rèn)第一下,而短時(shí)內(nèi)的其它下不認(rèn)可就行了。
你是用中斷識(shí)別按鍵的,就在中斷里識(shí)別;
你是掃鍵識(shí)別的,就在掃鍵時(shí)識(shí)別。辦法自己想。
祝你成功。
回復(fù)

使用道具 舉報(bào)

地板
ID:104797 發(fā)表于 2020-6-8 22:31 | 只看該作者
謝謝兩位大神的指點(diǎn)。
我只是想要地protuse中仿真,不需要在硬件上實(shí)現(xiàn)(只是為了學(xué)習(xí)單片機(jī),想實(shí)現(xiàn)這個(gè)功能)請(qǐng)問(wèn)也需要去抖動(dòng)嗎?
void Start_ExInt1()interrupt 2
{
                TR0=1;
                EX1=0;
                ET0=1;               
                EX0=1;
}
這段中斷代碼中,關(guān)斷了INT1,為什么再按一下IE1為什么會(huì)置1?如果不想讓它置位應(yīng)該怎么做?用這種方法關(guān)關(guān)閉和打開(kāi)中斷可以不?還有中斷和掃描哪種方法更可靠的采集到啟動(dòng)和停止按鍵的信號(hào)?剛?cè)胧郑院芏嗉?xì)節(jié)問(wèn)題沒(méi)弄明白。謝謝各位大神們。
回復(fù)

使用道具 舉報(bào)

5#
ID:383215 發(fā)表于 2020-6-8 23:57 | 只看該作者
IE還受IT影響,這個(gè)不是關(guān)鍵,關(guān)鍵之關(guān)鍵就是你必須得到穩(wěn)定鍵值,我從來(lái)沒(méi)有搞過(guò)protuse仿真,我估計(jì)protuse仿真不太可能把按鍵之類(lèi)的元器件真實(shí)仿真出來(lái),不管什么單片機(jī),效率最高的編程方式是實(shí)驗(yàn)板+仿真器+示波器,沒(méi)有這些東西,編程效率太低太低了。
回復(fù)

使用道具 舉報(bào)

6#
ID:104797 發(fā)表于 2020-6-9 06:06 來(lái)自觸屏版 | 只看該作者
想明白了IE置1的問(wèn)題,但是沒(méi)想出怎么解決。
回復(fù)

使用道具 舉報(bào)

7#
ID:213173 發(fā)表于 2020-6-9 10:22 | 只看該作者
lhpm641 發(fā)表于 2020-6-9 06:06
想明白了IE置1的問(wèn)題,但是沒(méi)想出怎么解決。

樓主想要完成上述預(yù)想的功能沒(méi)必要寫(xiě)這么復(fù)雜,只要把邏輯關(guān)系捋清,很容易實(shí)現(xiàn)。不論仿真或?qū)嵨镆餐耆恍枰存I消抖。給你改好了,你試試。

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar Duan[] = {//共陽(yáng)數(shù)碼管段碼"0~f-. "
  5. 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  6. 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f,0xFF};
  7. uchar Wei[4]={0x01,0x02,0x04,0x08};   //位的控制端        (仿真)
  8. uchar Time_Buffer[4];  //時(shí)間緩存
  9. uint  Time=0;
  10. uint  Time_Count=0;
  11. uchar Cnt100us=0;
  12. bit   flag=0;
  13. /*
  14. void delayms(uint x)                //延時(shí)函數(shù)
  15. {
  16.         uint i,j;
  17.         for(i = x; i > 0; i --)
  18.                 for(j = 125; j > 0; j --);
  19. }*/

  20. void Show_Time() //數(shù)碼管動(dòng)態(tài)掃描顯示
  21. {
  22.         uchar i;
  23.         uint  j;
  24.         static uchar k=0;

  25.         /*****************數(shù)據(jù)分解*****************************/
  26.         if(flag==0)//判斷啟動(dòng)標(biāo)志復(fù)位 處理數(shù)據(jù)
  27.         {
  28.                 j=Time;       
  29.                 for(i=4;i>0;i--)
  30.                 {
  31.                         Time_Buffer[i-1]=Duan[j%10];//由低位到高位保存
  32.                         j/=10;
  33.                 }
  34.         }
  35.         else       //等待計(jì)時(shí)結(jié)束
  36.         {
  37.                 for(i=4;i>0;i--)
  38.                 {
  39.                         Time_Buffer[i-1]=0xbf;//全部'-'
  40.                 }
  41.         }
  42.         P0 = 0xFF;
  43.         P1 = Wei[k];
  44.         if(k==0)P0=Time_Buffer[k]&0x7f;//加小數(shù)點(diǎn)
  45.         else P0=Time_Buffer[k];
  46.         k++;k%=4;
  47. }

  48. /******************
  49.        主函數(shù)        
  50. ******************/
  51. void main()
  52. {
  53.         IT0 = 1;//下降沿觸發(fā)
  54.         IT1 = 1;
  55.         EX0 = 1;
  56.         EX1 = 1;
  57.         EA  = 1;  
  58.        
  59.         TMOD=0x02; //設(shè)置為自動(dòng)重載方式
  60.         TH0=0x9c;  //設(shè)置為100us的計(jì)數(shù)
  61.         TL0=0x9c;
  62.         ET0=1;
  63.         TR0=0;
  64.         while(1)
  65.         {
  66.                 Show_Time();
  67.         }
  68. }

  69. void Timer_T0() interrupt 1
  70. {
  71.         if(++Cnt100us>=10)       //1ms
  72.         {
  73.                 Cnt100us=0;
  74.                 if(++Time_Count>9999) //計(jì)時(shí)范圍0-9999
  75.                         Time_Count=0;      //10s
  76.         }
  77. }
  78. void Stop_Int0() interrupt 0
  79. {
  80.         if(TR0==0)       //與INT1互鎖
  81.         {
  82.                 flag=1;                  //啟動(dòng)標(biāo)志
  83.                 Cnt100us=0;   //初始值清0
  84.                 Time_Count=0; //初始值清0
  85.                 TR0=1;                  //開(kāi)始計(jì)時(shí)
  86.         }
  87. }

  88. void Start_ExInt1()interrupt 2
  89. {
  90.         if(flag)         //判斷啟動(dòng)狀態(tài) 與INT0互鎖
  91.         {
  92.                 TR0=0;        //停止計(jì)時(shí)
  93.                 flag=0;             //啟動(dòng)標(biāo)志復(fù)位
  94.                 Time=Time_Count;//讀取計(jì)數(shù)值
  95.         }
  96. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

8#
ID:383215 發(fā)表于 2020-6-9 17:31 | 只看該作者



笑話啊!好好看看吧,這是我用示波器捕捉的一個(gè)按鍵開(kāi)關(guān)由高電平按鍵之后變?yōu)榈碗娖降牟ㄐ危@是實(shí)實(shí)際際測(cè)量出來(lái)的波形,我的示波器檔次太低,我又用了一個(gè)質(zhì)量很好的按鈕開(kāi)關(guān),看起來(lái)抖動(dòng)期才有300多微秒,只有幾次抖動(dòng),實(shí)際上不止這些,質(zhì)量差的按鍵開(kāi)關(guān)抖動(dòng)期至少幾毫秒,抖動(dòng)次數(shù)幾十次,我編下來(lái)的程序,幾十毫秒消除抖動(dòng)的程序最好用,也最可靠,樓主看懂這個(gè)波形就知道為什么程序不可能編成功了,樓主只有踏踏實(shí)實(shí)的用硬件仿真,可以測(cè)試出不同按鍵的抖動(dòng)期和抖動(dòng)次數(shù),并且找到去除抖動(dòng)的編程方法,得到穩(wěn)定的鍵值,接下來(lái)的編程就是小菜一碟了,我看了這個(gè)論壇的一些程序,能得到穩(wěn)定的鍵值的程序并不多,不管是一個(gè)按鈕還是多個(gè)按鈕,編程方法都是一模一樣的,無(wú)非就是讀鍵值、去抖動(dòng)、然后得到穩(wěn)定鍵值,我說(shuō)的這些才是學(xué)習(xí)單片機(jī)編程的捷徑,如果樓主抱著protuse仿真不放,再聽(tīng)信一些人說(shuō)的連去抖動(dòng)都不用就能編出這個(gè)程序,那就是自己哄哄自己玩玩而已了,protuse不可能模擬出實(shí)際的按鍵開(kāi)關(guān)抖動(dòng),protuse不可能把樓主的程序編好,就算可以編出來(lái),也是毫無(wú)意義,還是自己哄自己。
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2020-6-10 07:45 | 只看該作者
任何機(jī)械開(kāi)關(guān)切換時(shí)都會(huì)發(fā)生抖動(dòng),這是客觀存在的事實(shí)。按鍵沒(méi)有任何操作的情況下絕對(duì)不會(huì)發(fā)生抖動(dòng),只要發(fā)生抖動(dòng)必然是有操作。如果認(rèn)為在任何條件下必須對(duì)按鍵抖動(dòng)做處理,其認(rèn)識(shí)和應(yīng)對(duì)方法還局限在教科書(shū)的層面。實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。
回復(fù)

使用道具 舉報(bào)

10#
ID:383215 發(fā)表于 2020-6-10 14:47 | 只看該作者
wulin 發(fā)表于 2020-6-10 07:45
任何機(jī)械開(kāi)關(guān)切換時(shí)都會(huì)發(fā)生抖動(dòng),這是客觀存在的事實(shí)。按鍵沒(méi)有任何操作的情況下絕對(duì)不會(huì)發(fā)生抖動(dòng),只要發(fā) ...

你說(shuō)的非常正確,我的單片機(jī)程序,只要有按鍵,就是“在任何條件下必須對(duì)按鍵抖動(dòng)做處理”,很早以前我就把按鍵去抖動(dòng)程序編的非常穩(wěn)定了,包括單個(gè)、多個(gè)、交叉矩陣、串行的按鍵去抖動(dòng)。像樓主的程序,按鍵去抖動(dòng)不需要任何延時(shí)程序,也不需要定時(shí)中斷,就用查詢(xún)的方法去抖動(dòng),我已經(jīng)說(shuō)的很清楚了,任何按鍵去抖動(dòng)就是讀鍵值、去抖動(dòng)、得到穩(wěn)定鍵值,再說(shuō)明白點(diǎn),就是連續(xù)讀鍵值達(dá)到某個(gè)次數(shù)都是離鍵值,只要一次不為離鍵都不算離鍵,連續(xù)讀鍵值達(dá)到某個(gè)次數(shù)都是按鍵值,只要一次不為按鍵都不算按鍵,用這個(gè)方法,就能得到穩(wěn)定鍵值,包括按下動(dòng)作、彈開(kāi)動(dòng)作、單擊動(dòng)作、雙擊動(dòng)作、三擊動(dòng)作、以及各種組合動(dòng)作,都很容易編出來(lái),至于兩個(gè)按鍵的時(shí)間,用一個(gè)定時(shí)器中斷就能判斷出來(lái)。需要更高精度,可以用RS觸發(fā)器做成硬件按鍵去抖動(dòng),單片機(jī)程序就不用編鍵盤(pán)去抖動(dòng)的程序了,就能做到最高精度。
我編的單片機(jī)程序,不在乎有多復(fù)雜,只在乎占用CPU時(shí)間,占用CPU時(shí)間越短的程序,編程質(zhì)量越高,我編的鍵盤(pán)去抖動(dòng)程序很簡(jiǎn)單,就算“在任何條件下必須對(duì)按鍵抖動(dòng)做處理”,其實(shí)占用CPU時(shí)間很短。“在任何條件下必須對(duì)按鍵抖動(dòng)做處理”,是按鍵動(dòng)作程序最基本的要求,與任何一本教科書(shū)沒(méi)有關(guān)系。你說(shuō)的實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),絕對(duì)正確,用protuse軟件仿真,不是實(shí)踐,僅僅是理論上的一個(gè)軟件模擬而已,樓主的這個(gè)程序,用我說(shuō)的查詢(xún)?nèi)ザ秳?dòng)的方法編程,protuse軟件估計(jì)可以模擬出來(lái),但是,與實(shí)際的按鍵抖動(dòng)肯定有差異,你們應(yīng)該用硬件檢驗(yàn)成功的程序,再用protuse軟件模擬仿真試試,就知道protuse軟件模擬仿真到底有多少價(jià)值了。樓主的這個(gè)程序,用硬件測(cè)試,花不了幾個(gè)錢(qián),一個(gè)51單片機(jī)最小系統(tǒng)板,數(shù)碼管用1602液晶代替,再接兩個(gè)按鍵開(kāi)關(guān)就夠了。我的51、AVR、STM32實(shí)驗(yàn)板都是自制,基本夠我用了,仿真器和示波器是必須的,沒(méi)有這兩樣?xùn)|西,我寧愿不編程序,因?yàn)榫幊绦蕦?shí)在太低了。
回復(fù)

使用道具 舉報(bào)

11#
ID:104797 發(fā)表于 2020-6-10 21:01 | 只看該作者
感謝大神們的指點(diǎn),經(jīng)驗(yàn)寶貴,多謝指教。剛?cè)胧郑磥?lái)我要多和實(shí)際聯(lián)系起來(lái),還有很長(zhǎng)的路要走。剛?cè)胧至艘粔K試驗(yàn)板,以后請(qǐng)大神們多傳授點(diǎn)經(jīng)驗(yàn)。
回復(fù)

使用道具 舉報(bào)

12#
ID:213173 發(fā)表于 2020-6-11 07:55 | 只看該作者
kmsj 發(fā)表于 2020-6-10 14:47
你說(shuō)的非常正確,我的單片機(jī)程序,只要有按鍵,就是“在任何條件下必須對(duì)按鍵抖動(dòng)做處理”,很早以前我就 ...

與您這樣有思想,有經(jīng)驗(yàn),非人云亦云的壇友交流非常有益。在7樓回復(fù)中用protuse軟件仿真,當(dāng)然不能算是實(shí)踐。這只不過(guò)是按樓主意圖用樓主容易看明白方式理解程序而已。但為樓主提供的修改過(guò)的程序絕對(duì)經(jīng)得住實(shí)物驗(yàn)證。事實(shí)也是經(jīng)實(shí)物驗(yàn)證過(guò)是穩(wěn)定可靠的。一般在實(shí)際應(yīng)用中開(kāi)關(guān)信號(hào)都是在主循環(huán)中查詢(xún)處理,滯后幾十毫秒響應(yīng)無(wú)所謂。而必須用外部中斷處理的事件則要求及時(shí)響應(yīng)(濫用外部中斷除外),滯后幾十毫秒響應(yīng)就顯得很漫長(zhǎng)。其實(shí)從來(lái)沒(méi)有用protuse軟件設(shè)計(jì)過(guò)產(chǎn)品,只是玩玩而已。實(shí)際開(kāi)發(fā)產(chǎn)品都是用實(shí)驗(yàn)板前期實(shí)驗(yàn),無(wú)誤后少量定制PCB打樣機(jī)。經(jīng)48小時(shí)拷機(jī),EMC、高/低溫及振動(dòng)試驗(yàn)。最后(往往不會(huì)一次通過(guò))才能投入批量生產(chǎn)。若發(fā)生大批量召回事件是要讓老板破產(chǎn)的。
回復(fù)

使用道具 舉報(bào)

13#
ID:383215 發(fā)表于 2020-6-11 15:53 | 只看該作者
wulin 發(fā)表于 2020-6-11 07:55
與您這樣有思想,有經(jīng)驗(yàn),非人云亦云的壇友交流非常有益。在7樓回復(fù)中用protuse軟件仿真,當(dāng)然不能算是實(shí) ...

那就奇怪了,本論壇用protuse軟件仿真的人,為什么那么多的問(wèn)題解決不了?到處都有把程序大段大段的發(fā)上來(lái)讓大家?guī)椭鉀Q的人,我認(rèn)為這是浪費(fèi)自己的時(shí)間、浪費(fèi)別人的時(shí)間、浪費(fèi)論壇資源,我看這些程序,只要有硬件仿真器,只要可以設(shè)置斷點(diǎn),只要可以單步執(zhí)行,觀察變量,絕大多數(shù)的程序有問(wèn)題自己都可以搞定,學(xué)習(xí)單片機(jī)編程,必須培養(yǎng)自己解決問(wèn)題的能力,那接到項(xiàng)目搞不定也是發(fā)上論壇,沒(méi)有人幫解決難道要去喝西北風(fēng)?protuse軟件怎么不能像硬件仿真器那樣可以設(shè)置斷點(diǎn)、單步執(zhí)行、觀察變量?如果能為什么那么多問(wèn)題解決不了?我的硬件仿真已經(jīng)做的比較完善,不想研究protuse軟件了。本論壇用硬件仿真遇到問(wèn)題發(fā)帖的人幾乎不見(jiàn),別人不好說(shuō),我自己就是用硬件仿真,絕大多數(shù)的問(wèn)題我自己都能解決,靠的就是仿真器、示波器,以及自制的開(kāi)發(fā)板。我看過(guò)一些單片機(jī)教程,編個(gè)按鈕開(kāi)關(guān)都要用掉外中斷、定時(shí)器,明顯就是濫用中斷、濫用資源,我編的按鍵開(kāi)關(guān)程序,連延時(shí)都不需要,照樣編的很穩(wěn)定,有一種單片機(jī)編程叫做CPU應(yīng)用率,其實(shí)是單片機(jī)編程的最基本要求,可以把單片機(jī)資源運(yùn)用的非常合理,編的程序既簡(jiǎn)單又可靠,達(dá)到這個(gè)地步的人估計(jì)統(tǒng)統(tǒng)閉嘴了。
回復(fù)

使用道具 舉報(bào)

14#
ID:383215 發(fā)表于 2020-6-11 15:59 | 只看該作者
lhpm641 發(fā)表于 2020-6-10 21:01
感謝大神們的指點(diǎn),經(jīng)驗(yàn)寶貴,多謝指教。剛?cè)胧郑磥?lái)我要多和實(shí)際聯(lián)系起來(lái),還有很長(zhǎng)的路要走。剛?cè)胧至艘?...

學(xué)習(xí)單片機(jī)解決問(wèn)題最快的方法就是用仿真器設(shè)置斷點(diǎn)、單步執(zhí)行、觀察變量,一定要培養(yǎng)自己獨(dú)立解決問(wèn)題的能力,51仿真器最好要買(mǎi)一、兩百元以上可以仿真所有IO口和所有資源的仿真器,可以在keil下硬件仿真,你學(xué)習(xí)51單片機(jī)的速度至少可以提高好幾倍,舍不得在開(kāi)發(fā)工具上花錢(qián),只會(huì)拖慢自己的學(xué)習(xí)速度和開(kāi)發(fā)速度,51單片機(jī)只有學(xué)習(xí)價(jià)值,沒(méi)有運(yùn)用價(jià)值了,要快速把51單片機(jī)弄懂,然后可以學(xué)一下AVR單片機(jī),用洞洞板都可以自制一個(gè)JTAG仿真器和下載器,不是特別好用,對(duì)付一般學(xué)習(xí)開(kāi)發(fā)基本夠用,最后還要學(xué)習(xí)STM32,STM32的jlink仿真器相當(dāng)好用,價(jià)格也不貴。51單片機(jī)學(xué)會(huì)之后不能丟,我現(xiàn)在很多東西就是先用51單片機(jī)快速編出來(lái),然后移植到AVR或者STM32,我覺(jué)得效率很高,你照我的話去做很快就能成為大神,我不是大神,這些東西只是我的業(yè)余愛(ài)好而已。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表