BASCOMの部屋
TOPページへもどる
BASCO-AVRが4kバイトまで書けるようになっています(demo版)。 Webページでも使っておられる方が増えてきたようです。もう一度勉強してみようかな、
と。エディタは以前は日本語が使えなかったと思うのですが今ではコメントに使えるようです。日本語好き(?)の私向きです。Cに比べると記述が冗長な感じですが、
便利なルーチンも用意されていて、楽しく書けるかもしれません。(2007.03.04)
開発環境:編集(edit)とコンパイルは専用のIDE(Integrated Development Environment)を使います。コンパイラがhexファイルを作ってくれますので、
プログラマは使い慣れたavrsp(x)にします。
BASCOMの文法:(調べたところから少しずつ書いていきます。間違いがあるかも...)
$regfile = "attiny2313.dat" 使用デバイスを書きます。2313DEF.dat At26def.dat m8def.dat m48def.dat など。
書式が統一されていないようです。
$crystal = 8000000 クロックを書きます。 waits の様な時間が関係する命令を使うときは正しく書く必要があります。
変数宣言 Dim a As byte a,b As byte の様にまとめて書けません。Dim a As Byte,b As Byte の様には書けます。
変数の型は、Byte -128〜+127
Integer -32768〜+32767
Word 0〜65535
Long -2147483648〜2147483647
Single 1.5 x105 〜 3.4 x 1038
Double 5.0 x1024 〜 1.7 x 10308
String String*10で9文字を確保します。nullが入ります。254文字まで。
配列は Dim a(10) で1から始まる10個の配列が作られます。1から始まることに注意。
関数やサブルーチンの中ではlocal変数が使えます。そのルーチンが終わったときにメモリは解放されます。
Local as Byte bit、配列は使えません。
ポートの入出力方向の指定(DDRD)
Config Portb=Output ポートBの全ビットを出力に指定します。
Config Portb=Input ポートBの全ビットを入力に指定します。
Config Portb=&H0F 上位4ビットは入力、下位4ビットは出力。1は出力、0は入力になります。2進数で書くと &B00001111 。
Config Portb.0=1 最下位ビットだけ出力に指定します。
ポートへの出力
Portb=123 Portb=&HFF Portb=&B10101010 Portb.1=1 (このときは1,0だけ) Portb=x (xはbyte型変数)
ポートからの入力
X=Pinb ポートBの8ビットを変数xに読み込みます。 決して、x=Portbではありません。注意!!
y=Pinb.1 ポートBのビット1を読み込みます。(1または0)
演算記号
+
-
*
/ 実数割り算
\ 整数の割り算。余りは無視されます。
MOD 剰余(整数の割り算の余り)
and ビット毎のAND
or ビット毎のOR
^ ビット毎のXOR (1,1=0 1,0=1 0,1=1 0,0=0 )
not ビット毎の否定
比較演算子
=
<
>
<>
<=
>=
IF文
if 〜 then
・・・・
elseif 〜 then
・・・・
else
・・・・
endif
if a=1 then portb.1=0 else portb.1=1 と1行に書いてもよろしい。
サブルーチン
Declare Sub Test(byval A As Byte , B1 As Byte) 宣言。サブルーチン使用前に宣言します。
byvalは値渡しで、書かなければ参照渡しになります。
Call Test(1 , Bb) サブルーチンの呼び出し
Sub Test(byval A As Byte , B1 As Byte) サブルーチンの定義を書きます
<サブルーチンの内容> 〃
End Sub 〃
割り込み処理
Enable Interrupts グローバル割り込み許可{sei()}
Enable Int0 Int0割り込み許可 割り込み名は ATtiny2313.DAT などの定義ファイルにあります。
<INT0 INT1 ICP1 OC1A OVF1 OVF0 URXC UDRE UTXC ACI PCINT
OC1B OC0A OC0B UCI_START UCI_OVFLW EERDY WDT>
On Int0 Label2 割り込み原因発生時の処理を定義します。 Nosaveオプションは使えます。
Label2: 割り込みサブルーチン名でなく、ラベルを使います。コロンが必要です。
<割り込み処理の内容>
Return ラベルへジャンプですから、returnが必要です。
Disable Interrupts グローバル割り込み禁止 {cli()}
Disable Int0 割り込み禁止
Special function registersの設定
timer/counterの設定、USARTの設定などは、ほとんど config 〜 で行います。
Config Timer0 = Timer , Prescale = 1
Start Timer0 など。 configと書けばメニューが表示されます。
configにカーソルをおいてヘルプを呼び出せます。
内蔵RC発振器の校正
osccal=100 と書きます。(はじめの方に書くのがいいでしょう)
校正値の100は avrsp -rf で求めます。