まず、IOポートに信号を出力させるという簡単なものから始めたいと思います。
今回用いるマイコンは、AVRの1200Aというマイコンです。
このマイコンには、クロック発生回路まで内蔵しているので
外部にクロック発生回路を必要としません。
(基本的には1200と同じですが、1200Aは内部クロックでの動作)
ICのピン配置は次のようになっています。
電源、リセット、クロック用ピン以外は、全てIOポートになっているという
わかりやすいICです。ポートは、B,Dの2種類あり、それぞれ8,7ピンあります。
このICを用いて、次のような回路を作りましょう。
マイコン回路といっても、ここまでシンプルになってしまいます。
Rは、300Ω程度がいいでしょう。ICは、直に基板につけるのではなく
ICソケットを使いましょう。これをしないとマイコンが書き換えられなくなってしまいます。
ここまでの回路ができたら、ハードウェアは完成です。
次は、マイコンを動かすソフトを作成していきます。
AVR Studioを起動してください。
「Project」からNewを選び、新しくプロジェクトを作成します。
「AVR Assember」を選ぶのも忘れないようにしましょう。
次に、アセンブラファイル自身を作成します。
「ファイル」から「New Text File」を選択します。
ここでは、以下のようなファイル名にしました。拡張子に「.asm」をつけるのを忘れないでください。
このファイルに次のような命令を書いてみましょう。
なお日本語は、「Edit」の「Font」から日本語のフォントを選ぶことで表示できます。
.include "1200def.inc" .def temp = r17 ; 一時ファイル
ldi temp,0xFF ; ポートBを出力に設定 out DDRB,temp ldi temp,0xFF ; ポートDを出力に設定 out DDRD,temp ldi temp,0x55 out PORTB,temp END: rjmp END ;**** End of File ****
プログラムの流れを見てみましょう。
.include "1200def.inc"
最初の「.include」は、1200マイコンの定数値の読み込みを行っています。
プログラム中に「DDRB」などという文字が出てきますが、その実際の数値を
「1200def.inc」ファイルに記述しています。
.def temp = r17 ; 一時ファイル
ここでは、tempという変数を定義しています。
本来は、「R17レジスタ」というようにレジスタ名を指定するものなのですが、
それではやりにくいので、「temp」という文字に置き換えています。
セミコロンを使うと、コメントになります。
ldi temp,0xFF
ldiは、レジスタに定数を代入する命令です。ここでは、0xFFという値を
temp変数(実際にはR17レジスタ)に入れます。
ldi temp,0xFF ; ポートBを出力に設定
out DDRB,temp
outは、指定されたIOアドレスに、指定されたレジスタの値を出力します。
ここでは、DDRBというレジスタにtempの値を書き込みます。
このDDRBですが、ポートBの入出力を指定するレジスタです。
1200マイコンには、前述の通りBとDの2ポートがあります。
IOポートの制御IOポートの制御に使うレジスタは、3種類あります。
|
ldi temp,0x55
out PORTB,temp
PORTBにtempの値が書き込まれ、PORTBのICピンに出力されます。
END:
rjmp END
rjmpは、指定された場所に移動するという意味です。
END:はラベルになっているので、「END」という場所は
ここであるということを示しています。
rjmp ENDによってENDと示された場所、つまり自分自身に戻るので
永久ループになります。これは、プログラムが終了すると、
その後の動作が不定になるのを防ぐためです。
Buildを押すと、コンパイルが行われます。
コンパイルが無事に通れば、シミュレータが立ち上がります。
すると、プログラムソースには次のような矢印が現れます。
F10を押すごとに1行づつ実行確認ができます。
シミュレータでは、そのときのレジスタの値、IO、Flush、EEPROMの値、
処理にかかる時間、ポートの値や、ステータスレジスタの値などを
表示することができます。
下の画面は、上記のプログラムを最後まで実行させたときの様子です。
PORTBの出力が01010101になります。
シミュレータで予定道理の動作であることを確認したら
実際にマイコンにデータを書き込み、基板に装着して
動作確認を行います。
パソコンとライターをシリアルケーブルでつなぎ、ライターソフトを立ち上げます。
(秋月のセットに入っていると思います。)
ライターソフトで書き込むマイコンの種類と、データ(HEX形式)を指定します。
ところで、このHEX形式のファイルは、AVR Studioでは作成されません。
AVR Studioでは、専用のエミュレータとのセット仕様を前提としているので
HEX形式のファイルが必要ないためです。
そこで、「AVR Assembler」を新たにATMELのHPからダウンロードし
コンパイルをします。ここでできたHEXファイルをライターに
書き込むことになります。
ファイルを指定してWriteを実行すると、Writeとベリファイが実行されます。
これで、マイコンの完成です。
このマイコンを基板に装着して電源を入れると、LEDが交互に点灯しているはずです。