現在PICマイコンの16f88を用いてアセンブラでAD変換の勉強をしています。とりあえずいろいろなサイトやデータシートを見てAD変換した結果をPORTBに出力させるテスト用のプログラムを完成させたのですが、AD変換の結果を格納するADRESLのデータをうまく読み込むことができませんでした。その時のプログラムは(結果は左詰め,X_Lは自分で定義した変数)
BSF STATUS,RP0
MOVF ADRESL,W
MOVWF X_L ;ADRESLの結果をX_Lに保存
BCF STATUS,RP0
MOVF X_L,W
MOVWF PORTB
こんな感じです。わざわざADRESLの結果をX_Lに保存しなくても直接出力することもできるんですが気にしないで下さい。で、このプログラムだとPORTBにつないだ全てのLEDが点灯します。
ところがプログラムを以下の様に書き変えたら見事にADRESLレジスタの中身が出力できました。何が起きたのでしょうか?バンクの切り替えの前にWレジスタをX_Lレジスタに書き込むのと、バンクを切り替えてからWレジスタをX_Lレジスタに書き込むのとでは結果が同じになると思うのですが、、、。
BSF STATUS,RP0
MOVF ADRESL,W
BCF STATUS,RP0
MOVWF X_L
MOVF X_L,W
MOVWF PORTB
No.1ベストアンサー
- 回答日時:
> 結果が同じになると思うのですが、、、。
書き込み先と読み込み元が別の場所を指していますので, 結果は同じとなりません.
※以下, RP1は0と仮定
上段のプログラムではRP0をセットしたままMOVしてますので,
Bank1のGPR(H'A0~H'FF)のどこかに保存されています.
RP0をクリアするとBank0のGPR(H'20~H'7F)がアクセス可能となります.
PIC16F88のRAM構成(Register File Map)については
データシートの2.2.1章(参考URLのp.15)にて図解されています.
X_LをH'70~H'7Fの範囲に確保すれば全バンクから参照可能です.
参考URL:http://ww1.microchip.com/downloads/en/DeviceDoc/ …
回答していただいてありがとう御座います。確かにおっしゃる通りですね。SFRのバンクはいつも気にしていましたが、GPRのバンクは気にしたことがありませんでした。本当に助かりました。また何かあったらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CPUの問題について 2 2022/07/09 12:04
- その他(コンピューター・テクノロジー) PIC16F1シリーズマイコンのNCO機能について 1 2023/04/18 08:41
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- IT・エンジニアリング 不具合の現状認識をしないプログラマって信用できる人? できない人? 8 2023/07/28 09:09
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- その他(プログラミング・Web制作) パイプラインに詳しい方 5 2022/07/04 16:47
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Perl perlのプログラミング 部分入れ替えの方法 1 2022/10/11 22:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PLCとPCの通信
-
フラッシュメモリへの書き込み
-
2つのアナログ信号が一致して...
-
機械語のレジスタペアについて
-
レジスタマップって何ですか?
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
手動かプログラムでの起動かの判断
-
TCP/IP通信時のサーバーからの受信
-
explorer.exeが異様にメモリを食う
-
家電製品の電力周波数を変える機械
-
Webプログラムってネイティブア...
-
Excelでのセル内容の高速消去方法
-
緯度、経度の 10進法と 60進法...
-
メッセージボックスのボタン名変更
-
C# シリアル通信でデータ受信...
-
VBAの配列サイズとメモリに関して
-
WaitForSingleObjectの使い方に...
-
C言語で、メモリを解放しないで...
-
プロセスIDからウィンドウハ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PLCとPCの通信
-
レジスタマップって何ですか?
-
2つのアナログ信号が一致して...
-
組み込みマイコンでのソフトウ...
-
VBによるシリアルポート制御
-
フラッシュメモリへの書き込み
-
PCからシリアル通信で外部ハー...
-
シリアル通信でのデータ取りこぼし
-
マイコンからSDカード内のテキ...
-
マイクロ秒で精度が出るタイマー
-
マイコンのソースについて
-
グラフィックLCD SG12...
-
マイコンSPI入門
-
4bitデータを変更して出力させ...
-
PICにおけるパルス波形の検...
-
PICマイコンのCLRWDT動作について
-
PICマイコンをアセンブラでAD変...
-
PIC12F683でLEDをスイッチで点...
-
機械語のレジスタペアについて
-
ArduinoとXBeeを用いたRSSIの取...
おすすめ情報