単純なタイマーは TCCRxA と TCCRxB レジスタに値を設定するだけで開始される。TCNTx を参照するとカウント中の値が得られる。
下記プログラムは PB0 - PB7 に LED を接続して実行。ビット出力の様子が見られる。
最上位ビット (PB7) が 1KHz をさらに256(2^8)で割った値(約4Hz)で点滅するので、上位3ケタぐらいしか目では点滅は判別できない。
ちなみにシステムクロックを 125KHz に設定するとかなり判別が容易になるが、125KHz に設定する場合は CKDIV8 をアンチェックし、さらにISP Freq. を 125KHz ->6.478KHz にしないと通信ができないので注意。
//timer_test1.c
//8bit タイマーテスト
#include
#include
int8_t time_count;
int main(void)
{
//タイマー設定
TCCR0A=0b00000000; //default
TCCR0B=0b00000101; //clk/1024 = 1KHz =1msec
DDRB = 0b11111111; //PB0 - PB7 = LED
while (1)
{
time_count=TCNT0;
PORTB=time_count;
//_delay_ms(10); 表示をゆっくり見られるように、このようなディレイを入れた場合、
//ディレイの間もタイマカウントは進むので、LED表示が間欠的になり、正しい表示が
//得られない
}
return 0;
}