TAP-pic Tips
tips |
いくつかの役立ちそうな情報をまとめてみました。
●制御レジスタでよく使うもの
●アセンブラの擬似命令
●Aki-PICpgmの設定
●制御レジスタでよく使うもの
制御レジスタの種類と機能をまとめると。。。
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
ステータスレジスタ
(1)SUBLW,SUBWFはくり下がりなしでC=1となる、Z80系とは逆。またf-w=destでありこれもZ80と逆。 (2)INCF,DECFはZフラグのみに作用しCフラグには作用しない。 (3)RLF,RRFのローテートはCフラグもあわせて回転する。 (4)移動命令でMOVFのみZフラグに作用する。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
オプションレジスタ
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
割り込み制御・管理レジスタ、フラグは1で発生告知、許可は1で許可する。
割り込み処理後は割り込み告知(判定)フラグをクリアしないと割り込みルーチンだけでループするので注意。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
86h |
TRISB |
IOポートの入出力設定 0 : 出力 1 : 入力 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
06h |
PORTB |
書けば出力、読めば入力、ただしビット書き込みは外部インピーダンスに注意 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
04h,84h |
FSR |
ポインタ処理用のレジスタ FSRでアドレスを指定してINDFでアクセス |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
8ビットのタイマ/カウンタ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
プログラムカウンタの下位8bit | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
プログラムカウンタの上位4bit、PCL書き込み時<4:0>が、CALL,GOTO時<4:3>が参照される |
●アセンブラの擬似命令(ただしc2cとの併用不可)
○数値の表現方法
10進数 D'100'
16進数 H'9h' または 0AFH (頭に0をつけて終わりにHをつける)
2進数 B'00111001'
ASCIIコード 'C' または A'C'
○条件ジャンプ
BZ Label ; Z = 1 ならジャンプ
BNZ Label ; Z = 0 ならジャンプ
BC Label ; C = 1 ならジャンプ
BNC Label ; C = 0 ならジャンプ
○ジャンプ命令
GOTO $-1 ; ひとつ前の命令に戻る。ラベルを使わずにジャンプできる。
GOTO $+3 ; 3つあとなど。
○RAMアクセス
DATA RES 10 などというかたちでメモリを確保したとき
MOVWF DATA+2 という方法でアクセスできる。
○テーブル処理
ADDWF PCL,F
DT 00h,01h,02h,・・・・
W=0で00h,W=1で01hをリターンする。DTはRETLWと同じ。
同様にテーブルジャンプもできる。
○メモリから変数領域を確保する(リロケータブルへの展開)
[<Label>] RES <mem_unit>
たとえば
count1 RES 1
word_data RES 2
といった感じ。
○リロケータブル化のための命令
>[<name>] CODE [<address>] (コードセクションの宣言)
コードセクションaddressは割り込みなど特定番地指定が必要なときに使う。
最後はENDで終わる。
>UDATA [<address>] (変数エリアの宣言)
UDATA
data1 RES 1
data2 RES 2
>GLOBAL(外部へラベルをアクセスできるようにする)
GLOBAL data1,data2,code1
>EXTERN(外部のラベルをアクセス可能にする)
EXTERN data1,data1,code1
・プログラムの雛型
○初期設定
PROCESSOR PIC16F84
LIST P=PIC16F84
INCLUDE "P16F84.INC"
○データセクション
UDATA
data1 RES 1
data2 RES 2
GLOBAL data2
EXTERN code1
○コードセクション
RESET CODE 00H
GOTO MAIN
INTERRUPT CODE 04H
GOTO INTRPT
MAIN
CLRW
・・・・
END
●Aki-PICpgmの設定
○設定の項目
Fosc : オシレータの種類
WDT : ウォッチドッグタイマーの設定
CP : コードプロテクト
~PWRTE : パワーONリセットをかけるかどうか(BOD−ONで自動的にONになる)。内部の別系統のCRオシレータで72msのディレイ後にリセットがかかる。
BOD : ブラウンアウトリセット(4V以下でリセットがかかる)
LVP : ローパワープログラミング(RB3を使うことになる)
WRT : フラッシュメモリをプログラムから変更できるようにする
DEBUG : インサーキットデバッグを可能にする(RB6とRB7を使う)
CPD : データEEPメモリのプロテクト
○毎回設定するのは面倒
P16F877.incの最後に以下の行を追加
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF