TOPへ戻る

20070716 WinAVRのUSART(SIO)シリアルを試してみる2

ちょっと前に、シリアル通信の確認を行いましたが、送信だけの確認でしたので、受信側も試してみます。

※ATmega168 20MHz にて、確認を行っています。他のシリーズを使用する場合レジスタ等を変更してください。

ソースコード
#include <avr/io.h> #include <util/delay.h> #define FOSC 20000000 // 20MHz /** sio設定 **/ #define BAUD 38400 #define MYUBRR FOSC/16/BAUD-1 // sio分周率 /* No Operation */ void nop(int count){ int i; for(i = 0; i < count; i++){ _delay_ms(100); } } /* PORT設定 */ void port_init(void){ DDRB = 0x01; PORTB = 0x00; } /* sio設定 */ void sio_init(unsigned int ubrr){ UBRR0H = (unsigned char)(ubrr>>8); // ボーレート上位8bit UBRR0L = (unsigned char)ubrr; // ボーレート下位8bit UCSR0B = (1<<RXEN0)|(1<<TXEN0); // 送受信許可 UCSR0C = (1<<USBS0)|(3<<UCSZ00); } int main(void){ char a; port_init(); // PORT設定 sio_init(MYUBRR); // SIO設定 for(;;){ a = UDR0; UDR0 = a; // A送信 PORTB = ~PORTB; // LED点滅 nop(10); } } このコードで、ハイパーターミナルで文字を入力すると、エコーバックされることは確認しました。

で、本当は割り込みによる受信を行いたいのですが、受信割り込みによる受信がうまくできない。

2007/07/15 初版

TOPへ戻る