目次

時間待ち処理

 LCDのようなデバイスは、初期化に時間待ちが必要になる。  タイマー割込みの中に、ステートマシンを入れ、時間待ちを  任せるのが簡単でよい。  フラグとカウンタを用意し、タイマー割込み処理は、以下とする。  (H8/Tinyを利用し、0.1ms割込みと仮定) void int_timerv(void) { UBYTE dummy ; /* dummy read */ dummy = TV.TCSRV.BIT.CMFA; TV.TCSRV.BIT.CMFA = OFF ; /*----------------------------*/ /* 0.1 ms x N timer primitive */ /*----------------------------*/ switch ( wait_state ) { case 0 : wait_state = 0 ; if ( WAIT_FLAG == ON ) { wait_state = 1 ;} break ; case 1 : wait_cnt-- ; if ( wait_cnt == 0 ) { wait_state = 2 ; WAIT_FLAG = OFF ; } break ; case 2 : default : wait_state = 0 ; break ; } }  1msの時間待ちは、カウンタに10を設定後、フラグをセットし  そのフラグがリセットされるまで、監視を続けるとよい。 void mwait(void) { /* set time counter */ wait_cnt = 10 ; /* enable timer processing */ WAIT_FLAG = ON ; /* wait */ while ( WAIT_FLAG == ON ) ; }  Nmsの時間待ち(Nは2以上)は、mwaitをループ内で呼出し  実現する。 void mwait_by(UWORD x) { volatile UWORD i ; for ( i = 0 ; i < x ; i++ ) { mwait(); } }
目次

inserted by FC2 system