このセクションが間違っている可能性があることはわかっていますが、私の問題はマイクロコントローラーのプログラミング固有のものです (主に AVR)。
Uartを使用して2つのAVR atmega8間でバイトを送信しています。バイトの各ビットは何かを表し、送信された各バイトでは1ビットのみが1です
したがって、たとえば、受信したバイトの 5 番目のビットを確認したい場合は、次のように記述します。
short byte=UDR;
if(byte&(1<<5))
{
// do stuff for bit 5
}
その後、常に正常に動作します
しかし、次のように書くと:
short byte=UDR;
if(byte==0b00100000)
OR
short byte=UDR;
if(byte==0x20)
その後、それは機能しません。また、if-else の代わりに Switch-case を使用すると失敗します。問題を理解できません。コンパイラはそれを符号なしと解釈し、7 番目のビットを符号と解釈しますか? または、他の何か?コンパイラは AVR studio 5 の AVR-gnu です。
誰かが尋ねた場合、受信したバイトを示すLEDも受信機にあるので、受信したバイトが正しいことはわかっていますが、何らかの理由で条件を比較することはできません! UART がビットを誤解し、受信した実際のバイトを変更するノイズが発生する可能性はありますか?
ヘルプ !
みんな気をつけて
ここにあるものは PARANORMAL のようなものです
ようやく問題の領域を追い詰めました
受信したバイトのビットを表すために 8 個の LED を追加したところ、次のような結果が得られました。
LED は (1<<5) を 0b00100000 として表し、私が送信したものとしては問題ありません
しかし
0b00100000 の受信時に点灯するように割り当てられた他の LED (8 つを除く) は点灯しません!
FTWマン!
受信したバイトが正しいと確信しています..しかし、if-elseとswitch-caseの比較に何か問題があります