USART / とにかく何かを送受信する / Cで記述する / 割り込みを利用する

p.386
AVR Programming: Learning to Write Software for Hardware カテゴリーの記事一覧 -では、Elliotの用意したUSARTライブラリーをずっと使っていたが、これは送受信の完了をポーリングで確認するものであった。

ここでは受信完了時に割り込んで何かをしてみる。
f:id:ti-nspire:20200531073535p:plain:h300

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

#define F_CPU 8000000UL
#define BAUD 9600UL

ISR(USART_RX_vect){               // 1バイトを受信し終えたら、
    UDR0 = (PORTB = UDR0) - 0x20; // それをPORTBに出力するとともに大文字に変えて送り返す。
}

int main(){
    DDRB = 0xFF;
    
    UBRR0L = (uint8_t)(F_CPU / (16 * BAUD) - 1); // ボーレートを設定して、
    UCSR0C = 1 << UCSZ01 | 1 << UCSZ00;          // 8N1にして、
    UCSR0B |= (1 << RXEN0 | 1 << RXCIE0);        // レシーバーを有効にして、受信完了割り込みを有効にして、
    UCSR0B |= (1 << TXEN0);                      // トランスミッターを有効にして、
    sei();                                       // グローバル割り込みを有効にして、

    while(1);
    return 0;
}