キャリーフラグの扱いで失敗
アトメルのATmega88を使ったちょっとしたジグ、そのプログラムで
悩んでしまいました。
とあるサブルーチン、エラー状態を示すのにキャリーフラグを使ったのです。
呼び出すほうではキャリーがあればエラーと、キャリー無しなら正常という
判断をします。
ところが、うまいこと動かないんです。
ポートの入力状態を組み合わせて、条件を判断しています。
ポートは読めているのになぜ?
ずいぶん悩みましたよ。
原因は…
「8080」時代の思いこみでした。
ポートを入力してビットマスク。
これを組み合わせて異常正常を判断していました。
この判断の直前が「AND」命令だったのです。
8080マイコンではAND命令でキャリーフラグはクリアされます。
ANDでキャリーがクリアされているとして処理を書いていたのです。
その思い込みが間違いの元でした。
AVRマイコン、AND命令ではキャリーはそのまま。
そのルーチンよりずっと前に実行したキャリーが残っていたのです。
異常時にキャリーを立てていたので、異常は見つかるけれど、正常なのに
異常と出てしまうことがある、てなことになったのです。
しかしねぇ。
昔にも同じ失敗をしたような記憶があるんです。
「もの忘れがひどい」+「もの覚えが悪い」
どうしたもんでしょうね。
|
2010年10月21日 17時40分
|
記事へ |
コメント(0) |
トラックバック(0) |
|
・電子回路工作 |
トラックバックURL:http://blog.zaq.ne.jp/igarage/trackback/2153/
※ブログ管理者が承認するまで表示されません