♪組み方教室♪
- その@・・・5から0にカウントダウンしてみます
messagebox OKを押すと開始します 待ってます
MOV regl d'5
l'loop
dispd regl
dec regl
IFJ regl != d'-1 l'loop
dispb regl
dispm reg1
/ 実行したニーモニック数は29行です
/ DISPD…REGL:: 00000000000000000000000000000005@d
/ DISPD…REGL:: 00000000000000000000000000000004@d
/ DISPD…REGL:: 00000000000000000000000000000003@d
/ DISPD…REGL:: 00000000000000000000000000000002@d
/ DISPD…REGL:: 00000000000000000000000000000001@d
/ DISPD…REGL:: 00000000000000000000000000000000@d
/ DISPB…REGL:: 11111111111111111111111111111111@b
このような形で、10進数カウントダウンできたと思います。(handleIOを立ち上げて、”新規作成”します。上のmessageboxからdispbまでの9行をコピー・ペーストして実行
してみてください!!!)
- そのAチョット改造・・・2進数でカウントダウン・・・
3行目の "dispd regl" を "dispb regl"にして見ます。
すると、
messagebox OKを押すと開始します 待ってます
MOV regl d'5
l'loop
dispb regl
dec regl
IFJ regl != d'-1 l'loop
dispb regl
/ 実行したニーモニック数は29行です
/ DISPB…REGL:: 00000000000000000000000000000101@b
/ DISPB…REGL:: 00000000000000000000000000000100@b
/ DISPB…REGL:: 00000000000000000000000000000011@b
/ DISPB…REGL:: 00000000000000000000000000000010@b
/ DISPB…REGL:: 00000000000000000000000000000001@b
/ DISPB…REGL:: 00000000000000000000000000000000@b
/ DISPB…REGL:: 11111111111111111111111111111111@b
と2進数で出力されます!!!
(handleIOの”新規作成”をおして初期化します。上のmessageboxからdispbまでの8行をコピー・ペーストして実行してみてください!!!)
- そのB・・・REGLでカウントダウンしてると応用できないので適当なレジスタでカウントダウンしてみます
reg13でカウントダウンしてみます(REGLをすべてREG13に置換しただけです)
messagebox OKを押すと開始します 待ってます
MOV reg13 d'5
l'loop
dispd reg13
dec reg13
IFJ reg13 != d'-1 l'loop
dispb reg13
/ 実行したニーモニック数は29行です
/ DISPD…00013@d 00000000000000000000000000000005@d
/ DISPD…00013@d 00000000000000000000000000000004@d
/ DISPD…00013@d 00000000000000000000000000000003@d
/ DISPD…00013@d 00000000000000000000000000000002@d
/ DISPD…00013@d 00000000000000000000000000000001@d
/ DISPD…00013@d 00000000000000000000000000000000@d
/ DISPB…0000000000000000000000000000013@d 11111111111111111111111111111111@b
(handleIOの”新規作成”をおして初期化します。上のmessageboxからdispbまでの6行をコピー・ペーストして実行してみてください!!!)
- そのC・・・ほかの変数を用意します(演算用レジスタを12・シフト数レジスタに11を用いています)
5回カウントダウンすることがわかっているから、5回 REG12の値をそのまま表示してみます!!!
reg11とreg12に”1”をいれて、reg12が表示されるように改造しました。
条件ジャンプのジャンプ先も-2だったのを-4(4行上)までジャンプさせて、コメントを増やしました。
messagebox OKを押すと開始します 待ってます
mov reg11 d'1
mov reg12 d'1
mov reg13 d'5
l'loop
dispd reg12
dec reg13
IFJ reg13 != d'-1 l'loop
dispb regl
/ 実行したニーモニック数は30行です
/ DISPD…00012@d 00000000000000000000000000000001@d
/ DISPD…00012@d 00000000000000000000000000000001@d
/ DISPD…00012@d 00000000000000000000000000000001@d
/ DISPD…00012@d 00000000000000000000000000000001@d
/ DISPD…00012@d 00000000000000000000000000000001@d
/ DISPD…00012@d 00000000000000000000000000000001@d
/ DISPB…REGL:: 11111111111111111111111111111111@b
5回、reg12が表示されました!!!
(handleIOの”新規作成”をおして初期化します。上のmessageboxからdispbまでの10行をコピー・ペーストして実行してみてください!!!)
- そのD・・・シフトしてみます
先ほどのコメントにしていた部分に、計算(演算)処理をいれて、5回左シフトしてみませう!!!
messagebox OKを押すと開始します 待ってます
mov reg11 d'1
mov reg12 d'1
mov reg13 d'5
l'loop
calc reg12 << reg11
dispd reg12
dec reg13
IFJ reg13 != d'-1 l'loop
dispb regl
/ 実行したニーモニック数は36行です
/ DISPD…00012@d 00000000000000000000000000000002@d
/ DISPD…00012@d 00000000000000000000000000000004@d
/ DISPD…00012@d 00000000000000000000000000000008@d
/ DISPD…00012@d 00000000000000000000000000000016@d
/ DISPD…00012@d 00000000000000000000000000000032@d
/ DISPD…00012@d 00000000000000000000000000000064@d
/ DISPB…REGL:: 00000000000000000000000001000000@b
(handleIOの”新規作成”をおして初期化します。上のmessageboxからdispbまでの10行をコピー・ペーストして実行してみてください!!!)
- そのE・・・レジスタ内の変数をシフトできたら、次はパラレルポートで出力してみよう!!!
messagebox OKを押すと開始します 待ってます
mov reg11 d'1
mov reg12 d'1
mov reg13 d'5
l'loop
dispb reg12
calc reg12 << reg11
dec reg13
IFJ reg13 != d'-1 l'loop
dispb regl
/ 実行したニーモニック数は36行です
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000000001@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000000010@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000000100@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000001000@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000010000@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000100000@b
/ DISPB…REGL:: 00000000000000000000000001000000@b
上記で1の場所が左にずれていっているのがわかります。ずれていく場所をLEDで表示してみるのがこの下の回路図とプログラムです。
out命令を追加して、レジスタの内容を出力します。
今回下記のような回路図を先に作って、パラレルポートへ接続していることを前提にしております。

