PASCALの (−試行錯誤の−) 部屋  06.04.24
 MikroElektronika社からPascalコンパイラが出ていて、2kバイトの制限ながら無償のデモ版があることをAVRWikiで知りました。 PascalはMS-DOS3の頃にデータ処理のプログラムを書いたことがあり、WindowsになってからDelphiを少しかじりましたので、procedure,begin,end...に 違和感はありません。どこまでできるかわかりませんが、試行錯誤の過程を書いてみようかと思いました。

生成するコードが大きすぎて、Tiny2313やmega48では使うことができません。残念ですが、試行を中止します。06.04.26
060425:残念!挫折 LCD表示
060424:プログラムを書いてみる−LEDピコピコ
060424:ダウンロード・インストール・そして少しの調整




060425:残念!挫折 LCD表示プログラム

ライブラリにLCD表示用のルーチンがあります。Lcd_Init()でポートを初期化し、Lcd_Out()でテキストが書けるはずです。
Tiny2313をブレッドボードに用意して、次のプログラムを書きました。
 Lcd_Init(PORTB,5,4,PORTB,LCD_LO_NIBBLE); // EN=PB5 RS=PB4 DATA=PB3:0
 Lcd_Out(2,1,'Hello!');
これでよいはずなのですが、(uses lcd4; を書かないとエラーになりますので入れましたが)コンパイルが進み、
Linker error: Not enough ROM
で止まります。デバイスをmega48に変更すると無事コンパイルができますが、メモリ使用量はなんと1051wordsになります。 これではTiny2313には 書けるはずがありません。どうしてこんなに大きいんでしょう? 書くのは簡単ですが実用にはなりません。
ちなみに、WinAVRで同じプログラムを作ると438バイトでした。小さなライブラリを作ることができなければ使えません。残念。




060424:プログラムを書いてみる−LEDピコピコ

mega2313のportBに8個のLEDを接続し、portB0から順番に点灯するプログラム「led8」を作ってみます。クロックは内部RCによる8MHzとします。
pascalでは広い意味のプログラム全体を「project」(拡張子は.pp)と呼び、MCUの実行命令はその中の「program」(拡張子は.apas)に書かれます。projectには デバイスの種類やクロックなどが記述されているようです。
統合環境ではまずprojectを設定し、続いてプログラムを書くことになると思います。

projectを作ります。統合環境を立ち上げて、project→new projectを選びます。project名、保存フォルダ、MCU名、クロック周波数を書き込むと、.apasを作る エディタが現れます。ここで、ファイルを全セーブしてフォルダを見てみましょう。project→save project As... で保存できます。

続いて、プログラムを書きます。プログラムは次の形を取ります。
program プログラム名
 var 変数定義;
 procedure1(引数) //戻り値のないサブルーチンをprocedureといい、あるものをfanctionという
  var サブルーチン内変数定義;
 begin
  サブルーチンの内容
 end;
 function(引数):戻り値の型
  var
 begin
  関数の内容
 end;
begin //メインルーチン
  メインルーチンの内容
end. //ピリオドで終わるメインの終わり。

今の場合はサブルーチンと変数定義がないから、
program led8
begin
 DDRA:=$ff; //portAは出力 代入記号は:= $は16進数
 DDRB:=$ff;
 DDRD:=$ff;
 while true do begin // trueだから無限ループ
  portB:=%00000001; // %は2進表記
  Delay_ms(500); //500ms=0.5s待つ
  portB:=%00000010;
  Delay_ms(500);
  portB:=%00000100;
  Delay_ms(500);
  portB:=%00001000;
  Delay_ms(500);
  portB:=%00010000;
  Delay_ms(500);
  portB:=%00100000;
  Delay_ms(500);
  portB:=%01000000;
  Delay_ms(500);
  portB:=%10000000;
  Delay_ms(500);
 end;
end.

極めて効率の悪いプログラムですが中身がわかりやすいと思います。1ms単位でコントロールできる delay_ms() はありがたいライブラリです。
project→build でコンパイルするとdataディレクトリにhexファイルができます。
予定通りの動作をしました。




060424:ダウンロード・インストール・そして少しの調整

ダウンロードはこのページ http://www.mikroelektronika.co.yu/english/product/compilers/mikropascal_avr/index.htmから行います。同時にマニュアルも取り込みました。
インストールはデフォルトのまま行いました。このままでも良いのですが、新しく作成するプログラムがpascalのディレクトリにできますので、アンインストール したときに、作ったプログラムまで削除される危険がありますのでデータ専用に使っている別のディレクトリにpascalフォルダを作ってそこに入れることにしました。 したがって、examplesの内容もこの専用ディレクトリに移しています。
個々のプログラムは ¥pascal¥デバイス毎のディレクトリ¥プロジェクト別ディレクトリ¥プログラムファイル という形で保存されます。

統合環境のエディタはそのままではコメントに日本語が書けませんのでフォントをterminalに変更しました。同時に私の好みで行間を広げています。

統合環境からデバイスの書き込みができますが、私はChanさんのSPIブリッジライタを使っていますので、書き込みはDOS窓を開いて、avrspをドラッグして、その後に hexファイルをD&Dして書き込んでいます。スイッチの切り替えがなくデバイスは自動読み込みですからセットの手間がずいぶん楽です。また、メインで常用のWinAVRと 共通部分を多くしています。
マニュアルは英語ですから苦労しますが(私だけ?)このPDFファイルはcopyできないので、引用にも改めてキー入力の面倒さが加わります。他に参考にするところも ないと思いますので、このマニュアルだけが頼りなのですが....


TOPページへもどる