目次

Windows用Forth

 Forthは、マイコンだけでなくPCでも動かせます。

 自分は、WIN32FORTHを利用しています。

 DOS窓を利用すると、次のようなCUI操作画面が現れます。



 DOS窓でのタイプする内容は、以下。



 バッチファイルを使っています。
 次のように単純です。

win32for

 WIN32FORTHをダウンロードするURLは、以下。



 ダウンロードしたZIP形式ファイルを解凍して
 ディレクトリを作成して、全ファイルを複写
 してしまいます。



 スタックに含まれている内容を、スタックの
 内容を破壊しないで、表示するには、ワード
 「.S」を使います。



 Arduinoのハードウエアに、何かデバイスを接続して
 動作させる場合、AmForthの環境がないときには、次
 のように、Virtualで環境を用意できます。



 変数としてPORTDを定義して、それを操作することで
 ポートDに接続されている、デバイスに対しての信号
 を与えてます。

 ポートDの2、3、4、5ビットに4ビットの値を
 組み合わせて入れる操作を、論理演算、シフト演算
 で処理します。

 タイプ内容は、テキストエディタを使って入力後
 クリップボード経由で、ForthのCUI画面にコピー
 しています。



 終了するときには、ワード「bye」をタイプ。



 これでDOS窓だけになります。




 Arduinoのハードウエアをシミュレートするため
 変数定義ワード「variable」を使い、各レジスタ
 を宣言。




 ArduinoのD13には、LEDが接続されているので
 これを点滅させるには、次のようにレジスタ
 DDRB、PORTBの設定が必要。

D13は、ポートBの5ビット目
ポートBの5ビット目を出力に設定=DDRBの5ビット目を1を格納
LEDの点灯=PORTBの5ビット目に1を格納
LEDの消灯=PORTBの5ビット目に0を格納

 これらの内容をワードで指定すると、以下。

DDRB c@ 1 5 lshift or DDRB c!
: lon PORTB c@ 1 5 lshift or PORTB c! ;
: loff PORTB c@ 1 5 lshift xor PORTB c! ;
: BLINK lon 1000 MS loff 1000 MS ;

 ワード「MS」は、ミリ秒単位の遅延になっています。

 設定と定義を入力。



 実際にポートBの5ビット目が、変化しているのかは
 次のようにテストしてみればよいはず。

: XWAIT 1000 MS ;
: BTST cr 10 0 do i . lon PORTB c@ . XWAIT loff PORTB c@ . XWAIT cr loop ;

 動かしてみると、以下。




 ArduinoのポートDの2から5ビットに、モータドライバが
 接続されているとすれば、その制御をシミュレートして
 AmFORTHでのワード定義の前に、動作確認できます。

 モータドライバの設定、次のように動作するとします。

(1,0,1,0) foward
(0,1,0,1) backward
(1,0,0,1) right turn
(0,1,1,0) right turn
(1,1,1,1) stop

 ポートDの2から5ビットを出力に設定後
 ポートDの出力を扱うワードを定義。
 その後、前後左右の移動指定と停止をまとめると
 次のようにすればよいはず。

15 2 lshift DDRD c@ or DDRD c!
DDRD c@ .
: MWW 2 lshift PORTD c@ $c3 and or PORTD c! ;
: MFW 10 MWW ;
: MRR 9 MWW ;
: MLL 6 MWW ;
: MBW 5 MWW ;
: MSTP 15 MWW ;
MFW PORTD c@ .
MRR PORTD c@ .
MLL PORTD c@ .
MBW PORTD c@ .
MSTP PORTD c@ .

 シミュレートして見ると、以下。



 ポートの出力を確認できたので、入力をシミュレート
 してみます。

 変数定義ワード「variable」を利用して
 入力レジスタを宣言しておきます。

 レジスタ名をPINを使います。



 ポートCの下位4ビットを取り出して
 2ビット目だけを取り出すワードを
 定義して動かしてみます。

 方向設定とワード定義は、以下。

$f0 DDRC c@ and DDRC c!
$0f PINC c!
PINC c@ .
: GETS PINC c@ 1 2 lshift and ;
GETS .

 動かしてみると、次のようになります。



 ワードを定義していけば、更にArduinoの
 使い方に似せた環境を構築できます。


目次

inserted by FC2 system