TIMER0割込の使い方とその周期の設定方法は?
次の例は、固定した周期でパルスを出力するプログラムです。:
このプログラムでは、約1秒でパルスを出力します。この計算方法を以下に示します。:
タイマーのカウンター・インクリメントは(CLOCK/4)/RTCC_DIV。
この例では、(15000000(15MHz)/4)/128=29297Hz(34us)
タイマーは256カウントするとオーバーフローし割込かかかります。
この例では、29297/256=114(8.77mS)
この例では、HIGH_STARTを114にしていますので、1秒でパルスが出力されます。もし、HIGH_STARTが57ですと、パルスは毎秒2回です。
#include <16Cxx.H>
#use Delay(clock=15000000)
#define HIGH_START 114
byte seconds, high_count;
#INT_RTCC
clock_isr() {
if(--high_count==0) {
output_high(PIN_B0);
delay_us(5);
output_low(PIN_B0);
high_count=HIGH_START;
}
}
main() {
high_count=HIGH_START;
set_rtcc(0);
setup_counters(RTCC_INTERNAL, RTCC_DIV_128);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
while(TRUE);
}