avr mega8でシリアル送信受信
shlogのエントリーを参考にmega8のシリアルの送信受信をやってみる。
作ったハードのテストもかねて、
エントリーにあるソースを使ってやってみたらあっさりできた。
が...どうもシリアル送信の動作が時々おかしい(こないときがある)のでハードが変なのかとハードをしらべる。
switch(uart_recv_data){ // 受信データが
case 'o': // oの時
LED_SET();
if(c != uart_recv_data) uart_send_str("LED_SET\0"); // 前回と同じ文字で無ければ
break;
case 'x': // xの時
LED_CLR();
if(c != uart_recv_data) uart_send_str("LED_CLR\0");
break;
default: // その他の時
if(c != uart_recv_data) uart_send_str("ERROR\0");
}
c = uart_recv_data;
以上のソースがmainの中で実行されていて、解析中に割り込みが入ったりした時におかしくなっていたので、UART受信割り込みの処理の方に、解析のメソッドをうつす。
うまくいった。
久しぶりのWINAVRなので苦戦した。
*****以下覚え書き*****
・翔様によるとどうやら
uart_recv_dataはグローバル変数として、volatileで宣言しないとならない。
らしいので覚えておく。
トラックバック(0)
このブログ記事を参照しているブログ一覧: avr mega8でシリアル送信受信
このブログ記事に対するトラックバックURL: http://www.hatayan.org/mt/mt-tb.cgi/391

コメントする