看板 Electronics 關於我們 聯絡資訊
不好意思~~因為看了你第一次的解答~~我也明白~~我應該讓你會錯意了!!! 我的停止是回到最初~~並非在原地停止不動~~ 至於那return 我是要跳出while迴圈~回到最初~~ 我想是否改為下列這樣寫比較好呢? 51和c才剛開始學~所以很多想法不太確定不對~~ 得實際跑過才能確定~~ 非常謝謝你的指教~~ ---------------------------------------------------------------------------- void stop() interrupt 0 { fg=1; } main() { while(1) { init() //做一些初始化 data() } } data() { if(start == 0) { switch(temp) { case 1: ........ break; case 2: ........ break; } if(fg == 1) { fg=0; return; { } } ※ 引述《Magicx (270度的鳥顧之相)》之銘言: : ※ 引述《fmdjyl (小D(滴))》之銘言: : : 經由下午看書和前輩的指導後~給予我自己答案~ : : 我原本1的意思是.我進入 "外部中斷0"時,因為我是要停止(讓程式跑回最初狀態) : : 如果用goto的話~怕會讓暫存器會一直堆疊我未完成的資料. : : 但經由前輩指點說: 如果是有WatchDog的IC~就能讓軟體RESET... : : 否則方法也就如Magicx前輩所說:就在"外部中斷0"設一個旗標. : : 然後在主程式再做判斷.. : : 只是方法2的不好的地方在於~我是按STOP鍵就要讓整個程式跑回最初~ : 倒也不是不好啦...可能你前面沒把問題講清楚..."你的stop是要重置" : "而不是暫停在那..一但按下start..程式繼續執行" <--這是我原來的意思 : : 但何時會按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; : ^^^^^^^ : 我還是不太懂你switch的用意...? : 而你這個return ...應該是會跳出while(1)..繼續往下執行喔 : 這樣應該沒有重置...而是結束...所以你的reset應該是寫在本來的 : int0中斷函式裡 : : { : : }//while : : }//main : : --------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.117.4