作者Magicx (270度的鳥顧之相)
看板Electronics
標題Re: [問題] (8051 C語言) 外部中斷問題。
時間Wed Feb 14 21:25:57 2007
※ 引述《fmdjyl (小D(滴))》之銘言:
: 不好意思~~因為看了你第一次的解答~~我也明白~~我應該讓你會錯意了!!!
: 我的停止是回到最初~~並非在原地停止不動~~
: 至於那return 我是要跳出while迴圈~回到最初~~ 我想是否改為下列這樣寫比較好呢?
: 51和c才剛開始學~所以很多想法不太確定不對~~ 得實際跑過才能確定~~
: 非常謝謝你的指教~~
: ----------------------------------------------------------------------------
: void stop() interrupt 0
: {
: fg=1;
: }
: main()
: {
: while(1)
: {
: init() //做一些初始化
: data()
: }
//嗯...首先..假設你沒按start....那麼你的程式會一直執行init()
//再來你按下start後..你的程式會不斷執行init()然後data()
//這樣你做一次data後下次進來會做一次init()?? 怪怪的? 這是你的原意嗎?
//再來...如果你按下reset...return應該會讓你跳出while...程式結束....
//因為我不知道你到底是要做怎樣的東西...所以就只是講一下你的程式將會如何執行
我是覺得應該是這樣寫:
void start() interrupt 2
{
start_flag =1;
}
void reset() interrupt 0
{
reset_flag =1;
}
init()
{
.............//其他重置
start_flag =0;
reset_flag =0;
}
main()
{
while(1)
{
init() //做一些初始化
while(start_flag==0); //START=1才開始執行
while(reset!=1)
data();
}
}
//這樣一來...不會重複無謂的重置....重置做一次就好..之後等中斷函式START的執行
//沒按下reset的話會一直執行data()...
//按下去的話會執行一次重置然後停在 while(start_flag==0); 等使用者
參考看看~
: }
: data()
: {
: if(start == 0)
: {
: switch(temp)
: {
: case 1:
: ........
: break;
: case 2:
: ........
: break;
: }
: if(fg == 1)
: {
: fg=0;
: return;
: {
: }
: }
: ※ 引述《Magicx (270度的鳥顧之相)》之銘言:
: : 倒也不是不好啦...可能你前面沒把問題講清楚..."你的stop是要重置"
: : "而不是暫停在那..一但按下start..程式繼續執行" <--這是我原來的意思
: : ^^^^^^^
: : 我還是不太懂你switch的用意...?
: : 而你這個return ...應該是會跳出while(1)..繼續往下執行喔
: : 這樣應該沒有重置...而是結束...所以你的reset應該是寫在本來的
: : int0中斷函式裡
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.204.164
1F:推 fmdjyl:非常謝謝你的指導~~讓我受益良多!!謝謝你~~~ 02/14 22:05
2F:推 Magicx:呵..不客氣~ 02/16 17:01