BASCOM-AVRのプログラムシミュレーターはなかなか面白いのでもう少し遊んでみます。今回はシリアル通信のプログラムをシミュレートしてみました。AVRマイコンとパソコンとの間でデータのやり取りをするものです。実際にやろうとするとハードウェアの製作から始めなければなりませんが、シミュレーターを使えばどんなものかちょっと試してみることができます。
パソコンが名前を聞いてくるので、キーボードから自分の名前を入力すると、それが画面に表示されるというプログラムです。ファイル名は「name.bas」です。下記にBASCOM-AVR用のダウロードリンクを設けておきます。
1 | $regfile = "2313def.dat" | AT90S2313を使用する。 | |
2 | $crystal = 4000000 | クロック周波数を4MHzに設定。 | |
3 | $baud = 9600 | ボーレートを9600に設定。 | |
4 | Dim Name As String*10 | 文字列変数「Name」を定義。 | |
5 | Print "Welcome to AVR World!" | 画面に「Welcome to AVR World!」と表示。 | |
6 | Input "May I have your name?" , Name | 画面に「May I have your name?」と表示、 | |
変数「Name」の入力を待つ。 | |||
7 | Print "Hello " ; Name | 名前が入力されたら、 | |
「Hello」に続いて変数Nameを表示する。 | |||
8 | End | 終わり。 |
1行目は使用するマイコンICを決める記述ですが、今回はAT90S2313というICを使います。このプログラムはいつものATtiny26Lではうまく動きません。ICの内部回路が違うとのことです。2行目と3行目はICのクロック周波数とボーレート(シリアル通信の速度)を設定するものです。この部分はよくわからないので、とりあえず今回はネットで見つけたサンプルの通りにしておきました。
4行目の「Dim Name As String*10」というのは「Name」という名前の変数を定義する記述です。変数といってもこれは数字ではなく、中身が文字列の変数です。「As String*10」は最長10文字の文字列として定義するという意味です。
5行目の「Print」は画面に文字を表示する命令です。Printに続く「" "」(引用符)で囲まれた文字列(Welcome to AVR World!)を表示します。次の「Input」はキーボードからの入力を促す命令です。まず「" "」で囲まれた文字列(May I have your name?)を表示し、変数Nameに代入する文字列の入力を待ちます。ここでは名前を尋ねるという設定です。パソコンのキーボードから名前を入力するとそれが画面に表示されます。なお、「" "」の中の英文が正しい英語表現かどうかは知りません。
名前を入力した後キーボードの「Enter」キーを押すと、プログラムは7行目に進み、画面に「Hello 」、続いて変数Nameの中身すなわち今入力した名前が表示されます。このプログラム文の「Hello 」と「Name」の間の記号は「 ; 」(セミコロン)です。複数の文字列を並べて表示するときは「 ; 」で区切ります。
プログラムが書けたらこれまでと同じく保存と機械語への変換の操作を行い、プログラムシミュレーターを起動します。
シミュレーター画面の中ほどの青い領域がシリアル通信の画面になります。シミュレーションの開始ボタンを押すと、青い画面の一番上の行に「Welcome to AVR World!」、2行目に「May I have your name?」と表示されますので、パソコンのキーボードから自分の名前、たとえば「bbradio」と入力します。変数Nameは最大10文字と定義したので、10文字以上は入力できません。入力し終わったらエンターキーを押すと、3行目に「Hello bbradio」と表示されます。
シミュレーションを実行した後の状態を下記に示します。
もうひとつ、足し算のプログラムをやってみましょう。キーボードから2つの数字を入力すると、その合計を表示します。ファイル名は「addition.bas」です。
1 | $regfile = "2313def.dat" | AT90S2313を使用する。 | |
2 | $crystal = 4000000 | クロック周波数を4MHzに設定。 | |
3 | $Baud = 9600 | ボーレートを9600に設定。 | |
4 | Dim Number_a As Integer | インテジャー型変数「Number_a」を定義。 | |
5 | Dim Number_b As Integer | インテジャー型変数「Number_b」を定義。 | |
6 | Dim Sum As Integer | インテジャー型変数「Sum」を定義。 | |
7 | Input "a=" , Number_a | 画面に「a=」と表示、変数Number_aの入力を待つ。 | |
8 | Input "b=" , Number_b | 画面に「b=」と表示、変数Number_bの入力を待つ。 | |
9 | Sum = Number_a + Number_b | 入力されたNumber_a + Number_bを計算、 | |
結果を変数Sumに代入。 | |||
10 | Print "a+b=" ; Sum | 画面に「a+b=」と表示、 | |
続いて変数Sum(足し算の答え)を表示する。 | |||
11 | End | 終わり。 |
先のプログラムと同じ構造なのでほとんど説明の必要はないと思います。定数の型で「Integer (インテジャー)」というのは、AVRマイコンの場合、-32768から+32768までの整数を値に取ることのできる変数です。
シミュレーションを開始すると画面(青いところ)に「a=」と表示され、aの値を何にするか聞いてきます。パソコンのキーボードから適当な数字を入力して「Enter」キーを押すと、2行目に「b=」と表示されます。bの値を入力して「Enter」キーを押すと、3行目にaとbの合計が出ます。
プログラムの実行が終わった時点の画面のようすを下に示します。