1216792410*試しながら学ぶAVR入門 通信プログラム(prg0601.c) うごかないよぉ

試しながら学ぶAVR入門 通信プログラム(prg0601.c)ってやつと格闘した。

本にしたがってやってみてもさっぱり動かねー。
何が悪いのだか最初さっぱりわからないで悩んだね。
本ではmega48だけど私のは88。これは関係ないなぁ、とか、
RS232のループバック回路を作ってMAX232を疑ってみたり、
ボーレートを変えてみたり、
元クロック1MHzを疑ってみたり......

突破口は、AVRマイコンをリセットし、その直後にキーボードを連打すると
一発目だけは正しい値を
LED表示したりすることがあるっての
を発見したこと。


この時点で
 *ボーレートはあっているに違いない!
 *通信経路も問題ないに違いない!

よしゃ、ハードは問題なし!ってことが判明した。

となると、やっぱりプログラムのミスだよね、と確信したので、
プログラムをよくよく精査してみる。

結果は、プログラムバグってるやん、間違ってるやんけ!
ってことで変更して、動いたー!!


本は出版されたばっかりでCQ出版には正誤表は
まだないみたいだし。私、一番乗り?(笑)

次のようにプログラムを変えるてやると(本の近々の目的の通りに)動きます。
著者のねらっている目的に沿っているかどうかは不明ですが......

写真はキーボードから大文字のA(0x41)を叩いたところ
0b01000001になっているでしょ?


#include 


int 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の復習にもなったよ

http://www.nahitech.com/nahitafu/mame/mame5/rs232c.html

http://www.256byte.com/kura/rs232c.html