こんにちは
初めてこのフォーラムを利用させていただきます.
RXマイコン(RX621)とマトリクス接続されたスイッチ(秋月)を接続し,キー入力を取得しようとしているのですが,おそらくIOレジスタの読み込みが早すぎて出力の変更が反映される前にポート読みされていないようなのです.ハードウェアマニュアルP131にはIOレジスタ書き込み時の注意事項があるので,これが原因ではないかと思っているのですが,対処方法がわかっていません.
>>引用このような場合には、I/O レジスタの書き込みを行った後、以下の手順で書き込みの完了を待ってから、後続の命令を実行するようにしてください。(a) I/Oレジスタの書き込み(b) 書き込んだI/Oレジスタの値を汎用レジスタに読み出し(c) 読み出し値を使って演算を実行(d) 後続の命令を実行
秋月のキーマトリクスキットhttp://akizukidenshi.com/catalog/g/gK-12229/を使用しています.
PORTDの4~6bit目を出力モードにし,マトリクスのXYZへ入力,PORTDの0~3bit目を入力モードにし,マトリクスのABCDへ接続
ソースのコメントアウトされたdelay_ms(1)を入れると正しく動作します.最初,レジスタを読めばいいのかと思い,以下のようにwhileをdelay_msの代わりに挿入してみましたがこの方法ではうまくいきませんでした.
以下ソース
※KEY_XDなどはdefineで整数を割り振っています