たまりば

パソコン・インターネット パソコン・インターネット三鷹市 三鷹市

PICで浮動小数点ウェイトルーチン
2015年05月26日 00:00

ふと思いついたので書いてみた。
呼び出すと、Wレジスタの値を浮動小数点数として見た量だけウェイトを掛ける。
具体的には、指数部3bit、仮数部5bitで、
1.仮数×2^(指数+4)
または指数部が0の時
0.仮数×2^(1+4)
で表される値×80。
最小が1の時の80、最大が255の時の322560…かと思いきやちょうど上手く0の時に327680になっている。
グラフにするとこうだ。
PIC_浮動小数点ウェイト

さて、ふと思いついて面白そうだったので書いてみたのだが、使い道が思いつかない。
思いついたきっかけは液晶モジュールの初期化時に27μsと1msと200msのようなウェイト量を要求されたからなのだが、数回使うくらいなら固定値のウェイトルーチンで済むし、10回程度までは単純な2バイトのウェイトルーチンを作った方がよいだろう。
役立てるには数十回のダイナミックレンジの広いウェイトを要求される必要があるが、そのような状況が思いつかない。
まあ書いてて楽しかったので特に問題はない。

何か使い道を思いついた方はご自由に使ってください。
fwait:
;使用レジスタ:
;cnth, cntl, exp
;cnthは事前にゼロクリアのこと。

;浮動小数点数を分解して適切な場所に置いたりケチ表現解除
    movwf cntl
    andlw 0xE0
    movwf exp
    btfss STATUS,Z
    bsf cnth,1
    btfss cnth,1
    bsf exp,5
    btfsc cntl,4
    bsf cnth,0
    swapf cntl,F
    movlw 0xF0
    andwf cntl,F
    bcf STATUS,C
;指数部が1xxなら4bit左シフト
    btfss exp,7
    goto f1x4
    swapf cnth,F
    swapf cntl,F
    movf cntl,W
    andlw 0x0F
    iorwf cnth,F
    movlw 0xF0
    andwf cntl,F
f1:
;指数部がx1xなら2bit左シフト
    btfss exp,6
    goto f2x1
    rlf cntl
    rlf cnth
    rlf cntl
    rlf cnth
f2:
;指数部がxx1でなければ1bit右シフト
    btfss exp,5
    rrf cnth,F
    btfss exp,5
    rrf cntl,F
;素通りに掛かる時間分の調整
    movlw .8 ;40/5
    subwf cntl,F
    btfsc STATUS,C
    incf cnth,F ;繰り下がり処理しつつ+1
b0:
;時間待ち処理本体
;ここにウェイトを入れ、上の調整部分も合わせると、全体のウェイト量を定数倍できる
    decf cntl,F
    btfsc STATUS,Z
    decfsz cnth,F
    goto b0
    nop ;時間調整
    retlw 0
;分岐の時間合わせ
f2x1:
    nop
    goto f2
f1x4:
    goto $+1
    goto $+1
    goto f1

  • 同じカテゴリー(プログラム・アルゴリズム)の記事画像
    6段のカレンダーが好きだ
    ファミコンで9×9ドット文字表示(ほか)
    JPEG圧縮を繰り返しても際限なく劣化するわけではない
    ゲームボーイの吸い出し機を作った (後編)
    ファミコンで全画面に任意の画像(ただしモノクロ)を表示
    最近のWindowsのビットマップフォントの太字
    同じカテゴリー(プログラム・アルゴリズム)の記事
     CDのピットの数 (2021-03-05 23:32)
     6段のカレンダーが好きだ (2020-11-15 04:06)
     PIC16のDhrystone MIPSを測ろうとしてみた (2020-04-29 02:23)
     Twitterの画像の扱いがやっとまともになって嬉しい (2019-06-23 00:23)
     ファミコンで9×9ドット文字表示(ほか) (2019-04-08 02:02)
     謎の色名「honeydewtab」とlegacy color valueパース手順 (2018-03-24 12:45)
    URL欄を実験的に消してる間に廃止されてしまいました。まあいいか。
     
    <ご注意>
    書き込まれた内容は公開され、ブログの持ち主だけが削除できます。
    削除
    PICで浮動小数点ウェイトルーチン
      コメント(0)