
■ BASCOM-AVR (DEMO) の使用方法 ■ |
指示命令 (コンパイラ) |
● コンパイラに、コンパイル処理に関する指示を与えます。 |
$AESKEY |
16バイトのAES(先進暗号化規格)キーにより、バイナリ・コードを暗号化します。 |
$ASM |
BASICプログラムの中に、アセンブラのコードブロックを挿入します。 |
$BAUD |
UARTのボーレートを設定します。 |
$BAUD1 |
第2ハードウエアUARTに、ボーレートを設定します。 |
$BGF |
BASCOMグラフィックファイル、BGF(BMPを圧縮した画像)を組み込みます。 |
$BIGSTRINGS |
文字変数に、255バイト以上の文字列を使用できるように指示します。 |
$BOOT |
ブート・ローダーの、メモリー開始アドレスを指定します。 |
$CRYPT |
別売りのアドオンを使用して、BASICのプログラム・コードを暗号化します。 |
$CRYSTAL |
AVRの動作クロック周波数(クリスタル等)を指示します。 |
$DATA |
この命令に続くDATA行は、通常のデータ(デフォルト)であることを指示します。 |
$DBG |
デバッグの準備をして、ハードウェアUARTへのデバッグ出力を可能にします。 |
DBG |
ハードウェアUARTにデバッグ情報を出力します。 |
$DEFAULT |
変数等をデフォルトで、SRAM、XRAM、ERAMのどれに配置するかを指定します。 |
$EEPLEAVE |
EEPファイルを、更新またはファイルを消去しないように指示します。 |
$EEPROM |
この命令に続くDATA行は、EEPファイルへ格納するデータであることを指示します。 |
$EEPROMHEX |
バイナリーフォーマットの代わりに、インテルHEX形式でEEPファイルを作成します。 |
$EEPROMSIZE |
コンパイラに、AVRのEEPROMサイズの変更を指示します。 |
$EXTERNAL |
ライブラリから、アセンブラ・ルーチンを組み込むように命じます。 |
$FILE |
コンパイル後に出力されるファイルの名前を変更します。 |
$FORCESOFTI2C |
Xmega,XtinyのTWIで、ソフトウェアI2Cライブラリを使用するように強制します。 |
$FRAMECHECK |
各スタックに必要な容量を決めるために、この命令を使用します。 |
$FRAMEPROTECT |
割り込みによるフレーム領域の保護を、有効または無効にします。 |
$FRAMESIZE |
フレーム領域の容量を設定します。(ローカル変数と内部処理に使用するメモリー) |
$HWCHECK |
各スタックに必要な容量を決めるために、この命令を使用します。 |
$HWSTACK |
ハードウェア・スタックの容量を設定します。(スタック ポインタが使用するメモリー) |
$INC |
DATA文の代わりに、ファイルのデータをプログラム内に組み込みます。 |
$INCLUDE |
現在の位置に、アスキー形式のプログラム・ファイルを組み込みます。 |
$INITMICRO |
スタートアップ時に、初期設定等のユーザ・ルーチンを呼び出します。 |
$LCD |
LCDをBasモードで接続した場合に、LCDに割り当てるアドレスを指定します。 |
$LCDPUTCTRL |
LCD制御命令文の処理を、オリジナルのアセンブラ・ルーチンで行います。 |
$LCDPUTDATA |
LCD表示命令文の処理を、オリジナルのアセンブラ・ルーチンで行います。 |
$LCDRS |
LCDをBasモードで接続した場合に、RSに割り当てるアドレスを指定します。 |
$LCDVFO |
LCD命令で、HD44780仕様LCD互換VFD用の、Enable信号を出すように命じます。 |
$LIB |
使用されるライブラリ・ファイルを、コンパイラに知らせます。 |
$LOADER |
ブート・ローダーの、メモリー開始アドレスを指定します。 |
$LOADERSIZE |
ブート・ローダーが使用する、メモリー領域の大きさを指定します。 |
$MAP |
デバッグ用リポートに、ラベル情報を作成します。? |
$NOCOMPILE
|
このファイルは、コンパイルしないように命じます。 |
$NOFRAMEPROTECT |
割り込みによるフレーム領域の保護を、無効にします。 |
$NOINIT |
コンパイラに、初期化コードを生成しないように命じます。 |
$NORAMCLEAR |
リセット時に、SRAMをクリア(すべてに0を書き込む)しないように命じます。 |
$NORAMPZ |
[RAMPZ]レジスターをクリアする機能を無効にします。 (フラッシュの節約) |
$PROG |
AVRの、ロック・ビット および ヒューズ・ビットを書き込みます。 |
$PROGRAMMER |
BASICプログラムから、プログラマー(ライター)を選択します。 |
$PROJECTTIME |
プログラム・ソースの開発に費やした時間を追跡します。 |
$REDUCEIVR |
使用しない割り込みがある場合に、ジャンプ・テーブルを小さくするようにします。 |
$REGFILE |
使用するAVRデバイスに合わせて、レジスタ・ファイルを指定します。 |
$ROMSTART |
プログラムの、作成開始アドレスを指定します。 |
$SERIALINPUT |
シリアル入力命令で、自作のアセンブラ入力ルーチンを使用するように命じます。 |
$SERIALINPUT1 |
第2UART用入力命令で、自作のアセンブラ入力ルーチンを使用します。 |
$SERIALINPUT2LCD |
シリアルポートへのエコーバック送信の代わりに、LCDへ表示します。 |
$SERIALOUTPUT |
シリアル出力命令で、自作のアセンブラ出力ルーチンを使用するように命じます。 |
$SERIALOUTPUT1 |
第2UART用出力命令で、自作のアセンブラ出力ルーチンを使用します。 |
$SIM |
プログラムのシミュレーションを行う場合に、WAIT命令の待ち時間を無くします。 |
$SOFTCHECK |
各スタックに必要な容量を決めるために、この命令を使用します。 |
$SWSTACK |
ソフトウェア・スタックの容量を設定します。(受け渡しアドレスを記憶するメモリー) |
$TIMEOUT |
ハードウェア制御のUART0およびUART1で、タイムアウト検出を可能にします。 |
$TINY |
SRAMのないAVR(Tiny11)等で、スタックメモリーを使用しないように指示します。 |
$WAITSTATE |
動作速度の遅い外部メモリーのために、ALE信号にWAITを投入します。 |
$XA |
外部メモリーへのアクセスを、有効にするように指示します。 |
$XRAMSIZE |
外部メモリーの、メモリー容量を指定します。 |
$XRAMSTART |
外部メモリーの、スタートアドレスを指定します。 |
$XTEAKEY |
16バイトのXTEAキー(ブロック暗号)により、バイナリ・コードを暗号化します。 |
REM |
コンパイラに、コメント行であることを知らせます。 |
#IF #ELSE #ENDIF |
条件を満たしている部分のコードだけをコンパイルします。(条件付きコンパイル) |
DEBUG |
デバッグ・モードをONまたはOFFに切り替えます。(変数をシリアル・ポートに出力) |
CONFIG ERROR |
コンパイラに、指定した番号のエラーが発生しても無視するように指示します。 |
$AESKEY |
一覧へ戻る |
16バイトのAES(先進暗号化規格)キーにより、バイナリ・コードを暗号化します。
書式 |
$AESKEY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 |
注釈 |
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 = 16個(16バイト)の暗号鍵。 |
・$AESKEYは、128ビットの鍵を形成する16個(16バイト)のパラメータを受け入れます。
・コードがコンパイルされると、出力されるバイナリ・コードは提供された鍵で暗号化されます。
・ブートローダは、フラッシュメモリーに書き込む前に、AESを使用してバイナリ・ファイルを
復号化することができます。
※ バイナリ・ファイルだけが暗号化されており、HEXファイルは暗号化されていません!
※ 暗号化されたプログラムをシミュレートすることはできません。
※ このオプションは、プロジェクトの準備ができてから追加してください。
サンプルプログラムの[Samples\boot\xmega_dos_boot_AES.zip]を参照してください。
これは、AESの復号化を備えたXmega用のブート・ローダーです。
|
$ASM |
一覧へ戻る |
BASICプログラム中に、アセンブラで書かれた命令文のブロックを挿入します。
書式 |
$asm
アセンブラのプログラムを記載
$end Asm |
注釈 |
なし |
・ほとんどのアセンブラ・ニーモニックは、$asm命令を使用しなくても、コンパイラに認識されます。
・ただし、SUB、SWAP、CALL、OUT 命令は、BASICの予約語なので例外です。
・これらを使用するためには、(!)エクスクラメーション・マークを命令の前に付けます。
|
(例) |
|
Dim a As Byte At &H60 |
' 変数aは、アドレス&H0060番地に格納されます。 |
Ldi R26 , $60 |
' アドレスの下位(LSB)をR26にセットします。 |
Ldi R27 , $00 |
' アドレスの上位(MSB)をR27にセットします。 |
Ld R1, X |
' R1にアドレス$0060のメモリー内容を読み込みます。 |
!SWAP R1 |
' R1の上位4ビットと下位4ビットを交換します。 |
|
・もう一つの方法は、$asm(アセンブラ・ブロック命令)を使用します。
・$asmは、$end Asmと、対で使用します。
|
(例) |
|
$asm |
' アセンブラ・ブロックの開始を宣言します。 |
Ldi R26 , $60 |
' アドレスの下位(LSB)をR26にセットします。 |
Ldi R27 , $00 |
' アドレスの上位(MSB)をR27にセットします。 |
Ld R1, X |
' R1にアドレス$0060のメモリー内容を読み込みます。 |
SWAP R1 |
' R1の上位4ビットと下位4ビットを交換します。 |
$end Asm |
' アセンブラ・ブロックの終了を宣言します。 |
|
|
$BAUD |
一覧へ戻る |
AVRに搭載されている、ハードウェアUARTの通信速度(ボーレート)を設定します。
書式 |
$baud = value |
注釈 |
value = ボーレートを数値で設定します。 |
・ボーレートは、コンパイラの[Options]→[Communication]の[baudrate]からも設定が可能ですが、
$BAUD命令が優先されます。
・この命令がコンパイルされると、ポートの兼用ピンがUART用に切りかわります。
(AVR AT90S8535では、PD0がRXDに、PD1がTXDに切りかわります)
・AVRのデバイスにより、UARTの通信パラメータが固定されている場合は、設定の必要はありません。
(パリティー無し、データ・ビット8、ストップビット1)
・USARTを搭載し、通信パラメータが変更できるデバイスは、CONFIG COM1〜4命令でフレーム形式を
設定する必要があります。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
$baud = 9600 |
' ボーレートを9600ボーに設定。 |
Print "Hello" |
' ターミナルに"Hello"の文字を出力。 |
End |
' プログラムの終了。 |
|
・ボーレートは、使用するクロック周波数に依存しますので、正確なボーレートが必要な場合は、
ボーレートの倍数にあたる水晶を使用します。
|
$BAUD1 |
一覧へ戻る |
AVRに搭載されている、第2ハードウェアUARTの、通信速度(ボーレート)を設定します。
書式 |
$baud1 = value |
注釈 |
value = ボーレートを数値で設定します。 |
・AVRには、2つのUARTを搭載しているデバイスがあるので、2番目のUARTにボーレートを設定します。
(Mega161、Mega162、Mega103、Mega128 など)
・詳細は、$BAUD命令を参照。
△ 動作未確認
|
$BGF |
一覧へ戻る |
BASCOMグラフィックファイル、BGF(BMPを圧縮した画像)を組み込みます。
書式 |
$bgf = "file" |
注釈 |
"file" = 組み込むBGFファイルのファイル名。 |
・$BGFは、BMP画像を付属のツール「グラフィック・コンバーター」により圧縮された、BGFファイルを
プログラムに組み込みます。
・BGFファイルを表示するためには、SHOWPIC命令を使用してください。
・グラフィック・LCD・コントローラは、T6963C、SED、KS0108 に対応。 その他、メジャーなLSIは、
カスタム・ドライバで対応するようです。
|
$BIGSTRINGS |
一覧へ戻る |
文字変数に、255バイト以上の文字列を使用できるように指示します。
・文字変数に格納できる文字列は、デフォルトで最大254バイトまでです。
・この命令によって、最大65535バイトまでの文字列が使用できるようになります。
・チップに十分なメモリー(SRAM)が必要です。
|
$BOOT |
一覧へ戻る |
ブート・ローダーの、メモリー開始アドレスを指定します。
書式 |
$boot = address |
注釈 |
address = ブート・ローダーの、メモリー開始アドレスを指定します。 |
・新しいAVRチップは、フラッシュ・メモリーの上部に、特別のブート・セクションを持っています。
・ヒューズ・ビットの設定によって、ブート・セクションのコード・サイズを選択することができます。
・そして、コード・サイズはブート・ローダーのアドレスを決定します。
△ 動作未確認
|
$CRYPT |
一覧へ戻る |
別売りのアドオンを使用して、BASICのプログラム・コードを暗号化します。
書式 |
$CRYPT data |
注釈 |
data = 暗号化されたプログラム・コード。 |
・プログラムによっては、コードの一部分だけを公開したい場合があります。
・他の人のためのコードを開発する人や、コードの一部を隠す必要がある人もいます。
・たとえば、パスワードがある場合などです。
・このアドオンを使用すると、コードの一部を暗号化することができます。
・IDEがコードを暗号化し、コンパイラがこの暗号化されたコードを処理することができます。
・これは、AES暗号を使用します。
・暗号化を使用するには、商用版のアドオンが必要です。
・Bascom 2.0.5.0以降のすべてのバージョンで$crypt行の解読の処理はできるので、コードの暗号化を
行いたい場合にのみ商用版のアドオンが必要です。
※ 一度暗号化されると、ソースコードを元に戻すことはできません。
※ したがって、コードを暗号化する前に、あなたのソースコードのバックアップを作成してください。
※ 一般的には、完成品にのみ使用してください。
※ 暗号化されたコードにエラーが含まれていると、$CRYPT行を指すエラーメッセージが表示されます。
※ このオプションは、デフォルトでは使用が有効になっていません。
※ このオプションを有効にするライセンスを購入する必要があります。
※ また、作成したプログラムの販売にはBASCOMのシリアルナンバーが必要です。
(例)
$CRYPT 6288E522B4A1429A6F16D639BFB7405B
$CRYPT 7ABCF89E7F817EB166E03AFF2EB64C4B
$CRYPT 645C88E996A87BF94D34726AA1B1BCCC
$CRYPT 9405555D91FA3B51DEEC4C2186F09ED1
$CRYPT 6D4790DA2ADFF09DE0DA97C594C1B074
|
$CRYSTAL |
一覧へ戻る |
AVRの動作クロック周波数(クリスタル等)を指示します。
書式 |
$crystal = value |
注釈 |
value = AVRの動作クロック周波数(クリスタル等)を、数値で設定します。 |
・クロック周波数は、コンパイラの[Options]→[Compiler]→[Communication]の[Frequency]からも
設定が可能ですが、$CRYSTAL命令が優先されます。
・この命令は、シリアル通信のボーレートや、WAIT命令の待ち時間に影響するので、必ずプログラムの
最初で設定して下さい。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
$baud = 9600 |
' ボーレートを9600ボーに設定。 |
Print "Hello" |
' ターミナルに"Hello"の文字を出力。 |
End |
' プログラムの終了。 |
|
|
$DATA |
一覧へ戻る |
この命令に続くDATA行は、通常のデータ(デフォルト)であることを指示します。
・通常(デフォルト値)、DATA行のデータは、READ命令で変数に読み込むことができます。
・AVRの内蔵EEPROMへ、固定値を用意する$EEPROM命令を実行した場合は、後に続くDATA行が
EEPROM用になるため、それを通常(デフォルト値)に戻すために$DATA命令を実行します。
|
$DBG |
一覧へ戻る |
デバッグの準備をして、ハードウェアUARTへのデバッグ出力を可能にします。
・デバッグと言う表現ではありますが、実際の用途は、フレーム・スペースとハードウェア/ソフトウェア・
スタックの、適切な容量を計算するのが目的のようです。
・まず、プログラムのトップへ$DBG命令を加え、すべてのサブルーチンと関数ルーチンに、DBG命令を
加えます。
・プログラムが実行されると、ハードウェア・スタックには「H」(&H48)、ソフトウェア・スタックには「S」
(&H53)、フレーム・スペースには「F」(&H46)の文字で、処理前のメモリーを埋め尽くします。
・プログラムが終了した時点で、メモリー上の文字が上書きされている分、スタック等が使われた
容量だとわかる仕組みです。
・同時に、シリアル出力へ、[Stack analyzer]用のログ・ファイルが出力されるようですが、うまく動作
しなかったので省略します。(今後の課題です)
△ 動作未確認
|
DBG |
一覧へ戻る |
ハードウェアUARTにデバッグ情報を出力します。
・詳細については、$DBGを参照してください。
|
$DEFAULT |
一覧へ戻る |
変数等をデフォルトで、SRAM、XRAM、ERAMのどれに配置するかを指定します。
書式 |
$default type |
注釈 |
type = Sram , Xram , Eram いずれかを選択します。 |
・通常、宣言された変数は、AVR内蔵のSRAMに配置されます。
・「Dim B As Xram Byte」 この命令では、XRAMへ配置されます。
・すべての変数を、XRAMやERAMに配置したい場合は、$DEFAULT命令を使用します。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
$default Xram |
' 変数の配置メモリーをXRAMに変更。 |
Dim A As Byte , B As Byte |
' XRAMに変数AとBを宣言する。 |
$default Sram |
' 変数の配置メモリーをSRAMに戻す。 |
End |
' プログラムの終了。 |
|
|
$EEPLEAVE |
一覧へ戻る |
EEPファイルを、更新またはファイルを消去しないように指示します。
・EEPファイルは、プログラムの書き込みと同時に、EEPROMにもあらかじめ必要なデータを書き込む
ためのファイルです。 (.EEP拡張子のファイル)
・コンパイル時に、$EEPROM命令等で自動的に作成されるか、別のツールで用意します。
・この$EEPLEAVE命令は、別のツールでEEPファイルを用意した場合に、コンパイラがEEPファイルを
更新したり消去しないように指示します。
|
$EEPROM |
一覧へ戻る |
この命令に続くDATA行は、EEPファイルへ格納するデータであることを指示します。
・EEPROMへは、WRITEEEPROM命令で書き込みができますが、あらかじめ用意された複数の
データを、プログラムの書き込みと同時に、EEPROMへも書き込むことができます。
・このEEPROM用データは、EEPファイル(.EEP拡張子)に格納する必要があります。
・$EEPROM命令に続くDATA行は、EEPROM用のデータになり、EEPファイルに格納されます。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
$baud = 9600 |
' ボーレートを9600ボーに設定。 |
Dim B As Byte |
' 変数BをByte型で宣言。 |
Readeeprom B , 0 |
' EEPROMの0000番地から1Byteを、変数Bへ読み込む。 |
Print B |
' ターミナルに、Bの内容を出力。 |
End |
' プログラムの終了。 |
$eeprom |
' この後のDATA行は、EEPROM用であると宣言する。 |
Data 1 , 2 , 3 |
' EEPROMへ用意するデータ。 |
$data |
' DATA行の扱いを通常に戻す。 |
End |
' プログラムの終了。 |
|
|
実行結果
・EEPROMの0000番地から、&H01,&H02,&H03の3バイトが書き込まれる。
・ターミナルに、EEPROMの0000番地の内容 1が表示される。 |
|
$EEPROMHEX |
一覧へ戻る |
バイナリーフォーマットの代わりに、インテルHEX形式でEEPファイルを作成します。
・$EEPROM命令に続くDATA行は、EEPROM用のデータになり、EEPファイルに格納されます。
・EEPファイルは、デフォルトでバイナリーファイルですが、STK500を使う時には、インテルHEX形式の
ファイルが必要になります。
・$EEPROM命令の後に、$EEPROMHEX命令を加えると、インテルHEX形式になります。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
End |
' プログラムの終了。 |
$eeprom |
' この後のDATA行は、EEPROM用であると宣言する。 |
$eepromhex |
' EEPファイルを、インテルHEX形式で作成。 |
Data 1 , 2 , 3 |
' EEPROMへ用意するデータ。 |
$data |
' DATA行の扱いを通常に戻す。 |
|
|
EEPファイルは、下記の内容になります。 :03000000010203F7
:00000001FF |
|
$EEPROMSIZE |
一覧へ戻る |
コンパイラに、AVRのEEPROMサイズの変更を指示します。
書式 |
$eepromsize = value |
注釈 |
value =EEPROMのサイズ。(バイト単位) |
・AVRはEEPROMを内蔵しています。
・WRITEEEPROMおよびREADEEPROM命令を使用して、EEPROMに書き込みまたは読み出しが
できます。
・ERAM疑似変数を使用して、EEPROMを読み書きすることもできます。
・外部EEPROMおよびFM24C16やFM25C256などの代わりのEEPROMライブラリを使用する場合、
内部EEPROMを上書きできます。
・すべてのEEPROMルーチンは外部EEPROMを使用します。
・このようにして、AVR内部で使用可能なEEPROMよりも大きなEEPROMを使用できます。
・または、ラムトロン社のFRAM EEPROMなどの、より高速なEEPROMも使用できます。
・これらのEEPROMはSRAMと同じくらい高速で、ほぼ無制限に書き込むことができます。
・外部EEPROMと$EEPROMSIZE命令を使用する場合、サポートされている書き込み器が
このEEPROMに書き込めないことに注意してください。
・これらは内部のEEPROMを想定しています。
|
$EXTERNAL |
一覧へ戻る |
ライブラリから、アセンブラ・ルーチンを組み込むように、コンパイラーに命じます。
書式 |
$external Myroutine |
注釈 |
Myroutine =アセンブラ・ルーチンの名前を指定します。 |
・ライブラリー・ファイルに、アセンブラ・ルーチンを置くことができます。
|
$FILE |
一覧へ戻る |
コンパイル後に出力されるファイルの名前を変更します。
書式 |
$file = "file.bin" |
注釈 |
"file.bin" = 出力するファイル名を指定します。 |
・コンパイル後に出力されるファイルの名前は、初期値の場合、開いているプログラムのファイル名と
同じです。
・つまり、プログラム名が"mytest.bas"であれば、出力されるファイルはすべて"mytest"を基本とした
名前が付きます。
・場合によっては、出力するファイルの名前を変更したい場合があります。
・$FILE命令を使用すると、この基本となる名前を変更できます。
※ IDEはプログラムの基本名を使用するため、シミュレーションや自動書き込みは動作しません。
※ $FILEで変更すると、ファイルの場所がわからなくなる可能性があります。
|
$FORCESOFTI2C |
一覧へ戻る |
Xmega,XtinyのTWIライブラリの代わりに、ソフトウェアI2Cライブラリを使用するように強制します。
・Xmegaには通常、ハードウェアTWIインターフェイスが備わっていますが、他のピンを使用した
ソフトウェアI2Cを使用したい場合にこの命令を使用します。
・必要なライブラリ: $lib "i2c.lbx"
※ ソフトウェアI2CとハードウェアTWIを併用することはできません。
※ したがって$forcesofti2c命令を使用する場合は、TWIのチャネルを追加することはできません。
|
(例) |
|
Const Twi_adr = 0 : Const Twi_ch = 0 |
' [ライブラリ内のダミー] |
$forcesofti2c |
' ソフトウェアI2Cライブラリを強制的に使用する。 |
$lib "i2c.lbx" |
' ソフトウェアI2C用のライブラリを上書きする。 |
Config I2cdelay = 1 |
' ソフトウェアI2CのSCLクロック速度を設定する。 |
Config Scl = Portb.1 |
' I2CのSCL線を接続するポートピンを設定する。 |
Config Sda = Portb.0 |
' I2CのSDA線を接続するポートピンを設定する |
I2cinit |
' I2CバスのSCL,SDAラインを初期化する。 |
|
※ $forcesofti2c命令の後に、I2Cライブラリ名を組み込むことが重要です。
※ コードの早い段階で組み込みを行い、ハードウェアTWIレジスタを使用しないことも重要です。
したがって、CONFIG TWIは使用しないでください。
※ ソフトウェアI2C を使用する場合は、「Twi_start」という名前の変数は必要ありません。
したがって、それを削除して、正しいコードが使用されているかどうかを確認できます。
Xmega,Xtinyのコードにはこの変数が必要で、これを含めないとエラーメッセージが表示
されます。
ソフトウェアI2Cの実装ではそれは必要なく、この変数を削除してもエラーメッセージは出ない
はずです。
|
$FRAMEPROTECT |
一覧へ戻る |
割り込みによるフレーム領域の保護を、有効または無効にします。
書式 |
$frameprotec = value |
注釈 |
value = 0:無効 , 1:有効 |
・初期値では、フレーム保護はオフになっています。
・ユーザー関数やサブルーチンがbyvalでパラメーターを渡すと、コピーが作成されてユーザーの
関数やサブルーチンに渡されます。
・割り込みが実行され、byvalで渡されたパラメーターを使用してユーザーの関数やサブルーチンを
呼び出すと、その値が破損する可能性があります。
・この機能を有効にすると、コンパイラは変数を渡す前に割り込みを無効にし、ユーザーの関数や
サブルーチンの内部で割り込みを有効にします。(割り込みが有効になっている場合)
・これにより、他のユーザー関数やサブルーチンを呼び出している割り込みによって、値が破損
することがなくなります。
・割り込み内部からユーザの関数やサブルーチンを呼び出さない場合は、$frameprotect命令を
省略するか、[0]に設定してコードを削減することができます。
・バージョン2075では、コンパイラには初期値としてフレームの保護機能があり、
$NOFRAMEPROTECTは無効にする機能として動作しました。
・$NOFRAMEPROTECTは引き続き使用できますが、2076では初期値でオフになっており、
推奨される切り替えは$FRAMEPROTECT = 0 または 1 です。
・フレーム保護を有効にすると、_FPROTECT という名前の内部定数が[1]に設定されます。
・ASMライブラリを呼び出すユーザー関数がある場合、[I]フラグを復元するコードを含める必要が
あります。
・ユーザー・ライブラリのサンプル[bcd.lib]では、次のコードでこれを実演しています。
#if _fprotect
Out Sreg , R3 ; Restore I Flag
#endif
|
$FRAMESIZE |
一覧へ戻る |
フレーム領域の容量を設定します。
書式 |
$framesize = value |
注釈 |
value = 領域の容量を、数値で設定します。 |
・サブ ルーチンまたは関数内で使用される、一時的なローカル変数は、このフレーム領域で確保
されたメモリーに格納されます。
・たとえば、サブ ルーチン内で、インテジャー型変数が3つと、10文字の文字変数を宣言した場合、
(2X3)+(10+1)=17バイトのフレーム領域が必要となります。
・さらに、INPUT、STR(x)、VAL(x) などの命令を使用すると、内部の変換ルーチンが最大で16バイトの
フレームメモリーを使用します。
・よって、この場合は17+16=33バイトの領域を、確保する必要があります。
(初期値では、24バイトに設定されています)
・サブ ルーチンまたは関数プログラムが終了した時、フレーム領域のメモリーは解放されます。
・フレーム領域は、コンパイラの[Options]→[Compiler]→[Chip]の[Framesize]からも設定が可能ですが、
$FRAMESIZE命令が優先されます。
|
$HWSTACK |
一覧へ戻る |
ハードウェア・スタックの容量を設定します。
書式 |
$hwstack = value |
注釈 |
value = 領域の容量を、数値で設定します。 |
・AVRのスタック ポインタ(SP)が使用するメモリー領域です。
・GOSUBまたはCALL命令を使用する場合に、戻りのアドレスを記憶するため、ハードウェア スタック
領域のメモリーを2バイト使用します。
・2つのGOSUB命令を入れ子にする場合は、2X2=4バイトを使用します。
・また、ほとんどの命令文でもハードウェア スタックが使われます。
・割り込み処理では、32バイトを必要とします。
(初期値では、32バイトに設定されています)
・RETURN命令により、ハードウェア スタックは戻され、プログラムはもとのアドレスから継続して
処理を再開します。
・ハードウェア・スタック領域は、コンパイラの[Options]→[Compiler]→[Chip]の[HW Stack]からも
設定が可能ですが、$HWSTACK命令が優先されます。
|
$INC |
一覧へ戻る |
DATA文の代わりに、ファイルのデータをプログラム内に組み込みます。
書式 |
$inc label , type , "file" |
注釈 |
label = データ行を参照するためのラベル名を指定します。 |
type = |
Size |
- データの始めに、2バイトのファイルサイズが付け加えられます。 |
Nosize |
- データのみが組み込まれます。 |
|
"file" = 組み込むデータのファイル名を指定します。 |
・少量のデータであれば、DATA文を使用して、記述により入力することも可能ですが、データ量が
多くなると、入力や修正に手間がかかります。
・この様な場合に、ファイルにまとめたデータを、直接プログラムへ組み込む作業を行います。
・$INC命令は、End命令の後に記述します。
・RESTORE命令で、ラベルを付けた$INC行に、データポインタをセットします。
・READ命令で、組み込まれたデータの先頭から順番に、データを読み込むことができます。
・組み込まれるデータは、プログラムと同じフラッシュメモリーに書き込まれるため、フラッシュメモリーの
容量を超える大きなデータは組み込めません。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
$baud = 9600 |
' ボーレートを9600ボーに設定。 |
Dim Size As Word , J As Word , A As Byte |
' 使用する変数を宣言。 |
Restore Dat |
' ラベル"Dat"行に、データポインタをセット。 |
Read Size |
' ファイルサイズを読み込み。 |
For J = 1 To Size |
' サイズ分の繰り返し処理。 |
Read A : Print A |
' データを読み込み、ターミナルへ出力。 |
Next |
' |
End |
' プログラムの終了。 |
$inc Dat , Size , "d:\test.bas" |
' 組み込むファイルを指定。 |
|
※ ファイル名は一例です。
|
$INCLUDE |
一覧へ戻る |
現在の位置に、アスキー形式のプログラム・ファイルを組み込みます。
書式 |
$include "file" |
注釈 |
"file" = 組み込むプログラムのファイル名を指定します。 |
・色々なプログラムで共用できるルーチンがある場合に、共用部分をファイルにしておき、必要な
場合にプログラムに組み込むことができます。
・共通部分に変更が出た場合に、モジュール・ファイルのみを修正すれば良いという利点があります。
・$INCLUDE命令が書かれた位置から、ファイルが組み込まれます。
・組み込むファイルは、アスキー形式の、BASCOM-AVRで使用できる命令文でなければなりません。
|
(例) |
|
Print "Main program" |
' ターミナルに "Main program" を出力。 |
$include "Test.bas" |
' プログラム "Test.bas" を組み込む。 |
Print "Return to Main program" |
' ターミナルに "Return to Main program" を出力。 |
End |
' プログラムの終了。 |
|
|
$INITMICRO |
一覧へ戻る |
スタートアップ時に、初期設定等のユーザ・ルーチンを呼び出します。
・通常BASCOM-AVRは、リセット動作後にメモリークリアーを行うので、ユーザープログラムが
開始されるまでに数mSの時間がかかります。
・この間ポートは入力状態のままになっているので、回路によっては不安定な状態が続きます。
・この様に、リセット後少しでも早く初期設定を行いたい場合は、$INITMICRO命令を使用します。
・$INITMICRO命令は、メモリークリア動作の前に、”_init_micro”というラベルを付けたルーチンを、
先行して実行します。
・このルーチン内で、ポートの方向や値をセットするなどの、初期設定を行うことができます。
・このルーチンの終わりには、RETURN命令が必要です。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
$crystal = 12800000 |
' クロック周波数を12.8MHzに設定。 |
$initmicro |
' 初期設定 ”_init_micro” を処理します。 |
Dim A As Byte |
' |
: |
' |
End |
' プログラムの終了。 |
' |
' |
_init_micro: |
' 初期設定ルーチン。 |
Config Portb = Output | ' ポートの設定。 |
Return |
' ”_init_micro” を終了。 |
|
※ 厳密にリセット時のポート状態を確定させるには、抵抗器でポートをプルアップまたはプルダウン
する必要があります。
|
$LCD |
一覧へ戻る |
LCDをBasモードで接続した場合に、LCDのデータ・レジスタに割り当てるアドレスを指定します。
書式 |
$lcd = value |
注釈 |
value = LCDデータ・レジスタの割り当てアドレスを指定します。 (&HC000) |
・外部メモリー(XRAM)を接続する場合、ポートの数が不足するので、LCDもデータバスに接続し、
Basモードで動作させます。
・この場合に、LCDのデータレジスタへ書き込みを行うための、メモリーアドレスを指定します。
・LCDのDB0-DB7は、データバスのD0-D7に接続し、アドレスデコーダで、LCDを選択します。
(4ビットモードでは、D4-D7だけを接続します)
・コントロールレジスタ(RS=L)のアドレスは、$LCDRS命令で設定します。
△ 動作未確認
|
$LCDPUTCTRL |
一覧へ戻る |
LCD制御命令文の処理を、オリジナルのアセンブラ・ルーチンで行います。
書式 |
$lcdputctrl = label |
注釈 |
label = LCD制御命令によって呼ばれる、アセンブラ・ルーチンの名前。 |
・LCDのカーソル制御等の命令において、特別な処理が必要な場合や、他の装置を使いたい場合に、
自作のアセンブラ出力ルーチンを使用することができます。
・BASIC命令文からのデータは、レジスター[R24]で受け渡されます。
△ 動作未確認
|
$LCDPUTDATA |
一覧へ戻る |
LCD表示命令文の処理を、オリジナルのアセンブラ・ルーチンで行います。
書式 |
$lcdputdata = label |
注釈 |
label = LCD表示命令によって呼ばれる、アセンブラ・ルーチンの名前。 |
・LCDへの文字表示等の命令において、特別な処理が必要な場合や、他の装置を使いたい場合に、
自作のアセンブラ出力ルーチンを使用することができます。 ・BASIC命令文からのデータは、レジスター[R24]で受け渡されます。
△ 動作未確認
|
$LCDRS |
一覧へ戻る |
LCDをBasモードで接続した場合に、LCDのコントロール・レジスタに割り当てるアドレスを指定します。
書式 |
$lcdrs = value |
注釈 |
value = LCDコントロール・レジスタの割り当てアドレスを指定します。 (&H8000) |
・外部メモリー(XRAM)を接続する場合、ポートの数が不足するので、LCDもデータバスに接続し、
Basモードで動作させます。
・この場合に、LCDのコントロールレジスタへ書き込みを行うための、メモリーアドレスを指定します。
・LCDのDB0-DB7は、データバスのD0-D7に接続し、アドレスデコーダで、LCDを選択します。
(4ビットモードでは、D4-D7だけを接続します)
・データレジスタ(RS=H)のアドレスは、$LCD命令で設定します。
△ 動作未確認
|
$LCDVFO |
一覧へ戻る |
LCD命令で、HD44780仕様LCD互換VFD用の、Enable信号を出すように命じます。
・HD44780仕様のLCD互換VFD(蛍光表示管)の中には、非常に短いEnableパルスを必要とする
ものがあります。
・LCD命令において、このデバイスにあった信号を出すように、指示します。
※ VFDの仕様書が無いため、詳細は省きます。
△ 動作未確認
|
$LIB |
一覧へ戻る |
新しく追加されたハードウェア等を制御するプログラムや、ユーザーのために作られた、ライブラリ・
ファイルの使用をコンパイラに知らせます。
書式 |
$lib "file" , "file" , ・・・ |
注釈 |
"file" =使用するライブラリ・ファイルの名前を指定します。 |
・ライブラリ・ファイルの作成方法は、省略します。
|
$LOADER |
一覧へ戻る |
ブート・ローダーの、メモリー開始アドレスを指定します。
書式 |
$loader = address |
注釈 |
address = ブート・ローダーの、メモリー開始アドレスを指定します。 |
・新しいAVRチップは、フラッシュ・メモリーの上部に、特別のブート・セクションを持っています。
・ヒューズ・ビットの設定によって、ブート・セクションのコード・サイズを選択することができます。
・そして、コード・サイズはブート・ローダーのアドレスを決定します。
・$BOOT命令もありますが、BASICでブート・ローダーを記述することが可能であるため、
$LOADER命令を使用するように勧められます。 (詳細未確認)
△ 動作未確認
|
$LOADERSIZE |
一覧へ戻る |
ブート・ローダーが使用する、メモリー領域の大きさを指定します。
書式 |
$loadersize = value |
注釈 |
value = ブート・ローダーが使用する、メモリー領域の大きさを指定します。 |
・コンパイラは、ブート・ローダーの存在を知らずに、大きなプログラムを作ってしまうと、
ブート・ローダーの上に、上書きしてしまう恐れがあります。
・このため、$loadersize命令で、ブート・ローダーのメモリー領域を、コンパイラに指示しておき、
プログラムが大きくなりすぎた場合に、エラー警告を出せるようにします。
△ 動作未確認
|
$MAP |
一覧へ戻る |
デバッグ用リポートに、ラベル情報を作成します。?
・$MAP命令は、リポートファイルの中に、アドレスを備えた各行番号へのエントリーを入れるでしょう。
(この命令の、意図、動作がわかりません!)
△ 動作未確認
|
$NOCOMPILE
|
一覧へ戻る |
このファイルは、コンパイルしないように命じます。
・プログラムを多数のファイルに分割し、バッチ処理をする場合、コンパイルが済んでエラーの無い
ファイルや、コンパイルを望まないファイルを、パスするように指示します。
|
$NOINIT |
一覧へ戻る |
コンパイラに、初期化コードを生成しないように命じます。
・ブート・ローダーを使用し、特別な初期化の処理が必要な場合に、この命令を使用します。
・初期化のプログラムは、自分で用意する必要があります。
△ 動作未確認
|
$NORAMCLEAR |
一覧へ戻る |
リセット時に、SRAMをクリア(すべてに0を書き込む)しないように命じます。
・SRAMは、通常リセット後にすべてクリアされ、00が書き込まれます。
・変数や配列は0に、文字変数は無しになります。
・バッテリーでバックアップされた回路では、起動時にSRAMをクリアしたくない場合があります。
・この命令を使用することで、バックアップされたメモリー内容は保持されます。
|
$NORAMPZ |
一覧へ戻る |
[RAMPZ]レジスターをクリアする機能を無効にします。 (フラッシュ・メモリーの節約)
・64KBを超えるメモリをーを搭載したAVRは、適切な64KBページを指すためにRAMPZレジスターを
設定する必要があります。
・RAMPZレジスターが使用されている場合、その後フラッシュへのアクセスとは異なる何かに
使用されると、RAMPZレジスターはクリアされます。
・BASCOMは[Z]レジスターを使用して、フラッシュ・メモリーまたはRAMメモリーにアクセスします。
・拡張メモリーの機能を備えたAVRは64KBを超えるRAMにアクセスできるため、このメモリーに
アクセスするときはRAMPZを設定またはクリアする必要があります。
・そうしないと、フラッシュのコードにアクセスした時にRAMPZが変更される可能性があり、その後
RAMにアクセスしてもメモリー内の適切な場所を指し示すことができません。
・ただし、このレジスターの設定には余分なコードが必要です。
・Mega128やMega256チップを選択して、作成したプログラムが64KB以内でこのRAMPZの処理を
必要としない場合は、この$NORAMPZ命令を使用して、フラッシュ・メモリーを節約することが
できます。
・あなたのAVRを確認してください。
|
$PROG |
一覧へ戻る |
AVRの、ロック・ビット および ヒューズ・ビットを書き込みます。
書式 |
$prog LB , FB , FBH , FBX |
注釈 |
LB
FB
FBH
FBX |
- Lockbit
- Fusebit
- Fusebit High
- Extended Fusebit |
ロック・ビット
ヒューズ・ビット 下位
ヒューズ・ビット 上位
拡張 ヒューズ・ビット |
|
・$PROG命令は、ロックおよびヒューズ・ビットの値が入った、".PRG"拡張子のファイルを作成します。
・プログラム書き込み時に、デバイスのロックおよびヒューズ・ビットの値と、".PRG"拡張子ファイルの
内容が比較され、違いがある場合にはデバイスのビットを書き換えます。
・したがって、新しいチップでは、ロックおよびヒューズ・ビットは自動的に書き込まれます。
・いくつかのチップは、FBHまたはFBXを持たないかもしれません。
・また、すべての値を書き込む必要が無いかもしれません。
・この場合は、値を記入しないでください。
|
(例) |
|
$prog &HFF , &HE0 , &HD9 , &H00 |
' すべてのビットを書き込みます。 |
$prog &H20 ,,, |
' これは Lockbit だけを書き込みます。 |
$prog ,,&H30, |
' これは Fusebit High だけを書き込みます。 |
|
・".PRG"拡張子のファイルが無い場合は、書き込みは行われません。
・プログラマーから直接ロックおよびヒューズ・ビットを書き換えることもできます。
|
$PROGRAMMER |
一覧へ戻る |
BASICプログラムから、プログラマー(ライター)を選択します。
書式 |
$programmer = value |
注釈 |
value = プログラマーを識別する番号を指定します。 |
・コンパイル後、プログラマーを起動する際に、選択が有効になります。
・コンパイラの[Options]→[Programmer]の[Programmer]からも選択が可能ですが、
$PROGRAMMER命令が優先されます。
value |
プログラマー |
0 |
AVR-ISP programmer(old AN 910) |
1 |
STK200/STK300 |
2 |
PG302 |
3 |
External programmer |
4 |
Sample Electronics |
5 |
Eddie Mc Mullen |
6 |
KITSRUS K122 |
7 |
STK500 |
8 |
Universal MCS Interface |
9 |
STK500 extended |
10 |
Lawicel Bootloader |
11 |
MCS USB |
12 |
USB-ISP I |
13 |
MCS Bootloader |
14 |
Proggy
|
|
value |
プログラマー |
15 |
FLIP (Atmel)
|
16 |
USBprog Programmer/
AVR ISP mkII (Atmel)
|
17 |
Kamprog for AVR
|
18 |
MyAVR MKII / AVR910
|
19 |
USBASP
|
20 |
JTAG MKII
|
21 |
STK600
|
22 |
ARDUINO
(using stk500v1 protocol)
|
23 |
ARDUINO V2
(using stk500v2 protocol)
|
24 |
MINI-MAX/AVR-C (BIPOM)
|
25 |
mySmart USB light STK500 mode
|
26 |
MCS UPDI |
|
|
|
|
$PROJECTTIME |
一覧へ戻る |
プログラム・ソースの開発に費やした時間を追跡します。
・この命令の唯一の目的は、プロジェクト(プログラム・ソース)開発の時間を追跡することです。
・それは、コンパイルの結果に影響しません。
・IDE(エディタ)が$PROJECTTIME命令を見つけると、あなたがコード制作に費やした時間を
カウントします。
・プログラムのコードを保存するたびに、更新された値が表示されます。
・IDEは$PROJECTTIME命令の後に値を自動的に挿入します。
・あなたがソースの入力を始めるとタイマーのカウントが始まります。
・2分間キー操作がない場合は、このカウントは停止します。
・入力を始めるとすぐに自動的に開始されます。
・したがって、1分ごとに文字を入力すると、1分ごとに1分の作業がカウントされます。
・時間がカウントされて、分単位で表示されます。
・ソース内のカウント値を編集することは可能ですが、ソースを保存すると同時に値が更新されます。
|
$REDUCEIVR |
一覧へ戻る |
使用しない割り込みがある場合に、割り込みのジャンプ・テーブルをできるだけ小さくして、フラッシュ
メモリーの容量を節約するようにコンパイラに指示します。
・CPUのフラッシュ・メモリーは、常にIVR(割り込みベクター・テーブル)から始まります。
・ユーザーのプログラム・コードは、このジャンプ・テーブルの後に配置されます。
・このテーブルには、各割り込みに対する実行アドレスが保存されています。
・割り込みが発生すると、CPUはテーブル内の特定の固定されたアドレスにジャンプします。
・アドレスは、割り込みの種類とチップによって異なります。
・たとえば、Mega88には25個の割り込みソースがあり、それらは$REGFILEで指定するdatファイル内で
見つけることができます。
INTname1=INT0,$001,EIMSK.INT0,EIFR.INTF0
INTname2=INT1,$002,EIMSK.INT1,EIFR.INTF1
INTname3=PCINT0,$003,PCICR.PCIE0,PCIFR.PCIF0
・・・
・INT0が最初にあり、そのアドレスは$001でこれは&H0001番地です。
・したがって、INT0が発生すると、CPUは1番地ににジャンプします。
・割り込みのINT0(ON INT0)を有効にしなかった場合、コンパイラはRETI命令を挿入しますが、
コードに何も影響はありません。
・割り込みを有効にすると、コンパイラは割り込みルーチンへのJUMP命令を挿入します。
・割り込みの処理が終了すると、RETI命令によって割り込みが発生した時点の場所からCPUの処理を
続行させます。
・一番最初のアドレスにある割り込みだけを使用する場合は、テーブルの他のアドレスはすべて
RETI命令が投入されて、ユーザーのコードは&H1A($19の1つ後のアドレス)から開始します。
・それは特に悪いことではありませんが、より大きな割り込みテーブルを持つチップや、JUMP命令に
2ワードのテーブルを必要とするチップも存在します。
・この方法では、多くのフラッシュのスペースを無駄にします。
・$REDUCEIVR命令は、使用した割り込みのうち、最も高いアドレスを持つものを特定して、その次の
アドレスをユーザーのコードのスタート番地として使用します。
・つまり、INT0だけを使っていて$REDUCEIVR命令を使用すると、ユーザーのコードは&H2(2番地)から
始まることになります。
・この方法でフラッシュ・メモリーのコードのスペースを大幅に節約することができます。
・この機能が初期値で有効になっていないのは下記の理由によります。
・コードが割り込みを有効にしていて、ON <INT>に一致するものがない場合、CPUはユーザーの
コードにジャンプしてしまい、これはほとんどの場合確実に暴走を引き起こします。
・したがって、このオプションの働きをを理解した上で、プログラムが完成してから使用することを
お勧めします。
・いずれの場合もオプションが有効になっている場合は、アプリケーション全体を再テストしてください。
|
$REGFILE |
一覧へ戻る |
使用するAVRデバイスに合わせて、レジスタ・ファイルを指定します。
書式 |
$regfile = "file" |
注釈 |
"file" = レジスタ・ファイルの名前を指定します。 |
・レジスタファイルは、BASCOM-AVRのアプリケーション・ディレクトリーに格納されており、
それらは".DAT"拡張子が付いています。
・レジスタファイルの一覧表。 Regfile List
・レジスタファイルは、内部レジスタや割り込みアドレスのような、チップに関する情報を持っています。
・コンパイラの[Options]→[Compiler]→[Chip]の[Chip]からも選択が可能ですが、$REGFILE命令が
優先されます。
・$REGFILE命令は、プログラムの一番最初に記述しなければなりません。
|
(例) |
|
$regfile = "m8535.DAT" |
' AVRデバイスを"ATmega8535"に設定。 |
|
|
$ROMSTART |
一覧へ戻る |
プログラムの、作成開始アドレスを指定します。
書式 |
$romstart = address |
注釈 |
address = プログラムの、作成開始アドレスを指定します。 |
・ブートローダをサポートするための、新しい$LOADER命令を使用して下さい。
△ 動作未確認
|
$SERIALINPUT |
一覧へ戻る |
INPUT等のシリアル入力命令で、自作のアセンブラ入力ルーチンを使用するように命じます。
書式 |
$serialinput = label |
注釈 |
label = シリアル入力命令によって呼ばれる、アセンブラ・ルーチンの名前。 |
・INPUT等のシリアル入力命令において、特別な処理が必要な場合や、他の装置を使いたい場合に、
自作のアセンブラ入力ルーチンを使用することができます。
・受信したデータは、レジスタ (R24) で受け渡されます。
△ 動作未確認
|
$SERIALINPUT1 |
一覧へ戻る |
第2UART用のシリアル入力命令で、自作のアセンブラ入力ルーチンを使用するように命じます。
書式 |
$serialinput1 = label |
注釈 |
label = シリアル入力命令によって呼ばれる、アセンブラ・ルーチンの名前。 |
・$SERIALINPUT命令を参照。
△ 動作未確認
|
$SERIALINPUT2LCD |
一覧へ戻る |
シリアルポートへのエコーバック送信の代わりに、LCDへ表示します。
書式 |
$serialinput2lcd |
注釈 |
なし |
・この命令は、シリアルポートへのエコーバックの代わりに、LCDディスプレイへシリアル入力された
データをすべて転送します。
・また、PRINT文のようなシリアル出力命令も、LCDディスプレイ上で見ることができます。
|
$SERIALOUTPUT |
一覧へ戻る |
PRINT等のシリアル出力命令で、自作のアセンブラ出力ルーチンを使用するように命じます。
書式 |
$serialoutput = label |
注釈 |
label = シリアル出力命令によって呼ばれる、アセンブラ・ルーチンの名前。 |
・PRINT等のシリアル出力命令において、特別な処理が必要な場合や、他の装置を使いたい場合に、
自作のアセンブラ出力ルーチンを使用することができます。
・送信するデータは、レジスタ (R24) で受け渡されます。
△ 動作未確認
|
$SERIALOUTPUT1 |
一覧へ戻る |
第2UART用のシリアル出力命令で、自作のアセンブラ出力ルーチンを使用するように命じます。
書式 |
$serialoutput1 = label |
注釈 |
label = シリアル出力命令によって呼ばれる、アセンブラ・ルーチンの名前。 |
・$SERIALOUTPUT命令を参照。
△ 動作未確認
|
$SIM |
一覧へ戻る |
プログラムのシミュレーションを行う場合に、WAIT命令の待ち時間を無くします。
・コンパイラに付属のツール、プログラム・シミュレータを使用する際に、プログラム中にWAIT命令が
あると、長時間待たされてしまいます。
・また、LCD関連の命令にも、待たされることがありました。
・$SIM命令を記述しておくと、WAIT動作の処理が省かれるので、シミュレーションが早くなります。
・$SIM命令を削除し忘れて、チップをプログラムしようとした場合には、「$SIMが使用されている」
という警告を受けます。
|
$SWSTACK |
一覧へ戻る |
ソフトウェア・スタックの容量を設定します。
書式 |
$swstack = value |
注釈 |
value = 領域の容量を、数値で設定します。 |
・ソフトウェア スタック領域は、ローカル変数、および、サブ ルーチンに受け渡される変数が
格納されている、メモリーのアドレスを記憶するために使用されます。
・これらは、アドレスを記憶するために、変数ごとに2バイトのスタック領域を使用します。
・たとえば、サブ ルーチンに受け渡す変数が3つあり、新たにサブ ルーチン内でローカル変数を
5つ宣言した場合、(3X2)+(5X2)=16バイトのソフトウェア スタック領域を、設定する必要があります。
(初期値では、8バイトに設定されています)
・さらに、安全策として、内部で使用されるローカル変数のために、もう4バイトを加えて下さい。
・ソフトウェア・スタック領域は、コンパイラの[Options]→[Compiler]→[Chip]の[Soft Stack]からも
設定が可能ですが、$SWSTACK命令が優先されます。
|
$TIMEOUT |
一覧へ戻る |
ハードウェア制御のUART0およびUART1で、タイムアウト検出を可能にします。
書式 |
$timeout = value |
注釈 |
value = タイムアウトが発生するまでの期間を数値で設定します。(0〜2147483647) |
・INPUT命令などの、ハードウェア制御UARTを使用するシリアル入力では、データが入力されるまで
プログラムは待ち続けます。
・このとき、一定期間入力がない場合に入力待ちを中断して、次のプログラムへ処理を移らせるために、
タイムアウトを設定します。
・設定値は、大きな値ほどタイムアウトの起きる期間が長くなります。
・しかし、設定値は秒数を表すのではなく、AVRの動作クロックに影響される相対的な値です。
・また、INPUT命令では、(Enter)以外のキーが押されるたびに、タイムアウト値も設定された初期値に
戻されます。
・タイムアウトが発生した場合には、入力用の変数に0が入ります。
|
$TINY |
一覧へ戻る |
SRAMのないAVR(Tiny11)等で、スタック・メモリーを使用せずに、初期設定コードを生成するように
指示します。
・BASCOM-AVRは、ハードウェア・スタックおよびソフトウェア・スタックを、SRAMに依存します。
・アセンブラでプログラムを作る場合には、$TINY命令によってBASCOMを使うことができます。
・いくつかのBASCOM命令文は動作しますが、大部分は作動していません。
・将来のバージョンでは、BASCOM命令のサブセットをサポートし、SRAMのないチップでも
使えるようになるでしょう。
・Tinyのために、生成されたコードが、まだ最適化されていないことに注意してください。
・例えば、チップがそれをサポートしないので、いくつかのアセンブラ命令は動きません。
△ 動作未確認
|
$WAITSTATE |
一覧へ戻る |
動作速度の遅い外部メモリー(XRAM)のために、ALE信号にWAITを投入します。
・同じ働きをする、CONFIG XRAM命令を、使用するようにして下さい。
|
$XA |
一覧へ戻る |
外部メモリー(XRAM)へのアクセスを、有効にするように指示します。
・同じ働きをする、CONFIG XRAM命令を、使用するようにして下さい。
|
$XRAMSIZE |
一覧へ戻る |
外部メモリー(XRAM)の、メモリー容量を指定します。
書式 |
$xramsize = value |
注釈 |
value = 外部メモリー(XRAM)の、メモリー容量を指定します。 |
・外部メモリー容量は、コンパイラの[Options]→[Compiler]→[Chip]の[XRAM]からも設定が
可能ですが、$XRAMSIZE命令が優先されます。
・$XRAMSTARTが、$XRAMSIZEに先行することが重要です。
|
$XRAMSTART |
一覧へ戻る |
外部メモリー(XRAM)の、スタートアドレスを指定します。
書式 |
$xramstart = value |
注釈 |
value = 外部メモリー(XRAM)の、スタートアドレスを指定します。 |
・外部メモリー(XRAM)のスタートアドレスは、レジスターやSRAMの最終番地以降のエリアに設定します。
(デフォルトでは、内蔵SRAMの最終番地の、次のアドレスになっています)
・$XRAMSTARTが、$XRAMSIZEに先行することが重要です。
|
$XTEAKEY |
一覧へ戻る |
16バイトのXTEAキー(ブロック暗号)により、バイナリ・コードを暗号化します。
書式 |
$XTEAKEY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 |
注釈 |
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 = 16個(16バイト)の暗号鍵。 |
参照 |
$AESKEY , XTEAENCODE , XTEADECODE |
・$XTEAKEYは、128ビットの鍵を形成する16個(16バイト)のパラメータを受け入れます。
・コードがコンパイルされると、出力されるバイナリ・コードは提供された鍵で暗号化されます。
・ブートローダは、フラッシュメモリーに書き込む前に、XTEAを使用してバイナリ・ファイルを
復号化することができます。
・XTEAのエンコーダは32のラウンドを使用し、xtea.libで使用されているものと同じです。
参照:http://en.wikipedia.org/wiki/XTEA
※ バイナリ・ファイルだけが暗号化されており、HEXファイルは暗号化されていません!
※ 暗号化されたプログラムをシミュレートすることはできません。
※ このオプションは、プロジェクトの準備ができてから追加してください。
|
$HWCHECK , $SOFTCHECK , $FRAMECHECK |
一覧へ戻る |
各スタックに必要な容量を決めるために、この命令を使用します。
書式 |
$HWCHECK $SOFTCHECK $FRAMECHECK |
注釈 |
なし |
・プログラムでDIM命令を使用して変数を宣言する場合、RAMまたはSRAMの空き領域を必要とします。
・しかし、プログラムはさらに多くのRAM領域を必要とします。
・サブルーチンや関数を呼び出したりgosubを使用するたびに、CPUは呼び出しから戻った後に
どのアドレスに戻ればよいかを知る必要があります。
・このため、CPUはこのアドレスをハードウェア・スタックに保存しています。
・これに対してユーザーができることは何もなく、このハードウェア・スタックは、下へ下へと伸びて
いきます。
・基本的な命令の中には、呼び出しを必要としないコードにコンパイルされるものがあります。
・しかし、機械語の関数を呼び出すものもあり、その関数が他の関数を呼び出すこともあります。
・どの関数を呼び出すか、また何回呼び出すかは、選択したCPUや他のオプションによって異なります。
・また、変数のパラメータに依存する場合もあります。
・パラメータがサブルーチンや関数に渡されるときは、変数のアドレスが渡されます。
・これらはワード・アドレスであるため、変数ごとに2バイトを使用します。
・この受け渡しは、ソフト・スタックと呼ばれる領域で行われます。
・この領域は、ハードウェア・スタックの下の位置にあり、それはまた下に伸びていきます。
・使用するすべてのLOCAL変数も、2バイトのソフト・スタックを必要とします。
・BYVALでパラメータを渡すときや、LOCAL変数を作るときにも、一時的に領域が必要です。
・たとえば、コンパイラがsomestring変数に"abc"を代入すると、somestring変数は"abc"になり
内容が上書きされて"abc"の後にその内容を追加できなくなります。
(例) somestring = "abc" + somestring
・そのため、この文字列に新しいデータを代入する前に、まずsomestringの内容を保存する必要が
あり、このコピーにも領域が必要です。
・この領域は動的に作成されてフレーム領域に割り当てられ、それはソフトスタックの下に位置して
います。
・さて、ほとんどのプログラムでは、$DBGやいくつかの初期値を使用して値を決定することができます。
・しかし、問題があって、どのように設定しなければならないかを全く分からない場合は、$HWCHECK
オプションを使用することができます。
・まず、あなたのコードに "stackcheck.lib" という名前の特別なライブラリを組み込みます。
・次に、プログラムを実行し、コードのどこかで、生成された[_hw_lowest]変数の値を出力します。
・この変数は&HFFFFに設定され、呼び出しが行われるたびにスタックがこの値と比較されます。
・ハードウェア・スタック(SPLおよびSPHレジスタ)が_hw_lowest値より低い場合、_hw_lowestには
新しい最小スタック値が格納されます。
・このようにして、プログラムの実行中に発生した可能な限り低いハードウェア・スタック値を特定します。
・もちろん、プログラムがすべてのコードを実行することが重要です。
・値を印刷したり、LCDに表示することができます。
・実際に必要なスペースを決定するには、スタックの先頭値からそれを差し引きます。
・ソフト・スタックについても同様です。
・Yポインターの最小値を_sw_lowestという名前の変数に格納します。
・フレーム・スペースには変数_fw_highestが使用され、この変数は増加しています。
・サンプルプログラムの[stackcheck.bas]の例は、繰り返して用いられるサブルーチンが使用されて
いる場合に値を取得する方法を示しています。
|
REM |
一覧へ戻る |
コンパイラに、コメント行であることを知らせます。
・REM命令 または ['] (シングルクォート文字) が使用できます。
・REM命令の後に、他の命令文を書いても、すべてコメントとして扱われます。
・['] (シングルクォート文字)では、ブロック・コメントも使用できます。
|
(例) |
|
Rem テスト・プログラム Ver 1.00 |
' コメント行。 |
'( |
' ブロック・コメントの開始。 |
print "This will not be compiled |
' この行はコンパイルされません。 |
') |
' ブロック・コメントの終了。 |
|
|
#IF #ELSE #ENDIF |
一覧へ戻る |
条件を満たしている部分のコードだけをコンパイルします。 (条件付きコンパイル)
書式 |
#IF condition
(条件が成立した場合のコード)
#ELSEIFcondition2
(次の条件で成立した場合のコード)
#ELSE
(条件が成立しない場合のコード)
#ENDIF |
注釈 |
condition = 判定条件。 |
・この命令は、コンパイル時にのみ作用します。
・1つのソースファイルで、異なるバージョンのプログラムを作成することができます。
・判定条件を満たした部分のコードだけがコンパイルされて、プログラムになります。
・#IFにTHENが無く、#ENDIFが#END IF(スペースが無い)でないことに注意してください。
・条件を入れ子にすることができ、#ELSEの使用は任意です。
・$REGFILE命令には対応していません。 (将来的に対応予定)
・判定条件には定数や変数が必要で、判定を行う前に定義する必要があります。
・コンパイラ内部で定義される変数も使用できます。
_CHIP = 31 |
チップ名。 31はATtiny2313を表します。 ($regfile内を参照) |
_RAMSIZE = 128 |
SRAMのサイズ。 |
_ERAMSIZE = 128 |
EEPROMのサイズ。 |
_XTAL = 4000000 |
$CRYSTAL命令で指定された、AVRのクロック周波数。 |
_SIM = 0 |
$SIM命令が使用された場合に、1にセットされます。 |
_BUILD = 11162 |
コンパイラの構造番号。 (バージョン)
特定のバージョンで使用できない命令をサポートする等に利用できます。 |
|
(例) |
|
Const Language = 1 |
' 定数を定義する。 |
#if Language = 1 |
' コンパイル条件を判定する。 |
data "Hello" |
' 英語のデータが用意される。 |
#endif |
' |
#if Language = 2 |
' コンパイル条件を判定する。 |
Data "Guten tag" |
' ドイツ語のデータが用意される。 |
#endif |
' |
|
|
DEBUG |
一覧へ戻る |
デバッグ・モードをONまたはOFFに切り替えます。 (ONの場合、変数をシリアル・ポートに出力します)
書式 |
Debug status
Debug variable |
注釈 |
status = |
On |
- デバッグ・モードをONにして、変数の出力を有効にする。 |
Off |
- デバッグ・モードをOFFにして、変数の出力を無効にする |
variable = |
シリアルポートに値を出力する変数名。 |
|
・プログラムの開発中(デバッグ中)に、変数の内容を知りたい場合があります。
・PRINT命令を使って値を出力することもできますが、それはプログラムにもその記述が残って
しまいます。
・そのような場合、次のような条件付きコンパイルを使用することができます。
CONST TEST=1
#IF TEST
Print var
#ENDIF
・しかし、これは多くのタイピング作業が必要になります。
・DEBUG命令は、条件付きコンパイルとPRINT命令を組み合わせたものです。
・DEBUGをONにすると、すべての[DEBUG variable]行がコンパイルされます。
・DEBUGをOFFにすると、すべての[DEBUG variable]行がコンパイルされなくなります。
※ ONとOFFを入れ子にすることはできません。その場合、最後の命令が優先されます。
※ 通常、DEBUG ON命令は1つだけです。
※ プログラムが通常の動作をしているときは、OFFに設定します。
・DEBUG ONを使用すると、UART(シリアル・インターフェイス)が初期化されます。
・これは、TXDおよびRXDピンがUARTモードに設定され、ユーザーがそのポートをSETまたは
RESET命令で変更できないことをに注意してください。
|
(例) |
|
Dim A As Byte |
' 使用する変数を宣言。 |
Debug On |
' デバッグ・モードをONにする |
Debug A |
' 変数の内容をシリアル出力する。 |
Debug Off |
' デバッグ・モードをOFFにする |
Debug A |
' この行はコンパイルされません。 |
|
|
CONFIG ERROR |
一覧へ戻る |
コンパイラに、指定した番号のエラーが発生しても無視するように指示します。
書式 |
Config Error = Ignore , ErrNo = Ignore |
注釈 |
ErrNo = |
エラーが発生したときに無視するように指定するエラー番号。 |
|
・プログラムの作成中には、状況によってエラーを無視したい場合があります。
・例えば、新しいバージョンに以前のバージョンでは利用できなかった動作項目が追加された場合に
エラーが発生します。
・このようなエラーを無視するように指示すると、一時的にエラーなしでコンパイルできます。
・これはどのような状況でも機能するわけではありませんし、無視できないエラーもあります。
※ この指示は、完成品のプログラムには決して使用しないでください。
|
(例) |
|
Config Error = Ignore , 369 = Ignore , 46 = Ignore |
' ラベル名が重複している。
' 割り当てが不正のエラーを無視。 |
Lbl: |
' ラベル名を記述。 |
Dim Lbl As Word |
' ラベル名が重複している。 |
A = 0 |
' "A"の変数を宣言していない。 |
|
|
|