09 タイマ1の周期割り込み

タイマ1による周期割り込みをやってみます.

タイマ1もタイマ0と同じく16bitカウンタです.

おおむねタイマ0と似てますけど、setup_timer_1()の引数が異なりますので要注意です.

下記は10Hzで割り込みをかけます.LEDは5Hzでチカチカします.

----------------------ソースコードここから---------------------

#include "18F65K80.h" 必須です

#use delay(clock=8M) 今回はclock=8MHzにしてみたので、clock 8MHzであることをcompilerに教えます

#use rs232(UART1,BAUD=115200,PARITY=N,BITS=8,STOP=1) UARTの設定です.今回は115200bpsにしてみました.115200が最高bpsです

int i=0; 静的変数を利用します.0で初期化

#int_timer1 この後がタイマ1の割り込みルーチンであるという意味です

void timer1interrupt(){ タイマ1割り込みルーチン

set_timer1(40535); 8M/4/8/(65535-25000)=10Hz となります 40535~65535まで25000カウントという意味

output_toggle(PIN_G4); ポートG4を反転

printf("hello %d\n\r",i++); UARTに hello 10 などと送信

}

void main(void){ メインルーチン

setup_oscillator( OSC_8MHZ ); clock=8MHz

setup_timer_1(T1_INTERNAL | T1_DIV_BY_8 ); 内部clockでプリスケ8分周

enable_interrupts(INT_TIMER1); タイマ1割り込みを許可

enable_interrupts(GLOBAL); 割り込み全体を許可しているらしい.これをしないとタイマ1割り込みがかからなくなってしまう

while(1){}

}

---------------------ソースコードここまで---------------------

引数の選択肢を、記します.・

setup_timer_1()

#define T1_DISABLED 0

#define T1_INTERNAL 0x07

#define T1_EXTERNAL 0x87

#define T1_EXTERNAL_SYNC 0x83

#define T1_FOSC 0x47

setup_timer_1()

#define T1_DIV_BY_1 0

#define T1_DIV_BY_2 0x10

#define T1_DIV_BY_4 0x20

#define T1_DIV_BY_8 0x30