denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

XC8コンパイラは賢い

タイマー割り込みのインターバルをどこまで早く出来るか?が問題になって、割り込みハンドラの中を覗いてみました。

プログラム・コードはこんな感じ

void TMR1_ISR(void)
{

 PIR1bits.TMR1IF = 0;

 TMR1H = (timer1ReloadVal >> 8);   <==これが
 TMR1L = timer1ReloadVal;

}

1749 0020 movlb 0 ; select bank0
174A 1011 bcf 17,0 ;volatile
174B 0879 movf _timer1ReloadVal+1,w ;volatile  <==こうなっている!
174C 0097 movwf 23 ;volatile
174D 0878 movf _timer1ReloadVal,w ;volatile
174E 0096 movwf 22 ;volatile
1759 0008 return

 timer1ReloadValを右に8bit-shiftした値をTMR1Hレジスタに書き込む処理ですが、_timer1ReloadValの一つ先のアドレスを読み取って、23番地(<==多分TMR1H)に書き込んでいます。

 

こうしたいと思うことを先に(黙って)やってくれています。

なかなか、賢いコンパイラです。