不好意思~~因為看了你第一次的解答~~我也明白~~我應該讓你會錯意了!!!
我的停止是回到最初~~並非在原地停止不動~~
至於那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