PICマイコン(敵)をもう少し知る(3/5)STATUSレジスタ

マイコン

次の章<2.2.2.x>では、先の「2.2.2 SPECIAL FUNCTION REGISTERS」で、記述されていたようにコア機能(CPU)についての説明が記述されているようです。
以下に、章ごとの特殊機能レジスタを記述しておきます。
 ・2.2.2.1 Status Register
 ・2.2.2.2 OPTION_REG Register
 ・2.2.2.3 INTCON Register
 ・2.2.2.4 PIE1 Register
 ・2.2.2.5 PIR1 Register
 ・2.2.2.6 PIE2 Register
 ・2.2.2.7 PIR2 Register
 ・2.2.2.8 PCON Register

<ブルーのセルが2.2.2.1~2.2.2.8のコア機能(CPU)のレジスタです。>

では、順番に読んでいきましょう!

コア機能(CPU)が使うファイルレジスタ

今の段階では、評価ボードを持っていませんので具体的なイメージを持てないのですが、どんなものがあるのか言葉だけでも知っておきましょう。後々データシートを読んでいく中で出てくると思います。その時に『確か、前のページに説明があったなぁ~』と思い出せるように、脳みそにインデックスを張っておきましょう!

STATUSレジスタ

Statuレジスタには、
  1.ALU の演算フラグ
  2.リセットの状態
  3.BANKの選択ピット
の情報が、含まれています。名前(Status)のごとくALU、リセットと現在選択されているバンクの状態が書かれています。ここで説明書の方に、IRP,RP1,RP0,TO,PD,Z,DC,Cと8個の空間に分かれています。これは判りますか?上図で説明していませんでしたね。例えば、上図のBANK0のStatusレジスタのところを見て下さい。

PCL0x02
STATUS0x03
FSR0x04
・・・

って、書かれていますね。上下の値を見るとSTATUSレジスタの大きさは1バイトである事が判ります。「バイト」は、コンピュータでの単位として聞いた事があると思います(ファイルの大きさを示したり、HDDを購入する時にも目安として見ますよね)。以下に示します。

1bit(ビット)X8=1byte(バイト
1byte(バイト)X1024=1KB(キロバイト)
1KB(キロバイト)X1024=1MB(メガバイト)
1MB(メガバイト)X1024=1GB(ギガバイト)
1GB(ギガバイト)X1024=1TB(テラバイト)

 1バイト=8ビットなので、STATUSレジスタ1ビットずつ8個に区切っています。
 また、ついでなのすが、以下も今後出てきそうなので覚えておいて下さい。

STATUSレジスタの(ビットごとの)設定

上位ビット:MSB 、下位ビット:LSB

1バイト
7ビット目6ビット目5ビット目4ビット目3ビット目2ビット目1ビット目0ビット目
R/W-0R/W-0R/W-0R-1R-1R/W-xR/W-xR/W-x
IRPRP1RP0TOPDZDCC

“7”ビット目の方向が上位ビット(MSB)。
“0”ビット目の方向が下位ビット(LSB)。
と、言います。また、数の数え方ですが、この世界では、0から数えるのが習慣化しています。★ここも覚えておいて下さい。

※R: Read可, W: Write可,-n: PORリセット後の値(”-x”は、不定値[か?])。

ビットで表せるのは、0か1の2値しかありません(電気ならON(1)/OFF(0)とか)。1バイトは、数字で0~255まで表せます。ビットであらわすと11111111です。この11111111は2進数表記あり10進数で表せば、255になります。2進数から10進数への変換は以下のように行います。

ビット目ビットの値結果
7128×1128
664×164
532×132
416×116
38×18
2414
12×12
01×11
Total255

ex.)2進数:10100010は、10進数で幾らになるでしょう?

[ 答え ]上の表を用いると、

10進数なら、128×1+64×0+32×1+16×0+8×0+4×0+2×1+1×0 = 128+32+2=162.
16進数なら、1010->10=A, 0010->2となるので、0xA2.
★16進数への変換は、上記のように8ビットを4ビットごとに分けて、一度10進数へ変換すると簡単です。※電卓の時代なので、判っていれば今の時代に暗算する必要もないかと思います。

STATUSレジスタの要素

No ビット名前説明備考
17ビット目IRPレジスタバンク選択ビット(間接アドレス指定に使用)1 = Bank 2, 3 (0x100 - 0x1FF)。
0 = Bank 0, 1 (0x00 - 0xFF)。
26ビット目PR1レジスタバンク選択ビット(直接アドレス指定に使用)
35ビット目PR0
44ビット目TOタイムアウトビット1 = 電源ON 後、CLRWDT 命令またはSLEEP 命令の実行後。
0 = WDT タイムアウト発生。
53ビット目PDパワーダウンビット1 = 電源ON 後またはCLRWDT 命令による。
0 = SLEEP 命令の実行による。
62ビット目Zゼロビット1 = 計算またはロジック演算の結果がゼロ。
0 = 計算またはロジック演算の結果がゼロでない。
71ビット目DCデジットキャリー/ボロービット(ADDWF、ADDLW、SUBLW、SUBWF 命令用)※ボローの場合は極性が逆になる。1 = 結果により下位4 ビット目からキャリーが発生した。
0 = 結果により下位4 ビット目からキャリーが発生しなかった。
80ビット目Cキャリー/ボロービット(ADDWF、ADDLW、SUBLW、SUBWF 命令用)1 = 結果により最上位ビットからキャリーが発生した。
0 = 結果により最上位ビットからキャリーが発生しなかった。

まとめると、こんな感じでしょうか。
1.値を設定出来る演算結果の0~2ビット目は、演算結果によってこの値が変わるようなので、設定する事に意味がない(?)。
2.7-5ビット目のレジスタバンクの選択ビットの設定は、ここを触っても変わる(のかなぁ~)。後で検証しましょう。
3.4,3ビット目のタイムアウトビット/パワーダウンビット。ここは、今はほっときましょう。
※上の説明を見ると「電源ON後・・・」と、何かのアクションによってのマイコンの動きなので、今後の学習で回路を組んだ時にでも確認していきましょう。

★後日確認のためのプログラムを連載します

PICマイコン(敵)をもう少し知る(4/5)へ続く>

タイトルとURLをコピーしました