2023.4.14
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第9回]



●サンプルプログラム(5)I/Oポートへの出力(3)

前回は説明の途中で終ってしまいました。
今回はその続きです。

前回は下の画面のところで終りました。


下はあらためてPICBASICコンパイラを起動して、/PMRDコマンドで前回ターゲットのPICBS03に書き込んだマシン語コードを読み出したところです。

今までのマシン語プログラムと今回のプログラムとではマシン語コードが異なっています。
[第6回]と同じようにマシン語コードにアセンブラニーモニックとその命令のクロック数を追記しました。

00 0E movlw 00
94 6E movwf TRISC
82 50 loop:movf PORTC,w (1) ←
01 0F addlw 01 (1)
82 6E movwf PORTC (1)
02 EF goto loop (2)
10 F0                →↑

3行目で現在のPORTCの値を読んでそれをwレジスタに入れています。
4行目でwレジスタに1を加算します。
5行目でwレジスタの値をPORTCに入れています。
そのあと6行目のGOTO命令で3行目に戻ってそこから6行目までを繰り返しています。
1回の繰り返し期間の実行命令クロック数は1+1+1+2=5クロックです。
1命令クロックの時間は1/12μsです([第6回]参照)。
1回の繰り返し期間を計算で求めると5/12=約0.417μsになります。
約420nsです。
2回の繰り返しで1周期になりますからその周期を求めると10/12=5/6ですから約0.833μsになります。
こちらは約830nsです。
前回のCPLDロジアナの測定結果と一致しています。

そのCPLDロジアナですが、前回は時間がありませんでしたのでとりあえずRC0のみをPROBE0に接続して測定を行ないました。
今回はPROBE0〜PROBE7にRC0〜PC7を接続して測定を行ないました。

サンプリングクロック=100MHzです。

RC0のL区間は410ns、H区間は430nsです。
1回の周期は840nsです。
サンプリング周波数が高すぎてRC1より上位の全体の波形は見ることができません(カーソルをずらしていけば見ることができますが)。
RC1のL期間だけは表示から読み取ることができます。
こちらは810nsです。
ちょっとビット間の出力に差があるようにも見えますがサンプリング周波数100MHzでは10nsに1回のサンプリングですからこの辺りは「測定限界」に近いと思われます。

カーソルを少し右に移動させました。

RC1のH区間は850nsです。
先の波形とあわせてみると、やはり10ns〜20nsの差はサンプリング周波数が100MHzであるための測定限界だと考えられます。
PICからは計算した通りの波形が出力されていると考えてよいと思います(ビット間では数ns程度のバラツキがあるかもしれません)。

上位のビットの波形を見るためにサンプリング周波数を10MHzにしました。

PROBE3(RC3)までは規則正しい波形が出力されています。

さらに上位のビットを見るためにサンプリング周波数を1MHzにしました。

PROBE7(RC7)までの波形が観測できました(サンプリング周波数の関係でRC0〜RC2は「間引き」的なサンプリングになるため実際の波形とは異なる表示になっています)。
参考までに最上位ビットRC7(PROBE7)の1周期を計算で求めてみます。
上の方で計算しましたようにRC0は5/12μsに1回出力されます。
RC7の1周期の間にRC0は256回出力されますからその周期は5/12*256≒107μsになります。
上のCPLDロジアナでの観測波形とぴったり一致しました。

PICBASICコンパイラ[第9回]
2023.4.14upload

前へ
次へ
ホームページトップへ戻る