こんばんわ。宮前さん。。。。 3048のハードウェアマニュアルを見ました。 ポートディレクションレジスタは「0」で入力、「1」で出力ですね。 もし、このCPUでビット出力で使用する場合は注意が必要です。 ビット操作命令はバイトでアクセスするようです。 ビットを出力しようとした場合は、 ・バイト読み込みを行う ・ビット操作を行う ・バイト書き換えを行う になります。 2回目の命令実行時にビット0の情報をそれなりに読み込んで書き戻し てしまうことが予想されます。 そのような場合は、出力用のバイト情報をRAMに用意して、その情報 を更新してからバイトでポートに出力するような形が必要です。 ハードウェアマニュアルに「ビット操作命令の操作上の注意点」という 箇所がありますので、参考にしてみてください。。。。 (CPUの命令セットの項の中に記述があります) 実は、私も以前失敗しました。 こばやし ----- Original Message ----- From: "miyamae" <m_vega@xxxxxxxxxxxxx> To: "H8 メール投稿" <h8@xxxxxxx> Sent: Friday, May 16, 2003 7:57 PM Subject: [H8-ML(3169)] ポートディレクションレジスタ 宮前です (アマチェア) 3048のPB0、PB1を外部でプルアップし ポートデータレジスタをどちらもゼロに固定し、 ポートディレクションレジスタをビット操作すると思いどうりに なりません。AKI−3048用Cコンパイラを使用。モード5。 ビットクリアを2個連続すると、最初のが無視されて ポートがLレベルのままでHレベルになりません。 ポートが破壊されてるかと思い処理順序を逆にするとやはり最初のが無視 されます。 モニターで命令を見ると 20714 7FD47200 BCLR #0:3,@H'FFFD4:8 20718 7FD47210 BCLR #1:3,@H'FFFD4:8 のようになってました。 なぜこの現象が発生するのでしょう? これは仕様でしょうか? バイトで操作すると問題はおきません。 日立のヘッダーは、ポートデータレジスタは、ビット操作するように ビット展開されてないので、ビット操作するように変更しました。 バイト操作させるためにビット展開してないのでしょうか?