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フラグが動かないのはおかしいなと思って調べてみたら、どうやら他命令組み合わせたマクロになってる。
親切なんだかよけいなお世話なんだか。
丸半日潰した。