【データメモリとは?】
データメモリはプログラムメモリとは独立に備えられている
読み書き可能なデータ格納専用のメモリで、PICの特徴ある
アーキテクチャの一つとなっています。
このデータメモリは下記の2種類に別れており、いずれも
読み書きが行われます。
(1) Special Function Register (SFR)
CPUの機能動作を指定したり、周辺デバイスの機能、動作
を指定するためのレジスタです。
(2) General Purpose Register (GPR)
汎用のデータエリアとして使用し、変数やバッファとして
使います
【データメモリの構造】
データメモリは128バイトを単位とする最大4つの「Bank」から構成
されています。
また、各エリアは「直接アドレッシング」と「間接アドレッシング」の
2通りでアクセスすることができます。
このアクセスのためのアドレス構造は下図のようになっています。
(1) 直接アドレッシングの場合
この場合は、「STATUS」レジスタにある2ビットのBank指定用の
ビットRP0、RP1と命令のOPコード内のf レジスタを使います。
RP1 RP0 Bank
0 0 0
0 1 1
1 0 2
1 1 3
RP0,1でBankを
指定し、命令の
f opecodeで
場所を指定する
ことで任意の場
所をアクセスで
きる。
(2) 間接アドレッシングの場合
この間接アドレッシングとは何かというと、FSRレジスタにアドレス
を設定し、INDFレジスタを経由して間接的にデータメモリの読み
書きをする方法です。この場合のアドレスは「STATUS」レジスタに
あるIRPビットとFSRの最上位ビットの2ビットでBankを指定します。
IRP FSR<7> Bank
0 0 0
0 1 1
1 0 2
1 1 3
IRPとFSR<7>で
Bankを指定し
FSR<0:6>で場所
を指定することで
任意の場所を指
定できる
【プログラミングテクニック】
(1) 間接アドレッシングのテクニック
間接アドレッシングの例として、Bank0の汎用RAMエリア
の20Hから3FHまでを連続クリアするプログラムは下記
のようになる。
BCF STATUS,IRP ;Indirect addressing Bank0/1
MOVLW 0x20 ;Initial pointer to RAM
MOVWF FSR ;set to pointer
NEXT CLRF INDF ;clear RAM area
INCF FSR,F ;FSR+1
BTFSS FSR,4 ;end test(0x30)
GOTO NEXT
(2) Bank切替えのテクニック
単純にBankを切り替えてデータをアクセスする時のプログラムの
書き方は下記の様にします。
BSF STATUS,RP0 ;Set page 1
MOVLW 0x10 ;only RA4 input
MOVWF TRISA ;PortA is all output
CLRF TRISB ;Port B is all output
BCF STATUS,RP0 ;Set Page 0
CLRF PORTB ;reset
MOVLW 1
MOVWF PORTA ;light on dot