ようこそ!JQ2RVNのブログです。
PICを使っていろいろな物を作ろうと画策中です。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 PICTNCのソースから、CRCアルゴリズムを解析しました。 PR
PICTNCの受信ルーチン。
次はrecv_one_bitです。 このルーチンは状態変化割り込みで判定したトーンを用いて NRZI変換をしたり、タイミングを見たりします。 ここで変数・定数の説明します。 <変数> R_TONE:状態変化割り込みで得られた現在のトーン rotor:前回のトーン <定数> ONE_BIT:1200bpsでの1ビットの時間(833μsec) ONE_5_BIT:1ビットの時間の1.5倍の時間 (↑ Timer2で使われるので、カウント数を計算する) R_TONEとrotorの0ビット目が同じなら → no_change R_TONEとrotorの0ビット目が違っていたら → bit_edge というように、サブルーチンにジャンプします。 後で書きますがrotorはbit_edgeのときは+1されますので、 結果的に前回の値が入っていることになります。 (0ビット目が反転される) 8ビット変数なので、ちょっともったいない気もしますが、 1ビット変数にすると、反転が面倒なので、 このようなレトリックを使ってるみたいです。 bit_edgeサブルーチン rotorを+1する。 Timer2の割り込み時間(PR2)をONE_5_BITにする。 TMR2IF(割り込みフラグ)とTMR2をクリアする。 Cビットを0にする no_changeサブルーチン TMR2IFが0の場合はrecv_one_bitに戻る。 (TMR2が規定時間過ぎていない状態) TMR2IFが1の場合、以下続行 PR2=ONE_BIT TMR2IF(割り込みフラグ)とTMR2をクリアする。 Cビットを1にする <ポイント> このルーチンから戻った時、 Cビットに受信した1ビットが入っています PICのシフト演算はCビットの値が入ってきますから 変数を使わずとも、シフトするだけで受信した信号が入ります (この辺は次回fine_start_flagにて) Timer2は割り込みを発生させません(TMR2IE=0) しかし、条件が一致すればフラグが立つ(TMR2IF=1になる)ので これで既定の時間が経過したかどうかの判断ができます |
カレンダー
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。 まずは、本家を解析しています。
カテゴリー
最新記事
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
ブログ内検索
最古記事
(05/18)
(05/19)
(05/19)
(05/20)
(05/21)
アクセス解析
|