Lチカから再開

CについてもAVRについても何もかも忘れた。記事とは無関係であるがLチカから復習する。328Pで試す。

// CKDIV8は工場出荷時のまま

#include <avr/io.h>
#include <avr/interrupt.h>

ISR(TIMER2_COMPA_vect){ // timer2がコンペア値Aにマッチするたびに
    PORTB ^= 0b11; // PB1:0の出力をトグルする。
}

int main(void){
    DDRB = 0b11; // PB1:0からパルスを出力することにする。
    PORTB = 0b10; // 最初にPB1とPB0とのロジックを相補関係にしておく(だから0b01でもよい)。

    TCCR2A = 1 << WGM21; // CTCモード
    TCCR2B = 1 << CS22 | 1 << CS21 | 1 << CS20; // クロックを1024分周してカウントする。
    
    // 周波数 = (ソースクロック / 分周比) / 2 / (コンペア値 + 1)
    // コンペア値 = ソースクロック / (2 * 周波数 * 分周比) - 1
    OCR2A = 243; // コンペア値A。
    
    TIMSK2 = 1 << OCIE2A; // コンペアマッチA割り込みを有効化する。
    sei();

    while(1);
    return 0;
}