PIC24FJ64GAでのソフトシリアル通信実験(その3) [PIC]
しつこく、PIC24FJ64GAでのソフトシリアル通信の続きですw
前回(その2)でコード短縮は限界と思っていました・・・
しかし、スタートビットとストップビットの設定に2ワードも必要なのかという漠然としたわだかまりがありました。
ステータス(シフト系命令を使うのでcarryビット)が影響を受ける命令を使ってストップビットを設定すれば何とかなるのでは??
でも、"add #0x0100,W0" では carryをクリアできてもループが1回分早く終わる・・・
でもでも ・・ あっ ・・ できた!?! ^^
ということで 10ワードまでダイエットできました (^^)/
SERI_OUT_0、SERI_OUT_1 : シリアル通信用I/O bitに 0,1を出力するマクロ
BitClk : シリアル通信1bit時間に実行できるサイクル数
ん~~ アセンブラは奥が深い・・・^^
どうしてここまで拘っているかというと今後特殊な事情がない限り、ほとんどC言語を使うことになるだろうと予測するからです。
アセンブラに関してはいっぱいコードを書いて習熟するというような機会がないので、今回のように1つの課題をじっくりあれこれ考えた方がスキルアップに繋がるだろうと・・
まぁ、一番の理由はスキル云々よりも「楽しい」からなんだけどね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
アセンブラは楽しいけど生産性が低いので・・
[ 前へ ] 連載記事 [ 次へ ]
コメント 0