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