看板 Electronics 關於我們 聯絡資訊
經由下午看書和前輩的指導後~給予我自己答案~ 我原本1的意思是.我進入 "外部中斷0"時,因為我是要停止(讓程式跑回最初狀態) 如果用goto的話~怕會讓暫存器會一直堆疊我未完成的資料. 但經由前輩指點說: 如果是有WatchDog的IC~就能讓軟體RESET... 否則方法也就如Magicx前輩所說:就在"外部中斷0"設一個旗標. 然後在主程式再做判斷.. 只是方法2的不好的地方在於~我是按STOP鍵就要讓整個程式跑回最初~ 但何時會按STOP不知道~~所以得再每個主程式都得一直加判斷有無進入"外部中斷0" 但用於 switch case:的話~~好像就不用一直狂寫判段式~ 只要在最後面寫一段就ok~~ 想法如下: 如有錯誤請高手指教~ ---------------------------------------------- void stop() interrupt 0 { fg=1; } main() { init() while(1) { switch(temp) { case 1: ........ break: case 2: ........ break: } if(fg=1) { fg=0; return; { }//while }//main --------------------------------------------- ※ 引述《Magicx (270度的鳥顧之相)》之銘言: : ※ 引述《fmdjyl (小D(滴))》之銘言: : : 今天做一個實習,用兩顆按鑑,一顆是開始鍵、一顆是停止鍵。 : : 停止鍵是用在INT0(外部中斷) : : 請問我該如何寫在停止鍵按下後,就讓程式完全停止呢? : 用while()檔 : : 1.在外部中斷副程式裡面寫能跳到最外層迴圈嗎? : 聽不懂你意思= = : : 2.還是在外部中斷執行時,設定一個旗標。 : : 然後在主程式一直做有無進入INT0的判斷嗎? : 水啦! that's right! : : PS:其實我不知道當進入 "外部中斷副程式"在那裡能寫些什麼? : : 我是希望能進入 "外部中斷副程式" 後就能立即跳離程式。 : : 但怕會有暫存器會一直堆疊的問題。 : 參考看看.... : unsigned char global_flag=0; : : void stop() interrupt 0 : { : global_flag=1; : } : : void start() interrupt 2 : { : global_flag=0; : } : : : void main() : { : while(1) : { : //你要做的事 : : while(global_flag==1); : } : : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.117.4