TIMER0割込の使い方とその周期の設定方法は?

次の例は、固定した周期でパルスを出力するプログラムです。:

#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);
}

このプログラムでは、約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回です。