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分周までしかできません