ユーザが変数領域として自由に使用できる汎用レジスタ (データ RAM) の範囲の一例です。
Device | Bank0 | Bank1 | Bank2 | Bank3 | データ RAM サイズ |
---|---|---|---|---|---|
PIC16F83 PIC16CR83 |
0Ch ~ 2Fh (36 bytes) |
8Ch ~ AFh (Bank0 へのマップ) |
─ | ─ | 36 bytes |
PIC16F84 PIC16CR84 |
0Ch ~ 4Fh (68 bytes) |
8Ch ~ CFh (Bank0 へのマップ) |
─ | ─ | 68 bytes |
PIC16F873 PIC16F874 |
20h ~ 7Fh (96 bytes) |
A0h ~ FFh (96 bytes) |
─ | ─ | |
PIC16F876 PIC16F877 |
20h ~ 7Fh (96 bytes) |
A0h ~ EFh (80 bytes) |
110h ~ 16Fh (96 bytes) |
190h ~ 1EFh (96 bytes) |
PIC16F87x の Bank1 ~ 3 の最後の部分には、Bank0 へのマッピングアドレスとして使えるものがあります。 うまく使えば効率的なプログラムが作れるかもしれません。 詳しくは各デバイスのデータシートを参照してください。
データメモリに変数を確保するには CBLOCK や RES を使うのが便利です。 Bank の切り替えの必要をなくすために、普通は Bank0 から変数を割り当てていきます。
LIST P=16F84A
INCLUDE P16F84A.INC
;==================================
; 変数定義
;==================================
CBLOCK H'0C' ;0Ch 番地から 34 バイト使える
VAR_A
VAR_B
VAR_C
ENDC ;CBLOCK 終了
LIST P=16F873
INCLUDE P16F873.INC
;==================================
; 変数定義
;==================================
CBLOCK H'20'
VAR_A
VAR_B
VAR_C
ENDC