次の章<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レジスタのところを見て下さい。
PCL | 0x02 |
STATUS | 0x03 |
FSR | 0x04 |
・・・ |
って、書かれていますね。上下の値を見ると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-0 | R/W-0 | R/W-0 | R-1 | R-1 | R/W-x | R/W-x | R/W-x |
IRP | RP1 | RP0 | TO | PD | Z | DC | C |
“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進数への変換は以下のように行います。
ビット目 | – | – | ビットの値 | 結果 |
7 | 128 | × | 1 | 128 |
6 | 64 | × | 1 | 64 |
5 | 32 | × | 1 | 32 |
4 | 16 | × | 1 | 16 |
3 | 8 | × | 1 | 8 |
2 | 4 | 1 | 4 | |
1 | 2 | × | 1 | 2 |
0 | 1 | × | 1 | 1 |
Total | 255 |
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 | ビット | 名前 | 説明 | 備考 |
---|---|---|---|---|
1 | 7ビット目 | IRP | レジスタバンク選択ビット(間接アドレス指定に使用) | 1 = Bank 2, 3 (0x100 - 0x1FF)。 0 = Bank 0, 1 (0x00 - 0xFF)。 |
2 | 6ビット目 | PR1 | レジスタバンク選択ビット(直接アドレス指定に使用) | |
3 | 5ビット目 | PR0 | ||
4 | 4ビット目 | TO | タイムアウトビット | 1 = 電源ON 後、CLRWDT 命令またはSLEEP 命令の実行後。 0 = WDT タイムアウト発生。 |
5 | 3ビット目 | PD | パワーダウンビット | 1 = 電源ON 後またはCLRWDT 命令による。 0 = SLEEP 命令の実行による。 |
6 | 2ビット目 | Z | ゼロビット | 1 = 計算またはロジック演算の結果がゼロ。 0 = 計算またはロジック演算の結果がゼロでない。 |
7 | 1ビット目 | DC | デジットキャリー/ボロービット(ADDWF、ADDLW、SUBLW、SUBWF 命令用)※ボローの場合は極性が逆になる。 | 1 = 結果により下位4 ビット目からキャリーが発生した。 0 = 結果により下位4 ビット目からキャリーが発生しなかった。 |
8 | 0ビット目 | C | キャリー/ボロービット(ADDWF、ADDLW、SUBLW、SUBWF 命令用) | 1 = 結果により最上位ビットからキャリーが発生した。 0 = 結果により最上位ビットからキャリーが発生しなかった。 |
まとめると、こんな感じでしょうか。
1.値を設定出来る演算結果の0~2ビット目は、演算結果によってこの値が変わるようなので、設定する事に意味がない(?)。
2.7-5ビット目のレジスタバンクの選択ビットの設定は、ここを触っても変わる(のかなぁ~)。後で検証しましょう。
3.4,3ビット目のタイムアウトビット/パワーダウンビット。ここは、今はほっときましょう。
※上の説明を見ると「電源ON後・・・」と、何かのアクションによってのマイコンの動きなので、今後の学習で回路を組んだ時にでも確認していきましょう。
★後日確認のためのプログラムを連載します