8051中斷後動作異常 |
答題得分者是:taishyang
|
van83619
一般會員 ![]() ![]() 發表:4 回覆:7 積分:2 註冊:2012-10-24 發送簡訊給我 |
各位大大好
小弟最近在做8051中斷控制的練習 用紅綠燈的誠是在額外加一個中斷控制 配置如圖(一) 中斷是INT0 ![]() 下面三個端子的電路圖(二) 圖中PB的部分改成紅色電線另做控制 ![]() 動作是 當中斷後假如是遇到 "直向綠燈 橫向紅燈" 則按下P1.0使燈號改成 "直向紅燈 橫向綠燈" 遇到"直向紅燈 橫向綠燈" 則按下P1.1使燈號改成"直向綠燈 橫向紅燈" 小弟遇到的問題是中斷後按下P1.0直向變為紅燈後紅燈又馬上跳掉 按下P1.1橫向變為紅燈後紅燈又馬上跳掉 下方網址影片為小弟所錄 http://youtu.be/p-_XW0Fyy6c 20秒開始中斷然後控制P1.0 30~32秒為所遇到的問題 40秒是第二次中斷然後控制P1.1 54~56為所遇到的問題 下面是我的程式碼 #pragma oe db pw(80) SM SB CD #include #define LED P0 //定義按鈕開關接至P1 void delay1ms(int) //宣告延遲函數 void debouncer(void) ; int i; for(;;) //左右向綠燈:前向紅燈 delay1ms(500) ; } for(i=0;i<4;i ) if((i&1)==1) } { P0 = 0x11; } // 左右向紅燈 for(i=0;i<10;i ) delay1ms(500) ; { { } P0 = 0x0a; delay1ms(1000) ; } interrupt 0 case 0x01: //P1.0 unsigned saveLED=LED; P0 = 0x0a; delay1ms(500) ; { { P0 = 0x08; else //左右向閃黃燈,前向綠燈 delay1ms(1000) ; } debouncer(); LED=saveLED; break; case 0x02: //P1.1 unsigned saveLED=LED; P0=0x11; for(i=0;i<10;i ) { { { P0 = 0x01; else //左右向閃黃燈,前向綠燈 delay1ms(1000) ; } debouncer(); LED=saveLED; } } } // 延遲副程式 int a,b; for(b=0;b<120;b ); } //防彈跳副程式 void debouncer(void) { for(i=0;i<2400;i ) ; } |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
1.通常在中斷中不會使用delay
而是記錄狀態後回到主程式後依照紀錄的狀態改變行為 2.若程式RUN到delay1ms,此時發生中斷,中斷裡面又呼叫delay1ms,應該會出問題的 底層的原因同下面連結 http://delphi.ktop.com.tw/board.php?cid=173&fid=1167&tid=96734 若用C寫的話可以用關鍵字[using]避開同BANK R0~R7相衝的問題 |
van83619
一般會員 ![]() ![]() 發表:4 回覆:7 積分:2 註冊:2012-10-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |