PIC内部の動作の概略を説明します。
数多くの場合がありますが、代表的な幾つかの例で説明します。
下図の内部ブロックを参照して説明します。
【例題1:加算命令(ADDWF Reg1,F)】
@ まず命令がプログラムメモリから取り出されます。(フェッチするという)
A 取り出された命令を解読し、加算命令と判明したら、
ALU(算術演算ユニット)に計算指示を出します。
B ALUには、まずWregの内容が図の左側から入力され、右側には
「Reg1」で指定されたレジスタの値がレジスタから読み出されセット
されます。 (MUXの切替えも命令内容で指示される)
C 両者の加算の演算結果は、ALUの出力として現れます。この出力は、
命令の指定がReg1に戻す指定なので、内部データバスを経由して
レジスタに書き込まれます。
【例題2:入出力命令(BSF PORTA,RA2)】
@ まずプログラムメモリから命令が取り出されます。
A 取り出さした命令を解読し、入出力命令と判明したら、入出力ポートに
出すデータのRA2だけ「1」のデータをALUの左側に送ります。
B 次に現在のPORTAのデータを呼び出し、内部データバス経由、
ALUの右側にセットします。
C ALUの中で論理ORの演算をします。(RA2に1をセットするため)
D 演算結果を内部データバス経由、PORTAに送り直し、外部に出力
します。
【例題3:分岐命令(GOTO Address)】
@ まずプログラムメモリから命令を取り出します。
A 取り出した命令を解読し、分岐命令だと判明したら、ALUに指示を
出します。
B 分岐先のアドレスの一部である「Address」をALUの左側に新しい
アドレス下位データとしてセットします。
C 現在のプログラムカウンタの値を読み出し、内部データバス経由
ALUの右側にセットします。(MUXの切替えも命令内容で指示される)
D ALUでアドレスの下位を命令で指定されたデータに置き換えをします。
E 演算結果をプログラムカウンタに戻し中身を書き換えます。
F 新しいプログラムカウンタの指し示す命令の実行に移ります。
【例題4:ウォッチドッグタイマ制御(CLRWDT)】
@ まずプログラムメモリから命令を取り出します。
A 取り出した命令を解読し、制御命令だと判明したら、直接制御部に
信号を送ります。
B そしてウォッチドックタイマのリセットをします。