1216792410*試しながら学ぶAVR入門 通信プログラム(prg0601.c) うごかないよぉ
試しながら学ぶAVR入門 通信プログラム(prg0601.c)ってやつと格闘した。
本にしたがってやってみてもさっぱり動かねー。
何が悪いのだか最初さっぱりわからないで悩んだね。
本ではmega48だけど私のは88。これは関係ないなぁ、とか、
RS232のループバック回路を作ってMAX232を疑ってみたり、
ボーレートを変えてみたり、
元クロック1MHzを疑ってみたり......
突破口は、AVRマイコンをリセットし、その直後にキーボードを連打すると
一発目だけは正しい値を
LED表示したりすることがあるっての
を発見したこと。
この時点で
*ボーレートはあっているに違いない!
*通信経路も問題ないに違いない!
よしゃ、ハードは問題なし!ってことが判明した。
となると、やっぱりプログラムのミスだよね、と確信したので、
プログラムをよくよく精査してみる。
結果は、プログラムバグってるやん、間違ってるやんけ!
ってことで変更して、動いたー!!
本は出版されたばっかりでCQ出版には正誤表は
まだないみたいだし。私、一番乗り?(笑)
次のようにプログラムを変えるてやると(本の近々の目的の通りに)動きます。
著者のねらっている目的に沿っているかどうかは不明ですが......
写真はキーボードから大文字のA(0x41)を叩いたところ
0b01000001になっているでしょ?
#includeint main(void) { unsigned volatile char x; DDRB=0b11111111; DDRC=0b00001111; DDRD=0b11110000; PORTB = 0b00000111; UBRR0 = 25; UCSR0B = 0b00011000; UCSR0C = 0b00000110; while(1) { while( (UCSR0A & 0b10000000 )){ x = UDR0; UDR0 = x; } PORTC = 0x0f & x; PORTD = 0xf0 & x; } }
RS-232の復習にもなったよ