messagebox OKを押すと開始します 待ってます
mov reg11 d'1
mov reg12 d'1
mov reg13 d'5
l'loop
out h'378 reg12
waitpump 1000
dispb reg12
calc reg12 << reg11
dec reg13
IFJ reg13 != d'-1 l'loop
dispb regl
/ 実行したニーモニック数は36行です
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000000001@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000000010@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000000100@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000001000@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000010000@b
/ DISPB…0000000000000000000000000000012@d 00000000000000000000000000100000@b
/ DISPB…REGL:: 00000000000000000000000001000000@b
'消灯するLEDが一秒おきに移動したと思います。(実験していませんが・・・汗)
- FTDI社FT245RL(USB接続パラレルI/Oを接続した場合の専用関数一覧です)を接続してみよう
パラレルポートが無いマシンでも、ポートを操作して外部機器を操作してみたい場合には、FT245RLがお勧めです。理由はUSB接続でIn/Outするポートと5V、3.3V供給を持っているからです。
FT245RLをどこから調達してよいのかわからない場合はこちらへどうぞ
ftopen
FTDI社FT245RLの初期化をします。複数台接続されている場合には、まとめて初期化します。内部ではFT_Openを呼び出しています。
0番目デバイスという用語が多数出てきますが、FT245RLを一個しか接続していない場合はその一個目のFT245RLを0番目のデバイスと呼んでおります。同様に、2個接続している場合には、2個目を1番目のデバイスと呼びますので、ご注意ください。
ftclose
FTDI社FT245RLの終了処理を行います。複数台接続している場合には、全部まとめて終了処理をします。内部ではFT_Closeを呼び出しています。
ftsetbitmode
FTDI社FT245RLの入出力モードを設定します。内部ではFT_SetBitModeを呼び出しています。
ftsetbitmode d'0 h'ff
0番目のデバイスを全部出力モードに設定します。
ftsetbitmode d'0 h'00
0番目のデバイスを全部入力モードに設定します。
ftreset d'0
0番目のデバイスをリセットします。内部ではFT_ResetDeviceを呼び出しています。
ftsetbaudrate d'0 d'300
0番目のデバイスを300bpsにセットします。
921600bps/460800/230400/115200/57600/38400/19200/14400/9600/4800/2400/1200/600/300を指定出来ます。内部ではFT_SetBaudRateを呼び出しています。
ftout
ftout d'0 b'00001111
回路図

