Re: 菜鳥又有疑問囉???
|
||||
---|---|---|---|---|
高級會員
|
這時就需要所謂的分時多工了
嘿嘿我剛好會 簡單說明 首先在time設一個機時例如5ms time interrupt時設一個flag 然後使用main loop 輪詢 ex: for P12c508 no time interrupt 你可以選一顆比較強的MCU 使用起來更方便一點 call CLEAR_ALL_RAM ; CLEAR ALL RAM CALL SYSTEM_INITIAL ; THE SYSTEM INITIAL MOVLW .256-156 ;124 ;-+ set the timer for 1ms MOVWF TMR0 ;-+ WAIT_LOOP: BTFSC P_SYNC GOTO SUB_PROC1 MOVF TMR0,W ; 1us BTFSS STATUS,Z ; 1us GOTO WAIT_LOOP ; 2us call CHECK_TIME ; 10US MOVLW .256-156 ;124 ; RELOAD TIMER VALUE MOVWF TMR0 GOTO WAIT_LOOP SUB_PROC1: CALL PHASE_DELAY CALL KEY_SCAN CALL KEY_CHATTER CALL MODE_PROC WAIT_LOOP1: BTFSS P_SYNC GOTO SUB_PROC2 MOVF TMR0,W ; 1us BTFSS STATUS,Z ; 1us GOTO WAIT_LOOP1 ; 2us call CHECK_TIME ; 10US MOVLW .256-124 ; RELOAD TIMER VALUE MOVWF TMR0 GOTO WAIT_LOOP1 SUB_PROC2: CALL PHASE_DELAY CALL KEY_SCAN CALL KEY_CHATTER CALL MODE_PROC GOTO WAIT_LOOP 所有的時間都是這一個副程式在計算你要delay三年或五年隨你 完全不影響你的其他工作 ;*********************************** ;*** SYSTEM TIME CONTROL ROUTINE *** ;*********************************** CHECK_TIME: ; CALL TO HERE 2US MOVF T_CNT1,f ; 1US BTFSS STATUS,Z ; 1US DECF T_CNT1,F ; 1US MOVF KEY_CHT,f ; 1US BTFSS STATUS,Z ; 1US DECF KEY_CHT,F ; 1IS movf KEY_REP,F DECF KEY_REP,F RETLW 0 ; 2US
發表於: 2005/6/14 13:45
|
|||
|
Re: 菜鳥又有疑問囉???
|
||||
---|---|---|---|---|
版主
|
程式是靠人腦寫出來的,你要把她寫成笨笨的還是聰明取決於你。短時間的 Delay (<500uS) 用軟體方式比較不影響,超過的話如果CPU也沒事幹做做DELAY也無傷大雅,如果CPU已經很忙了又要算DELAY的話,Timer的中斷就很重要了。
發表於: 2005/6/3 16:48
|
|||
|
Re: 菜鳥又有疑問囉???
|
||||
---|---|---|---|---|
高級會員
|
看妳用那一種方法寫Delay程式, Delay有分為二種方式
1. 輪詢式: 也就是會一直等, 等到時間到才進行下一個指令 2. 中斷式: 也就是Delay的事件產生了只是會打斷CPU一下 而Delay事件與其他事件可以一起執行 在寫任何的事件都有這兩種方式, 因此使用中斷方式是較有效率的寫法
發表於: 2005/6/3 7:19
|
|||
人生最長久的擁有是珍惜 但是大都在失去後才發現
|
||||
|
菜鳥又有疑問囉???
|
||||
---|---|---|---|---|
資深會員
|
目前還再研究10F2xx系列程式 原因是程式都比較單純
對菜鳥我 比較不會打結 但是ㄋㄟ????? 嘿.. 嘿.. 又有疑問囉??? 請教個位一個笨笨問題???? 如果MCU 在跑Delay 程式時 是否還可以執行其他程式 如果不能 那Delay 程式是120Sec或更長 的話 MCU就要呆跑Delay 程式 後才能再辦案啦 那不就是笨笨MCU啦 Will ..... any solution for this stupid question???
發表於: 2005/6/3 0:31
|
|||
|