avr mega8でシリアル送信受信

| | コメント(0) | トラックバック(0)

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

コメントする

このブログ記事について

このページは、hatayanが2005年9月 8日 08:27に書いたブログ記事です。

ひとつ前のブログ記事は「iPod nano やっぱ車との連携重要ですよ」です。

次のブログ記事は「秋月でATMEGA128 発売開始」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01