'FTDI社FT245RLの0番目のデバイスに 二進数00001111と出力します。もし、LEDが8個接続されている場合には、4個のLEDが消えて、残りの四個が点灯します。FT_Writeを内部では呼び出しています。
ftin
ftin d'0
FTDI社FT245RLの0番目のデバイスから信号を8Bit入力してきます。入力結果はREGLレジスタに格納されますので、ftinした後、データを保管したい場合にはREGLを別のレジスタにコピーしておきます。内部ではFT_GetBitMode関数を呼び出しています。
例:
ftin d'0
mov reg100 regl
ftread
FT_Readを内部で呼び出しています。結果はreglに格納されます。
ftgetserialnumber d'0
接続されている内の0番目のデバイスが所持するシリアルコードを取得して、画面に表示する。レジスタには書き込まれない
応用例:
ftgetserialnumber reg100
reg100が0の場合には0番目のデバイスのシリアルナンバーを表示する
1の場合には1番目のデバイスのシリアルナンバーを表示する
ftserialnumberjmp 0 A4001VQJ l'start
0番目のデバイスのシリアルナンバーが"A4001VQJ"の場合l'startにジャンプ
- 関数を作る。
HandleIOの関数を作る場合には少しだけ素直でない仕様が有りますので、そのあたりについて解説します。
関数はcall文とラベル文,RET文で作成できます。ですが、CALLした後、プログラムを正常に終えさせるためには、関数の後にジャンプ〔最後の行へのジャンプを〕できるように書かなければなりません。そのため、関数を作成した場合には、必ずl'endラベルを定義することになります。
@
l'start
/ 最後尾の行にl'endを書いておく
l'end
A関数は本体と別の場所に処理を記入しておく必要があります。
前の方に関数を記述してしまうと、流れがおかしくなってしまうため、本体よりも後、最後尾よりも前の場所に記入するようにします。このような場所に記述すると、〔HandleIOでは〕すっきりとした関数になるのと、一行実行時に実行場所が変化(数行後に変化)しても、RET(場所の行数が何行目なのか)は変化しないので戻ってこれる構造になります。
l'start
call l'初期化
関数をここに記入していきます
l'end
BCALL命令とRET命令、ラベルを定義します。
call l'初期化
jmp l'end
l'初期化
ここではREGLを保存しておき、retするときに戻せるようにします
mov reg900 regl
mov regl reg900
ret
l'end
C関数に何らかの値を渡したい場合にはcallの前にmov命令で引き渡す値を転送しておきます。下記の場合にはmov reg100 d'43の行で渡す値を10進数(43)にしております。
mov reg100 d'43
call l'初期化
jmp l'end
l'初期化
mov reg900 regl
ここに関数の処理、LCDの初期化などを記入します。(LCDの接続回路図は少し下にあります)
REG100を参照して、パラメータとします。
mov regl reg900
ret
l'end
D別途、LCDの初期化方法を実験しながらポートをたたいていってみます。
LCDの初期化実験
'LCDの回路図

