LED回路工作部屋 > プログラムカウンタ (PC) の詳細 【最終更新日:2012/1/26】
プログラムカウンタ (PC) の詳細
■ プログラムカウンタのPCLとPCLATH

 プログラムカウンタは 13 ビット幅で上位バイト PCH と下位バイト PCL に分かれています。下位バイトは PCL レジスタ<7:0>でユーザーが直接リード・ライトを行うことができます。上位バイト PCH はユーザーが直接リード・ライトを行うことができず、CALLやGOTOの実行時、PCLへのライト時PCLATH の内容が PCH に転送されます。


■ PCLレジスタへライト時の注意点

 PCLレジスタへライトを行うと、PCLレジスタの変更と共に、PCHにPCLATHの<4:0>5ビットの内容が転送されます。なので、仮にプログラムメモリのアドレスが0x100〜0x1ff内や0x200〜0x2ff内でPCLの操作を行った場合、予めPCLATHに01hや02hを書き込まないと、そのまま00hの値はPCHに転送されてしまい0x00〜0xff内での移動となり正常に動作しませんので注意が必要です。




■ CALL、GOTOの分岐時の注意点

 CALL、GOTOのオペランドは14ビット幅だが、分岐先のアドレスを格納できる領域は11ビット分しかない為、0h〜7FFhの2kワード内でしか移動できない。2kワードを超えた移動を行うにはPCLATHの<4:3>2ビットに予め移動先のページに合う値を入力しておく必要がある。尚、CALLや割込み等でジャンプしRETURN,RETLW,RETFIEで戻る場合は13ビット幅のスタックからPCに転送されるので、PCLATHを操作する必要はない。