addwf xxx,f // w+xxxの値を、xxxに入れる
addwf xxx,w // w+xxxの値を、wレジスタに入れる
start:
Data0クリア // 初期設定→出来れば、これはコマンド発行前にやっておく
Data1クリア
カウンタセット
loop:
データ1ならば、スキップ // データ立上り検出
loopに戻る
ウェイト // 調整が必要
キャリークリア // すぐ後のシフト演算のために、キャリークリア
データ0ならば、スキップ // データ判定
キャリーセット
Data0左シフト(キャリ含む)
Data1左シフト(キャリ含む)
カウンタ-1
カウンタが0なら、スキップ // 取込み完了まで繰返し実行
loopへ戻る
int count=16; // 変数の初期化
int data0=0;
int data1=0;
#asm
loop:
btfss PORTA,0 // 仮にPORTAのbit0が、データとする
goto loop // データの立上り待ち
nop // nopで時間稼ぎ(調整要)
nop
nop
nop
bcf STATUS,C // キャリをクリア
btfsc PORTA,0 // データが1ならば
bsf STATUS,C // キャリをセット
rlf data0,f // キャリに入っているデータを、dataにシフト
rlf data1,f // 仮に16bitデータとすると2byte分やれば良い
decfsz count,f // -1して判定スキップする命令があったので、1命令節約
goto loop // 16回繰返す
#endasm
int count=0;
int data0=0;
int data1=0;
// 全部Bank0(0x20〜0x7F)に指定する
#locate count=0x50;
#locate data0=0x51;
#locate data1=0x52;