title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM PIC で 16bit比較処理
小さくも大きくも閉じたりもしません
12/02/18 01:53 / 電子工作

ちょっとブログのネタが無いので PIC ネタでも。
アセンブラ書いてて楽しいってのもあるんですが(^-^;

16F系の場合A/D変換した時の精度が 10bit なので 16bit同士での比較処理をしたいってことがあります。

下記のコードは ADxH が上位8bit、ADxL が下位8bit とした場合

if (AD0=AD1) {
Sub16E();
} else {
if (AD0<AD1) {
Sub16P();
} else {
if (AD0>AD1) { //ここいらんけど
Sub16M();
} //ここもいらんけど。
}
}

のような分岐処理をするコードです。
ADx を破壊しても良いコードであればもう少し短くなると思いますが、LCD に表示をした上で比較処理をしたい場合など、退避用のファイルレジスタを別途用意するのも、もったいないなと思いまして。


;ワークエリア
AD0H RES 1
AD0L RES 1
AD1H RES 1
AD1L RES 1


;16bit減算比較(AD1x から AD0x を引いて処理)
;Wレジスタは破壊、AD0H/AD0L,AD1H/AD1L は破壊されない
MOVFW AD0L
SUBWF AD1L,W
BTFSC STATUS,Z
GOTO SubHigh8E
BTFSC STATUS,C
GOTO SubHigh8P
DecHigh8:
MOVLW 1
SUBWF AD1H,W
BTFSS STATUS,C
GOTO Sub16M
SUBWF AD0H,W
BTFSC STATUS,Z
GOTO Sub16P
BTFSS STATUS,C
GOTO Sub16P
GOTO Sub16M
SubHigh8E:
MOVFW AD0H
SUBWF AD1H,W
BTFSC STATUS,Z
GOTO Sub16E
SubHigh8P:
MOVFW AD0H
SUBWF AD1H,W
BTFSC STATUS,Z
GOTO Sub16P
BTFSS STATUS,C
GOTO Sub16M

Sub16P: ;*** 16bit比較でプラスならばここに来る
GOTO Next

Sub16E: ;*** 16bit比較でイコールならばここにくる
GOTO Next

Sub16M: ;*** 16bit比較でマイナスならばここにくる
GOTO Next

Next: 次の処理

SubHigh8 辺りのコードがまだ短くなりそうな気がするんでコードと睨めっこしていたりします(笑)
FSR 使ってゴリゴリするのも有りかと思いましたが可読性が非常に悪くなるので・・・

もっと美しいコードがあったらコメントお願いします(笑)

PIC にも Z80 みたいに JE とか JP とか JNZ とかあると楽なんだけどなぁ。

[更新日付:2012/02/18 02:18:03]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+6d57e869296154c88b0f59ac00d0e830ce6af356]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+6d57e869296154c88b0f59ac00d0e830ce6af356]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.