p.386
AVR Programming: Learning to Write Software for Hardware カテゴリーの記事一覧 -では、Elliotの用意したUSARTライブラリーをずっと使っていたが、これは送受信の完了をポーリングで確認するものであった。
ここでは受信完了時に割り込んで何かをしてみる。
#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; }