So-net無料ブログ作成
English Version

PIC24FJ64GAでのソフトシリアル通信実験(その3) [PIC]

 しつこく、PIC24FJ64GAでのソフトシリアル通信の続きですw

 前回(その2)でコード短縮は限界と思っていました・・・
 しかし、スタートビットとストップビットの設定に2ワードも必要なのかという漠然としたわだかまりがありました。
 ステータス(シフト系命令を使うのでcarryビット)が影響を受ける命令を使ってストップビットを設定すれば何とかなるのでは??
 でも、"add #0x0100,W0" では carryをクリアできてもループが1回分早く終わる・・・

 でもでも ・・ あっ ・・ できた!?! ^^

 ということで 10ワードまでダイエットできました (^^)/

; send serial(8bit,non-pari,stop:1)
;  W0 <- send data

Putchar:
    add     #0x0300,W0  ; set loop mark, stop bit & start bit(carry:0)
0:
     btss   SR,#C       ; 1(1)
     SERI_OUT_0         ; 1(2)
     btsc   SR,#C       ; 1(3)
     SERI_OUT_1         ; 1(4)
     repeat #(BitClk - 9)   ; 1(5)
     nop                ; BitClk - 8(BitClk-3) adjust loop time to 1bit time
     lsr    W0,W0       ; 1(BitClk-2)
     bra    NZ,0b       ; 2(BitClk)
    return

SERI_OUT_0、SERI_OUT_1 : シリアル通信用I/O bitに 0,1を出力するマクロ
BitClk : シリアル通信1bit時間に実行できるサイクル数

 ん~~ アセンブラは奥が深い・・・^^

 どうしてここまで拘っているかというと今後特殊な事情がない限り、ほとんどC言語を使うことになるだろうと予測するからです。
 アセンブラに関してはいっぱいコードを書いて習熟するというような機会がないので、今回のように1つの課題をじっくりあれこれ考えた方がスキルアップに繋がるだろうと・・
 まぁ、一番の理由はスキル云々よりも「楽しい」からなんだけどねw
 アセンブラは楽しいけど生産性が低いので・・

[ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0