FT245RLが認識されている状態で、下記の順番に信号を発したところLCDを4ビットモードで初期化出来ることが確認できました。
LCD SD1602はここで調達できます。
ユニバーサル基板はこちらです
/ 7654ER00
ftout d'0 b'00000000 1
ftout d'0 b'00111000 2
ftout d'0 b'00110000 3
ftout d'0 b'00111000 4
ftout d'0 b'00110000 5
ftout d'0 b'00111000 6
ftout d'0 b'00100000 7
ftout d'0 b'00101000 8
ftout d'0 b'00100000 9
ftout d'0 b'00101000 10
ftout d'0 b'10000000 11
ftout d'0 b'10001000 12
ftout d'0 b'10000000 13
ftout d'0 b'00001000 14
ftout d'0 b'00000000 15
ftout d'0 b'10001000 16
ftout d'0 b'10000000 17
ftout d'0 b'00001000 18
ftout d'0 b'00000000 19
ftout d'0 b'11111000 20
ftout d'0 b'11110000 21
/ 7654ER00 Display on cursol on All clear
ftout d'0 b'00001000
ftout d'0 b'00000000
ftout d'0 b'00011000
ftout d'0 b'00010000
E初期化部分を組み込んだ関数にしてみます
mov reg100 d'43
call l'初期化
jmp l'end
l'初期化
/ 必要な場合REG100を参照して、パラメータとします。
mov reg900 regl
/ 7654ER00
ftout d'0 b'00000000 1
ftout d'0 b'00111000 2
ftout d'0 b'00110000 3
ftout d'0 b'00111000 4
ftout d'0 b'00110000 5
ftout d'0 b'00111000 6
ftout d'0 b'00100000 7
ftout d'0 b'00101000 8
ftout d'0 b'00100000 9
ftout d'0 b'00101000 10
ftout d'0 b'10000000 11
ftout d'0 b'10001000 12
ftout d'0 b'10000000 13
ftout d'0 b'00001000 14
ftout d'0 b'00000000 15
ftout d'0 b'10001000 16
ftout d'0 b'10000000 17
ftout d'0 b'00001000 18
ftout d'0 b'00000000 19
ftout d'0 b'11111000 20
ftout d'0 b'11110000 21
/ 7654ER00 Display on cursol on All clear
ftout d'0 b'00001000
ftout d'0 b'00000000
ftout d'0 b'00011000
ftout d'0 b'00010000
mov regl reg900
ret
l'end
F関数を追加して、所定の文字を表示させられるようにしてみます。
Dの次に下記のような要領でポートに出力してあげると、文字をLCDに出力できることを突き止めました。
〔下記4行で¥記号(5Ch)をLCD上に表示します〕
ftout d'0 b'01011100 (5c 5c"\"と出力 上位4ビット5を出力)
ftout d'0 b'01010100 (54)
ftout d'0 b'11001100 (cc 5c"\"と出力 下位4ビットcを出力)
ftout d'0 b'11000100 (c4)
G Fの処理を関数化してしまいます。5c(\)を表示できるようにします。上位4ビットと下位4ビットに分けて、RSとEnable信号をHigh->Lowします。
関数は下記のようになりました。reg110に所定の数字を入れてcall l'4bitoutputを呼び出してあげます。
l'4bitoutput
/ 上位4ビットのみを取得する
and reg110 b'11110000 reg111
/ Enableピン と RSピン を Highにする
or reg111 h'0c reg112
/ EnableピンをLow RSピン を Highにする
or reg111 h'04 reg113
/ 下位4ビットのみを取得する
and reg110 b'00001111 reg114
/ 下位4ビットを 左に4つ シフトする
calc reg114 * d'16 reg115
/ Enableピン と RSピン を Highにする
or reg115 h'0c reg116
/ EnableピンをLow RSピン を Highにする
or reg115 h'04 reg117
ftout d'0 reg112
ftout d'0 reg113
ftout d'0 reg116
ftout d'0 reg117
ret
H では、GとEを合成してしまいましょう。
call l'初期化
mov reg110 h'5c "\"を表示する文字にします。
call l'4bitoutput
jmp l'end
l'初期化
/ 必要な場合REG100を参照して、パラメータとします。
mov reg900 regl
/ 7654ER00
ftout d'0 b'00000000 1
ftout d'0 b'00111000 2
ftout d'0 b'00110000 3
ftout d'0 b'00111000 4
ftout d'0 b'00110000 5
ftout d'0 b'00111000 6
ftout d'0 b'00100000 7
ftout d'0 b'00101000 8
ftout d'0 b'00100000 9
ftout d'0 b'00101000 10
ftout d'0 b'10000000 11
ftout d'0 b'10001000 12
ftout d'0 b'10000000 13
ftout d'0 b'00001000 14
ftout d'0 b'00000000 15
ftout d'0 b'10001000 16
ftout d'0 b'10000000 17
ftout d'0 b'00001000 18
ftout d'0 b'00000000 19
ftout d'0 b'11111000 20
ftout d'0 b'11110000 21
/ 7654ER00 Display on cursol on All clear
ftout d'0 b'00001000
ftout d'0 b'00000000
ftout d'0 b'00011000
ftout d'0 b'00010000
mov regl reg900
ret
l'4bitoutput
and reg110 b'11110000 reg111
/ Enableピン と RSピン を Highにする
or reg111 h'0c reg112
/ EnableピンをLow RSピン を Highにする
or reg111 h'04 reg113
and reg110 b'00001111 reg114
/ 下位4ビットを 左に4つ シフトする
calc reg114 * d'16 reg115
/ Enableピン と RSピン を Highにする
or reg115 h'0c reg116
/ EnableピンをLow RSピン を Highにする
or reg115 h'04 reg117
ftout d'0 reg112
ftout d'0 reg113
ftout d'0 reg116
ftout d'0 reg117
ret
l'end
¥記号をLCDに表示してくれたでしょうか。
もし正常に表示されない場合には、USBケーブルの接続を一旦切り離して、繋ぎなおしてみてください。何度かやり直してみてください。それでもだめな場合には"."キーで、一行実行しながら進めていってください。WAITを入れないと早すぎてLCD側が認識できない恐れがあります。
Iついでに、カーソルを二行目に持ってくる関数を作ってみます。
LCD初期化後に下記のようなパターンを実行してあげると、カーソルを二行目に持って来れます。
ftout d'0 b'11000000
ftout d'0 b'11001000
ftout d'0 b'00000000
ftout d'0 b'00001000
ftout d'0 b'00000000
そのため、2行目一文字に移動する関数を作って、追加したものが下記のプログラムです。
/ 0番デバイスを全ビット出力モードにセットする
ftsetbitmode 0 h'ff
/ DB2 RS
/ DB3 E
/ DB4 4
/ DB5 5
/ DB6 6
/ DB7 7
/ 7 6 5 4 E RS 0 0
/
/
/
call l'lcdinit
/ 0x31 '1' を出力してみる
mov reg110 h'31
call l'4bitoutput
/ 0x32 '2' を出力してみる
mov reg110 h'32
call l'4bitoutput
/ 0x33 '3' を出力してみる
mov reg110 h'33
call l'4bitoutput
/ 0x34 '4' を出力してみる
mov reg110 h'34
call l'4bitoutput
mov reg110 h'28
call l'4bitoutput
mov reg110 h'27
call l'4bitoutput
mov reg110 h'6f
call l'4bitoutput
mov reg110 h'27
call l'4bitoutput
mov reg110 h'29
call l'4bitoutput
call l'Cursol2rows
mov reg110 h'28
call l'4bitoutput
mov reg110 h'27
call l'4bitoutput
mov reg110 h'6f
call l'4bitoutput
mov reg110 h'27
call l'4bitoutput
mov reg110 h'29
call l'4bitoutput
jmp l'end
l'4bitoutput
and reg110 b'11110000 reg111
/ Enableピン と RSピン を Highにする
or reg111 h'0c reg112
/ EnableピンをLow RSピン を Highにする
or reg111 h'04 reg113
and reg110 b'00001111 reg114
/ 下位4ビットを 左に4つ シフトする
calc reg114 * 16 reg115
/ Enableピン と RSピン を Highにする
or reg115 h'0c reg116
/ EnableピンをLow RSピン を Highにする
or reg115 h'04 reg117
ftout d'0 reg112
ftout d'0 reg113
ftout d'0 reg116
ftout d'0 reg117
ret
l'lcdinit
/ 7654ER00
ftout d'0 b'00000000 1
ftout d'0 b'00111000 2
ftout d'0 b'00110000 3
ftout d'0 b'00111000 4
ftout d'0 b'00110000 5
ftout d'0 b'00111000 6
ftout d'0 b'00100000 7
ftout d'0 b'00101000 8
ftout d'0 b'00100000 9
ftout d'0 b'00101000 10
ftout d'0 b'10000000 11
ftout d'0 b'10001000 12
ftout d'0 b'10000000 13
ftout d'0 b'00001000 14
ftout d'0 b'00000000 15
ftout d'0 b'10001000 16
ftout d'0 b'10000000 17
ftout d'0 b'00001000 18
ftout d'0 b'00000000 19
ftout d'0 b'11111000 20
ftout d'0 b'11110000 21
/ 7654ER00 Display on cursol on All clear
ftout d'0 b'00001000
ftout d'0 b'00000000
ftout d'0 b'00011000
ftout d'0 b'00010000
ret
l'Cursol2rows
/ 7 6 5 4 E RS 0 0
/ 7654ER00 Set DDRAM address 2行目にカーソルを移動する
ftout d'0 b'11000000
ftout d'0 b'11001000
ftout d'0 b'00000000
ftout d'0 b'00001000
ftout d'0 b'00000000
ret
l'end
上記のプログラムを実行してあげると下記のような写真になります。
- 温度センサを接続して外気温を計測
温度センサを接続してみました。外気温を計測してみます。


MCP3204はこちらで調達できます
上記の回路図を作動させるプログラムは、下記です。
/ lm35用温度センサ入力
/ 温度を計測するプログラム。
l'start
/ 温度計デバイスを0番に設定する
mov reg200 d'0
/ 通信速度を最上の921600bit/secに設定する
ftsetbaudrate reg200 d'921600
/ reg300 〜 reg311 の各ビットに計測した信号の入力が入ってくる
mov reg300 d'0
mov reg301 d'0
mov reg302 d'0
mov reg303 d'0
mov reg304 d'0
mov reg305 d'0
mov reg306 d'0
mov reg307 d'0
mov reg308 d'0
mov reg309 d'0
mov reg310 d'0
mov reg311 d'0
/ 0番デバイスを出力モードにセットする
ftsetbitmode reg200 h'7f
/ DB0 CSへの出力端子(MCP3204のCS端子への出力)
/ DB1 DINへの出力端子(MCP3204のDIN端子への出力)
/ DB2 CLKへの出力端子(MCP3204のCLK端子への出力)
/ DB7 DOUTからの入力端子(MCP3204のDOUT端子からの入力)
/ DO 6 5 4 3 CLK DIN CS
ftout reg200 b'00000101
ftout reg200 b'00000000 csをLowに設定して通信開始
ftout reg200 b'00000100 clock:1
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:2
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:3
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:4
ftout reg200 b'00000010 スタートビットとしてDINをHighに設定
ftout reg200 b'00000110 clock:5
ftout reg200 b'00000010 シングルエンドモードなのでDINをHighに設定
ftout reg200 b'00000110 clock:6
ftout reg200 b'00000000 制御ビット選択のためDINのD2をLowに設定
ftout reg200 b'00000100 clock:7
ftout reg200 b'00000000 制御ビット選択のためDINのD1をLowに設定
ftout reg200 b'00000100 clock:8
ftout reg200 b'00000000 制御ビット選択のためDINのD0をLowに設定
ftout reg200 b'00000100 clock:9
ftout reg200 b'00000000
l'wait
ftout reg200 b'00000100 clock:10
ftout reg200 b'00000000
ftin reg200
calc regl / d'128 regl
ifj regl == 1 l'wait
ftout reg200 b'00000100 clock:11
ftout reg200 b'00000000
ftin reg200
/ 最上位ビットの取り出し D11bit
calc regl / 128 regl
mov reg311 regl
ftout reg200 b'00000100 clock:12
ftout reg200 b'00000000
ftin reg200
/ 最上位ビットの取り出し D11bit
calc regl / 128 regl
mov reg310 regl
ftout reg200 b'00000100 clock:13
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg309 regl
ftout reg200 b'00000100 clock:14
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg308 regl
ftout reg200 b'00000100 clock:15
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg307 regl
ftout reg200 b'00000100 clock:16
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg306 regl
ftout reg200 b'00000100 clock:17
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg305 regl
ftout reg200 b'00000100 clock:18
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg304 regl
ftout reg200 b'00000100 clock:19
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg303 regl
ftout reg200 b'00000100 clock:20
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg302 regl
ftout reg200 b'00000100 clock:21
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg301 regl
ftout reg200 b'00000100 clock:22
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg300 regl
ftout reg200 b'00000100 clock:23
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:24
ftout reg200 b'00000001 通信終了
ftout reg200 b'00000101
ftout reg200 b'00000001
ftout reg200 b'00000101
mov reg400 reg311
calc reg400 * d'2 reg400
calc reg400 + reg310 reg400
calc reg400 * d'2 reg400
calc reg400 + reg309 reg400
calc reg400 * d'2 reg400
calc reg400 + reg308 reg400
calc reg400 * d'2 reg400
calc reg400 + reg307 reg400
calc reg400 * d'2 reg400
calc reg400 + reg306 reg400
calc reg400 * d'2 reg400
calc reg400 + reg305 reg400
calc reg400 * d'2 reg400
calc reg400 + reg304 reg400
calc reg400 * d'2 reg400
calc reg400 + reg303 reg400
calc reg400 * d'2 reg400
calc reg400 + reg302 reg400
calc reg400 * d'2 reg400
calc reg400 + reg301 reg400
calc reg400 * d'2 reg400
calc reg400 + reg300 reg400
/ DISPD…00400@d 00000000000000000000000000000303@d
/ 4096:3180=2091:x
/ x = 3180*543/4096 = 1588
/ ℃=1750-1588/8=
calc REG400 * d'3300 REG900
calc reg900 * d'100 reg901
calc REG901 / d'4096 REG902
dispd reg902
dec reg800
ftreset 0
/ DISPD…00400@d 00000000000000000000000000001708@d
/ 実測値1590mV
/ 実行したニーモニック数は1671行です
/ DISPD…00400@d 00000000000000000000000000002095@d
/ DISPD…00902@d 00000000000000000000000000168786@d
/ reg400が1変化したときに、REG902は80変化する
/ reg902に出力されてきた値が電位となっている。168786の場合には16.8786℃が現在の外気温
- 温度センサS-8100を接続します
別な温度センサを接続してみます。


注意:S-8100は試験的に接続したものです。
回路図の参考文献はqwerty987さんのBLOGです。
HandleIO説明書執筆時点ではまだ正確な温度を(この文を書いている筆者は)割り出せていないので、仮の公開となっております。
l'start
/ 温度計デバイスを0番に設定する
mov reg200 0
/ 通信速度を最上の921600bit/secに設定する
ftsetbaudrate reg200 921600
/ reg300 〜 reg311 の各ビットに計測した信号の入力が入ってくる
mov reg300 0
mov reg301 0
mov reg302 0
mov reg303 0
mov reg304 0
mov reg305 0
mov reg306 0
mov reg307 0
mov reg308 0
mov reg309 0
mov reg310 0
mov reg311 0
/ 0番デバイスを出力モードにセットする
ftsetbitmode reg200 h'7f
/ DB0 CSへの出力端子(MCP3204のCS端子への出力)
/ DB1 DINへの出力端子(MCP3204のDIN端子への出力)
/ DB2 CLKへの出力端子(MCP3204のCLK端子への出力)
/ DB7 DOUTからの入力端子(MCP3204のDOUT端子からの入力)
/ DO 6 5 4 3 CLK DIN CS
ftout reg200 b'00000101
ftout reg200 b'00000000 csをLowに設定して通信開始
ftout reg200 b'00000100 clock:1
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:2
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:3
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:4
ftout reg200 b'00000010 スタートビットとしてDINをHighに設定
ftout reg200 b'00000110 clock:5
ftout reg200 b'00000010 シングルエンドモードなのでDINをHighに設定
ftout reg200 b'00000110 clock:6
ftout reg200 b'00000000 制御ビット選択のためDINのD2をLowに設定
ftout reg200 b'00000100 clock:7
ftout reg200 b'00000000 制御ビット選択のためDINのD1をLowに設定
ftout reg200 b'00000100 clock:8
ftout reg200 b'00000000 制御ビット選択のためDINのD0をLowに設定
ftout reg200 b'00000100 clock:9
ftout reg200 b'00000000
l'wait
ftout reg200 b'00000100 clock:10
ftout reg200 b'00000000
ftin reg200
calc regl / d'128 regl
ifj regl == 1 l'wait
ftout reg200 b'00000100 clock:11
ftout reg200 b'00000000
ftin reg200
/ 最上位ビットの取り出し D11bit
calc regl / 128 regl
mov reg311 regl
ftout reg200 b'00000100 clock:12
ftout reg200 b'00000000
ftin reg200
/ 最上位ビットの取り出し D11bit
calc regl / 128 regl
mov reg310 regl
ftout reg200 b'00000100 clock:13
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg309 regl
ftout reg200 b'00000100 clock:14
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg308 regl
ftout reg200 b'00000100 clock:15
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg307 regl
ftout reg200 b'00000100 clock:16
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg306 regl
ftout reg200 b'00000100 clock:17
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg305 regl
ftout reg200 b'00000100 clock:18
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg304 regl
ftout reg200 b'00000100 clock:19
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg303 regl
ftout reg200 b'00000100 clock:20
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg302 regl
ftout reg200 b'00000100 clock:21
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg301 regl
ftout reg200 b'00000100 clock:22
ftout reg200 b'00000000
ftin reg200
calc regl / 128 regl
mov reg300 regl
ftout reg200 b'00000100 clock:23
ftout reg200 b'00000000
ftout reg200 b'00000100 clock:24
ftout reg200 b'00000001 通信終了
ftout reg200 b'00000101
ftout reg200 b'00000001
ftout reg200 b'00000101
mov reg400 reg311
calc reg400 * d'2 reg400
calc reg400 + reg310 reg400
calc reg400 * d'2 reg400
calc reg400 + reg309 reg400
calc reg400 * d'2 reg400
calc reg400 + reg308 reg400
calc reg400 * d'2 reg400
calc reg400 + reg307 reg400
calc reg400 * d'2 reg400
calc reg400 + reg306 reg400
calc reg400 * d'2 reg400
calc reg400 + reg305 reg400
calc reg400 * d'2 reg400
calc reg400 + reg304 reg400
calc reg400 * d'2 reg400
calc reg400 + reg303 reg400
calc reg400 * d'2 reg400
calc reg400 + reg302 reg400
calc reg400 * d'2 reg400
calc reg400 + reg301 reg400
calc reg400 * d'2 reg400
calc reg400 + reg300 reg400
/ DISPD…00400@d 00000000000000000000000000002091@d
/ 4096:3180=2091:x
/ x = 3300*543/4096 = 1588
/ ℃=1748-1588/8=
calc REG400 * d'3300 REG900
calc reg900 * d'100 reg901
calc REG901 / d'4096 REG902
/ dispd reg902
calc d'174800 - reg902 reg910
calc reg910 / d'8 reg911
dispd reg911
/ DISPD…00911@d 00000000000000000000000000020215@d 単位はm℃
/ 計算結果 4桁表示 下二桁は小数点以下の温度〔のはずです〕
- そのJ
書いてます・・・バグ検査中
もチョットお待ちください