PICのプログラミング


PICにメモリを接続する前に、PCとシリアル接続をし確実にデータ転送を行えるようにしておく必要がある。そこで久々にPICでプログラミングをしているのだが正直参った。
CISCプロセッサだと当たり前のADCやSBB命令がない。

;; x86で8bitで、メモリ2バイトに対して即値を加えるとする
	movb (pL), %%al ; x86だけど比較の為8bit命令でのみやってみる
	movb (pH), %%bl ; movw $0x0865,%%ax 本当はこんなん2行
	addb $0x65,%%al ; addw %%ax,(p) 
	adcb $0x08,%%bl
	movb %%al,(pL)
	movb %%bl,(pH)


;; pic16Fシリーズでおなじことをやるとこうなる。

	bcf TmpFlg,FC		; メモリ上に一時的に使うフラグレジスタを用意し、クリアする

	movlw 0x65
	addwf pL,f

	skpc				; jnc  lNc
	jmp	lNc

lC:
	incf pH,f
	skpnz				; 桁上がりがあった(0になった)ら
	bsf TmpFlg,FC		; テンポラリのキャリーフラグを立てておく

lNc:
	movlw 0x08
	addwf pH,f

	btstc TmpFlgC,FC
	setc

lEnd:


;;冗長だぁぁ

やってられまへんがな。


なにがやってられないって、自分が読んでいるCQ出版の解説本には、PICなのにaddcやsubcが存在している...。
加算命令なのにC/DCフラグが動かないのはおかしいなと思って調べてみたら、どうやら他命令組み合わせたマクロになってる。
親切なんだかよけいなお世話なんだか。


丸半日潰した。