經由下午看書和前輩的指導後~給予我自己答案~
我原本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