11 タイマ3の周期割り込み
タイマ3で10Hzの周期割り込みをやってみます.
タイマ3は16bitカウンタです.
---------------ソースコードここから--------------------
#include "18F65K80.h"
#use delay(clock=8M) 10Hzで割り込むには8MHzにせざるをえません
#use rs232(UART1,BAUD=115200,PARITY=N,BITS=8,STOP=1)
int i=0;
#int_timer3 以下の関数はタイマ3割り込みルーチンであるという意味
void timer3interrupt(){
set_timer3(65535-25000); ①カウンタ初期値を65535-25000=40535にする意味.25000カウントのタイマになる.
output_toggle(PIN_G4); ポートG4を反転
printf("hello %d\n\r",i++); UARTにhello 22などと出力
}
void main(void){
setup_oscillator( OSC_8MHZ ); ②clock=8MHzにする
setup_timer_3(T3_INTERNAL③ | T3_DIV_BY_8④); ③内部clock ④プリスケ8分周
enable_interrupts(INT_TIMER3); タイマ3割り込み許可
enable_interrupts(GLOBAL); 割り込み許可
while(1){}
}
--------------------ソースコードここまで----------------------
割り込み周波数はこのようにして決まります.
②clock=8MHz
③内部clockなので、8MHz÷4=2MHz
④プリスケーラ8分周なので、2MHz÷8=250kHz
⑤25000カウントなので、250kHz÷25000=10Hz
引数の選択肢は、
set_timer3(0~65535);
setup_timer_3(T3_INTERNAL | T3_DIV_BY_8);
T3_DISABLED, T3_INTERNAL, T3_EXTERNAL, T3_EXTERNAL_SYNC
T3_DIV_BY_1, T3_DIV_BY_2, T3_DIV_BY_4, T3_DIV_BY_8 最大で8分周までしかできません