啟動訊號的寫法

作者 a780917a 於 2018年06月29日 11:47:34
大家好,不好意思又來發問了。
想在程式中加入一個啟動功能,用了一個10K電阻將腳位Pull-High,開關壓下時,腳位對地,接收到0訊號後,觸發啟動flag,程式才開始運作。


第一個問題是,main()裡面的程式會重複執行嗎? 因為我一直理解是main{}裡面的程式只有在Reset時執行一次,之後循環執行while(1){}的程式,但假如我的while(1)沒有觸發的話 main{}會重複執行嗎?

因為我原本的寫法如下,後來想想不對,這樣我Reset後中斷始能的判斷式應該只掃一次,在去按開關應該沒效了才對,但是我用ICD3模擬卻發現可以觸發,這顛覆了我一直以來的觀念..
void main(void)
{
SYSTEM_Initialize();

if(IO_RA5_PORT == 0)
{
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();

// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();
FlagReg1.Start_FLAG = 1;

}

if(FlagReg1.Start_FLAG)
{
while (1)
{
程式內容;
}
}
}

第二個問題:
因為我的程式中有很多中斷程式,所以我把中斷始能的程式也拉到主程式的while(1)裡面寫,但是TMR的計時器好像還是有在跑,是不是要把SYSTEM_Initialize();也放到if(IO_RA5_PORT == 0)裡面? 還是各位高手有更精湛的寫法可以讓小弟學習呢,謝謝。

void main(void)
{
SYSTEM_Initialize();

while (1)
{
if(IO_RA5_PORT == 0)
{
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();

// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();
FlagReg1.Start_FLAG = 1;

}
if(FlagReg1.Start_FLAG)
{
程式內容;
}
}
}

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22338&post_id=78313