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)に書き込んでいます。
こうしたいと思うことを先に(黙って)やってくれています。
なかなか、賢いコンパイラです。