Re: [問題] (8051 C語言) 外部中斷問題。
※ 引述《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
: ---------------------------------------------
: ※ 引述《Magicx (270度的鳥顧之相)》之銘言:
: : 用while()檔
: : 聽不懂你意思= =
: : 水啦! that's right!
: : 參考看看....
: : 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: 218.175.204.164
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 6 篇):