ニックネーム: 居酒屋ガレージ店主
★ZAQのBlogari停止のため、あれこれ「データ吸い出し」対策しています。 新規記事はとりあえず停止。 コメント書き込みはまだ有効です。 (JH3DBO 下間憲行)
2010年10月21日(木)
キャリーフラグの扱いで失敗
アトメルのATmega88を使ったちょっとしたジグ、そのプログラムで
悩んでしまいました。

とあるサブルーチン、エラー状態を示すのにキャリーフラグを使ったのです。
呼び出すほうではキャリーがあればエラーと、キャリー無しなら正常という
判断をします。
ところが、うまいこと動かないんです。

ポートの入力状態を組み合わせて、条件を判断しています。
ポートは読めているのになぜ?

ずいぶん悩みましたよ。
原因は…
「8080」時代の思いこみでした。

ポートを入力してビットマスク。
これを組み合わせて異常正常を判断していました。
この判断の直前が「AND」命令だったのです。
8080マイコンではAND命令でキャリーフラグはクリアされます。
ANDでキャリーがクリアされているとして処理を書いていたのです。

その思い込みが間違いの元でした。
AVRマイコン、AND命令ではキャリーはそのまま。
そのルーチンよりずっと前に実行したキャリーが残っていたのです。

異常時にキャリーを立てていたので、異常は見つかるけれど、正常なのに
異常と出てしまうことがある、てなことになったのです。

しかしねぇ。
昔にも同じ失敗をしたような記憶があるんです。

「もの忘れがひどい」+「もの覚えが悪い」
どうしたもんでしょうね。


2010年10月21日 17時40分 | 記事へ | コメント(0) | トラックバック(0) |
| ・電子回路工作 |
トラックバックURL:http://blog.zaq.ne.jp/igarage/trackback/2153/
※ブログ管理者が承認するまで表示されません
コメントを記入  
お名前(必須)
 
パスワード:
 
メール:
 
URL:
 
非公開:  クッキーに保存: 
※非公開にチェックを入れると、管理者のみにコメントが届きます。
ブログの画面には表示されません。
captcha


※画像に表示されている文字を入力してください(半角・大文字/小文字の区別なし)。
文字が読みづらい場合はこちらをクリックしてください。
小文字 太字 斜体 下線 取り消し線 左寄せ 中央揃え 右寄せ テキストカラー リンク