ずぼらをして出来合いのルーチン借りてきて作ろうとしているのがまずのかもしれません。まだPICマイコンさんとかコンパイラさんの仕様とか癖がわからないのも一因かな。・・と愚痴前置きはこれぐらいで。
何をやりたいのかですが、
1.とりあえず2400ボーなので417μ秒単位でASCIIコードのビットを送り出したい。
2.受信はスタートビットのリーディングエッジで受信モードに入り、417/2の208μ秒でサンプリング、その後417μ秒単位で8ビットをサンプリングしてASCIIコードにしたいということになります。
HITTEC社からおまけのシリアル.シーに入っているプッチャゲッチャのタイミングがどうなっているかを見てみることにします。
項 番 |
項目 |
計算 式 ボーレート→ |
4MHz 発振 とする |
単位 |
|
2400 | 9600 | ボー | |||
1 | ビットタイム | BIT=1000000/(BAUDT RATE) μS | 416.7 | 104.2 | μS |
2 | マシンサイクル 数 |
MC=BIT/(MHz/ 発振 周波数 /4) サイクル |
417 | 104 | サイクル |
3 | ITIME | ITIME=4*SCALER/XTAL | 10 | 10 | |
4 | DLY | 3 | 1250 | 312.5 | μS |
5 | TX_OHEAD | 13 | 5417 | 1354 | μS |
6 | RX_OHEAD | 12 | 5000 | 1250 | μS |
7 | putch dly | dly=(((SCALER/BRATE)-(TX_OHEAD*ITIME))/DLY*ITIME)) | 135 | 30 | |
8 | getch dly start | dly=(((SCALER/BRATE)-(3*ITIME))/DLY*ITIME))/2 | 69 | 17 | |
9 | getch dly loop | dly=(((SCALER/BRATE)-(RX_OHEAD*ITIME))/DLY*ITIME)) | 135 | 31 |
図 BIT-BANGINGデバッグ
計算書
ということでコンパイラが3インストラクション+若干オーバーヘッドでループしているかどうかで調べないとね。・・・れれれ、何でふぉんとがちいさくなるんだろー・・・。