最終更新時間:2024年07月02日 11時15分03秒
マイコン制御学習用プログラム言語の設計と実装
- マイコン制御学習用プログラム言語の設計と実装
- はじめに
- 使い方
- 文法
- 基本命令文
- 繰り返し命令文
- 条件分岐命令文
- 変数 (上級モード)
- 代入文 (上級モード)
- サブルーチン
- LCD制御命令
- Sound出力命令
- その他の命令1
- その他の命令2
- その他の命令3
- BASCOM-AVRモード
- サンプルプログラム
- おまけ:BASCOM-AVRをインストールせずに使う方法
- 参考ページ
- ヒダピオ
- 簡易プログラミングでの文法について
- AWK
- AWK本
- GAWK for Windows
- fatal: print to "standard output" failed (No space left on device)
- warning: regexp escape sequence `\"' is not a known regexp operator
- AWK言語処理系の実装
- AWK SQL
- AWKによる言語処理系の実装
- AVR
- BASCOM-AVR
- LCD関連
- 学習指導要領
- 教科書
- 実態調査
- その他の教材
- BASCOM?
- BASCOMP
- 高校生
- 既知の問題
- 改訂の履歴とファイルのダウンロード
- 履歴以前の古い版
はじめに
バスコンピは「ヒダピオ」の「簡易プログラミング編」で「マイコン制御学習」を行うために「簡単なBASICのプログラムを機械語にコンパイルするソフトウェア」です。
「もちろんインストール不要のソフトウェアとして」実装しました。
今は、「ヒダピオ」に同梱されています。
使い方
アーカイブを展開すると「bascompi」フォルダが出てくるので、ヒダピオの「bin」フォルダに移動してください。「バスコンピ」ショートカットを作成するために、最初に1度だけ「mkshortcut.vbs」をダブルクリックしてください。
コンパイルの仕方は簡単で、ソースプログラムの名前が「bascompi.bas」なら「バスコンピ」ショートカットをダブルクリックするだけです。それ以外の名前ならば、「バスコンピ」ショートカットにドラッグ&ドロップします。このときは生成するファイル名が「bascom.hex」になるので注意してください。
出来たHEXファイルは「HAG_mini」でマイコンに書き込みます。
ヒダピオの新しい版では「コンパイル」ボタンが使えるかもしれません。
文法
基本命令文
- ddrB=
- ヒダピオではプログラムの最初に必ず入出力の設定をします。
- PortB=
- 書式 portB=出力値,時間(ミリ秒)
ポートBにデータを出力した後、指定した時間待ちます。
- End
- プログラムの終了。プログラムの最後で必ず実行させるようにしてください。
プログラム例
ddrB=255 PortB=1,300 PortB=2,300 End
繰り返し命令文
- Do 〜 Loop
- DoからLoopの間を繰り返します。Exit Doによって抜け出すことが出来ます。
プログラム例
ddrB=255 Do PortB=1,300 PortB=2,300 Loop End
- Exit Do
- Do 〜 Loopから抜け出します。
- For 〜 Next (中級モード)
- 書式 For i=1 To 繰り返し回数
ForからNextの間を指定された回数だけ繰り返します。
プログラム例
ddrB=255 For i=1 To 3 PortB=1,300 PortB=2,300 Next i End
- portB=2^i,300 (中級モード)
- 変数jも使えます。
- portB=2^(7-i),300 (中級モード)
- 変数jも使えます。
条件分岐命令文
- If 〜 Else 〜 End If (上級モード)
- 書式
条件が成立するときはIfからElseの間にある文を実行します。そうでないときはElseからEnd Ifの間にある文を実行します
使用できる条件式
- pinD.0=1
- pinB=255
- a=0
使用できる比較演算子
=,>,<
プログラム例
ddrB=255 Do If pinD.0=1 Then PortB=0,300 PortB=255,300 Else PortB=85,300 PortB=170,300 End If Loop End
変数 (上級モード)
変数としてa,i,j,k,wt1,wt2が使えます。型は16ビット符号付整数型ですが、符号なし数として扱われることもあります。また、ポートBへの出力は8ビットしかないことから上位8ビットの処理は省略されることがあります。
代入文 (上級モード)
変数に値を代入する代入文として次の形式のものが使えます。
- a=0
- a=i
- a=a+1
- a=a-1
- a=255-a
- a=a*2
- a=2^a
- a=int(a/2)
- a=pinB
- a=portB
(以下はj,kについても同様)
- i=0
- i=a
- i=i+1
- i=i-1
- i=255-i
- i=i*2
- i=2^i
- i=int(i/2)
- i=pinB
- i=portB
ポートBへの出力に変数が使えます。
- portB=a,300
待ち時間の指定に変数が使えます。
- wt1=300
- portB=0,wt1
- portB=a,wt2
サブルーチン
- Sub (上級モード)
- サブルーチンのラベルを指定します。
書式 Sub ラベル
- Return (上級モード)
- サブルーチンから戻ります。
書式 Return
- Gosub (上級モード)
- サブルーチンに制御を移します。
書式 Gosub ラベル
LCD制御命令
- Cls (LCDモード)
- 画面に表示されている文字を全て消します。
書式 Cls
LCDを使うときは最初の表示の前に必ず実行してください。
- Lcd (LCDモード)
- LCDに指定された文字列を表示します。
書式 Lcd 文字列
文字列は""で括ります。
プログラム例
Cls Lcd "BASCOMPI" End
- Cursor Off (LCDモード)
- カーソルを非表示にします。
- Cursor On (LCDモード)
- カーソルを表示するようにします。
- Display Off (LCDモード)
- LCDを非表示にします。
- Display On (LCDモード)
- LCDを表示するようにします。カーソルは非表示にします。
- Upperline (LCDモード)
- 上の行に表示します。
- Lowerline (LCDモード)
- 下の行に表示します。
- Shiftlcd Left (LCDモード)
- 表示されている文字列を左にずらします。
- Shiftlcd Right (LCDモード)
- 表示されている文字列を右にずらします。
- Locate (LCDモード)
- 表示位置を指定します。
書式 Locate 行,列
- Waitms (LCDモード)
- 指定された時間待ちます(ミリ秒単位)。
- Deflcdchar (LCDモード)
- 指定された字形を指定された文字番号で登録します。
- Lcd chr() (LCDモード)
- 指定された文字番号に対応する文字をLCDに表示します。
書式 Lcd chr(文字番号)
- Lcd 変数名 (LCDモード)
- 指定された変数の値をLCDに表示します。
書式 Lcd 変数名
Sound出力命令
- Sound (Soundモード)
- 指定された周波数の音を指定された時間出力します。
書式 Sound 出力ポート,長さ,高さ
マイコンの動作周波数によって音の高さに指定する数値が変わります。
その他の命令1
ヒダピオの簡易プログラミングには出てきませんが電光掲示板(電子掲示板)や電子オルゴールの中で使っています。
- Data
- プログラム中にデータを置きます。
Data文の前にはラベルを置いてください。
- Read
- Data文で置いたデータを変数に読み出します。
書式 Read 変数
- Restore
- データを読み出す位置を指定します。
Read文で最初のデータを読み込む前には必ずRestore文を実行してください。
その他の命令2
電子オルゴールを実現するためにBASCOM-AVRとの互換性を高める目的で追加された命令です。しかし、BASCOM-AVRとの完全な互換性を目指すものではありません。また、現在の電子オルゴールではこれらの命令は使われていません。
- a=Lookup(i,label)
- 指定されたデータ行から、指定された位置の数値データを変数に読み出します。
- a="a"
- 変数に文字(のコード)を代入します。
- If a="a" Then
- 変数と文字(のコード)を比較します。
その他の命令3
より一般的な応用が実現できるようにするために追加された命令です。
- PortD=
- ポートDにデータを出力します。
- a=Getadc(0)
- A/D変換された値を変数に読み出します。
BASCOM-AVRモード
バスコンピの文法ははヒダピオの簡易プログラミングで使用するBASIC言語に準拠しています。ヒダピオの簡易プログラミングで作成したプログラムをそのまま受理しAVRのアセンブリ言語へ翻訳します。
しかし、ヒダピオが「コンパイラへ」ボタンによって出力するのははBASCOM-AVRの文法に変換されたソースプログラムです。また、電光掲示板や電子オルゴールではBASCOM-AVR用のプログラムを出力します。これは、もともとヒダピオシステムがBASCOM-AVRを前提としているからです。
そこで、バスコンピはBASCOM-AVRのサブセットもコンパイルできるようにしてあります。
ヒダピオとBASCOM-AVRではポートBの論理が逆になっています。
ヒダピオシステムでは回路としては負論理ですが、中学生が対象ということもありヒダピオ上はLEDが'1'で点灯し、'0'で消灯するようなっています。
つまり、ヒダピオのBASIC言語としてコンパイルするときとBASCOM-AVRとしてコンパイルするときではポートBに出力するデータが反転しているのです。
バスコンピでは2つのモードを持っていてこれらを切り替えています。
モードを切り替えるには2つの方法があり、ひとつはコンパイラに対するオプションで指示する方法です。もうひとつは、プログラム中に以下の文があるとBASCOM-AVRモードに切り替わります。
- $REGFILE
- $CRYSTAL
- CONFIG
- DIM
- $REGFILE
- *.datファイルは読まずに、CPUの判別に使用しています。値として"ATtiny2313.DAT"と"m168Pdef.dat"が有効ですが、現在はATtiny2313のみの対応となっています。
- $CRYSTAL
- クロックの値を読み取っています。値として1000000と12000000のみが有効です。
- CONFIG
- CONFIG PORTB、CONFIG PORTDは機能します。CONFIG LCDは単にスキップします。それ以外はスキップします。
- DIM
- 宣言された情報は記号表に登録されますが、バスコンピには型がありませんので利用されません。例外として、電光掲示板ではRead文で変数にByte型のデータを読むところがあり、そこで記号表を参照しています。
サンプルプログラム
LEDの点滅
小山先生の回路図を参考にして回路を組みます。メモ帳でBlink.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。
LEDの明滅
小山先生の回路図を参考にして回路を組みます。メモ帳でFade.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。尚、Fade.bas(0)は0.53以降のコンパイラでコンパイルすることができます。
- Fade.bas
ledPin Alias PortB.3 brightness Alias OCR1A Config ledPin=Output TCCR1B=&h01 TCCR1A=&h81 Do For i=0 To 254 brightness=i Waitms 2 Next i For i=255 To 0 Step -1 brightness=i Waitms 2 Next i Loop End
スイッチでオンオフ制御
小山先生の回路図を参考にして回路を組みます。メモ帳でSw.bas(1)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。尚、Sw.bas(1)は0.49以降のコンパイラでコンパイルすることができます。
- Sw.bas
swPin Alias PinD.6 ledPin Alias PortB.3 Config ledPin=Output Config swPin=Input Const HIGH=1 Const LOW=0 Do If swPin=HIGH Then ledPin=HIGH Else ledPin=LOW End If Loop
楽譜の演奏 1
小山先生の回路図を参考にして回路を組みます。メモ帳でPlaynote.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。尚、Playnote.bas(0)は0.54以降のコンパイラでコンパイルすることができます。
- Playnote.bas
bellPin Alias PortB.3 freq Alias k note Alias k Const C=262% Const D=294% Const E=330% Const F=349% Const G=392% Const A=440% Const B=494% Const c=523% Const d=587% Const e=659% Const f=698% Const g=784% Const R=1% Dim ocr As Long Dim timer1_toggle_count As Long Dim duration As Long On COMPARE1A TIMER1_COMPA_vect Config bellPin=Output TCCR1A=0 TCCR1B=Bits(WGM12,CS10) Enable Interrupts Do Restore NOTES Do Read note If note=0 Then Exit Do Else If note=R Then Else Gosub tone End If Waitms 330 End If Loop Waitms 2400 Loop End tone: ocr=_XTAL/freq ocr=Int(ocr/2) ocr=ocr-1 If ocr>&hffff Then ocr=_XTAL/freq ocr=Int(ocr/2) ocr=ocr/64 ocr=ocr-1 TCCR1B=Bits(WGM12,CS11,CS10) Else TCCR1B=Bits(WGM12,CS10) End If timer1_toggle_count=freq*2 timer1_toggle_count=timer1_toggle_count*300 timer1_toggle_count=timer1_toggle_count/1000 OCR1A=ocr TIMSK.OCIE1A=1 Return TIMER1_COMPA_vect: If timer1_toggle_count=0 Then TIMSK=0 bellPin=0 Else PINB.3=1 timer1_toggle_count=timer1_toggle_count-1 End If Return NOTES: Data R,D,D,B,A,G,D,R, R,D,D,B,A,G,E,R, R,E,E,c,B,A,F,R, R,d,d,d,c,A,B,R Data R,D,D,B,A,G,D,R, R,D,D,B,A,G,E,R, R,E,E,c,B,A,d,d, d,d,e,d,c,A,G,R, d,R Data B,B,B,R, B,B,B,R, B,d,G,A,B,R,R,R, c,c,c,c,c,B,B,B, B,A,A,B,A,R, d,R Data B,B,B,R, B,B,B,R, B,d,G,A,B,R,R,R, c,c,c,c,c,B,B,B, d,d,c,A,G,R, g,R,0%
カウントアップ
小山先生の回路図を参考にして回路を組みます。メモ帳でCountup.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。
- Countup.bas
Config PortB=252 Config PortD=64 For i=0 To 9 a=Lookup(i,LED) PortD=a a=a*2 a=a*2 PortB=a,500 Next i End LED: Data 63%,6%,91%,79%,102%,109%,125%,39%,127%,111%
アナログデジタル変換
小山先生の回路図を参考にして回路を組みます。メモ帳でAdc.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。(2011.10.13追記)マイコンの動作周波数が1MHzのときにはコンデンサの静電容量を0.1μFにしてください。サンプルプログラム(Adc.bas(0))にあった動作周波数の指定は不要のため削除しました。
- Adc.bas
Config PortB=252 Config PortD=64 Do a=Getadc(0) a=a/103 a=Lookup(a,LED) PortD=a a=a*2 a=a*2 PortB=a Loop End LED: Data 63%,6%,91%,79%,102%,109%,125%,39%,127%,111%
サーボモータの制御
押しボタン信号機
小山先生の回路図を参考にして回路を組みます。メモ帳でSignal.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。尚、Signal.bas(0)は0.55以降のコンパイラでコンパイルすることができるようにする予定でます。
- Signal.bas
RPin Alias PortB.7 YPin Alias PortB.6 GPin Alias PortB.5 RRPin Alias PortB.1 GGPin Alias PortB.0 swPin Alias PinD.6 Config PortB=&B11100011 Config swPin=Input Const HIGH=1 Const LOW=0 Dim H As Integer Dim L As Integer Dim swMemo As Integer Declare Sub carsig(g as integer,y as integer,r as integer) Declare Sub mansig(r as integer,g as integer) swMemo=LOW H=HIGH L=LOW Call carsig(H,L,L) Call mansig(H,L) Do If swPin=HIGH Then If swMemo=LOW Then Waitms 4000 Call carsig(L,H,L) Waitms 4000 Call carsig(L,L,H) Call mansig(L,H) Waitms 16000 For i=0 To 7 Call mansig(L,H) Waitms 500 Call mansig(L,L) Waitms 500 Next i Call mansig(H,L) Waitms 4000 Call carsig(H,L,L) End If swMemo=HIGH Else swMemo=LOW End If Loop End Sub carsig GPin=g YPin=y RPin=r Return End Sub Sub mansig RRPin=r GGPin=g Return End Sub
楽譜の演奏 2 (Midi楽器の制御)
小山先生の回路図を参考にして回路を組みます。メモ帳でMidi.bas(0)を作成し、そのファイルアイコンをバスコンピのショートカットにドラッグ&ドロップします。出来上がったbascom.hexをHAG_mini等でマイコンに書き込みます。尚、Midi.bas(0)は0.55以降のコンパイラでコンパイルすることができるようにする予定でます。
- Midi.bas
$baud=31250 bellPin Alias PortD.3 note Alias k Config bellPin=Output Dim voice As Integer Dim _H70 As Integer Dim _H00 As Integer Const C=60% Const D=62% Const E=64% Const F=66% Const G=67% Const A=69% Const B=71% Const c=72% Const d=74% Const e=76% Const f=78% Const g=79% Const Z=125% Const z=126% Const R=127% Const HIGH=1 Const LOW=0 Declare Sub noteOn(data1 As Integer,data2 As Integer) _H70=&H70 _H00=&H00 Do Print Chr(&HC0);Chr(voice); Restore NOTES For i=0 To 139 Read note If note=Z Then bellPin=HIGH Else If note=z Then bellPin=LOW Else If note=R Then Waitms 300 Else Call noteOn(note,_H70) Waitms 300 Call noteOn(note,_H00) End If End If End If Next i Waitms 2400 voice=voice+1 If voice>16 Then voice=11 End If Loop End Sub noteOn Print Chr(&H90);Chr(data1);Chr(data2); End Sub NOTES: Data R,D,D,B,A,G,D,R, R,D,D,B,A,G,E,R, R,E,E,c,B,A,F,R, R,d,d,d,c,A,B,R Data R,D,D,B,A,G,D,R, R,D,D,B,A,G,E,R, R,E,E,c,B,A,d,d, d,d,e,d,c,A,G,R, d,R Data Z,B,B,B,z,R, Z,B,B,B,z,R, B,d,G,A,B,R,R,R, c,c,c,c,c,B,B,B, B,A,A,B,A,R, d,R Data Z,B,B,B,z,R, Z,B,B,B,z,R, B,d,G,A,B,R,R,R, c,c,c,c,c,B,B,B, d,d,c,A,G,R, Z,g,z,R
おまけ:BASCOM-AVRをインストールせずに使う方法
拙作バスコンピができたのはインストールせずに使えるAVR用のBASICコンパイラが欲しいという要望に応えるためでした。実はBASCM-AVRにはbascomp.exeというコマンドラインからコンパイラを使うためのユーティリティが用意されています。MCS Electronics社のページからダウンロードできますがDEMOバージョンにも付属していて、BASCOM-AVRのインストールディレクトリの中にあります。バージョン2.0.5.0まではソース中に$REGFILEや$CRYSTALだけでなく$BAUDまで書かなければいけなかったのですが、最新のバージョン2.0.7.1からは、これらを書かなくても良くなりました。
必要なファイルのコピー
Windows XPでは通常「C:\Program Files\MCS Electronics\BASCOM-AVR」にインストールされます。ここから必要なファイルだけ取り出します。ATtiny2313用にコンパイルするために最低限必要なのは「BASC-AVR.DLL」、「bascomp.exe」、「ATtiny2313.DAT」、「LIB\mcs.lbx」、「LIB\Double_Trig.LBX」、「LIB\Double.LBX」、「LIB\FP_Trig.LBX」です。
バッチコマンドの作成
次のようなバッチファイルbascomp.bat(0)を作成します。
- bascomp.bat
bascomp.exe %1 CHIP=31
ショートカットの作成
作成したバッチコマンドのショートカットを作成します。
コンパイル
作成したショートカットにソースファイルをドラッグ&ドロップするとコンパイルできます。エラーメッセージは、*.errファイルに出力されます。
参考ページ
ヒダピオ
- JA制御 ヒダピオ システム(中学校,技術・家庭科,コンピュータ制御,USB-IO,プログラミング)
「プログラミングと計測・制御」の教材HIDapio | 「ものづくり」は基本です。「ORCA研究所」http://bl.orca-labo.com- 新ORCA研究所ブログ|「プログラミングと計測・制御」の教材HIDapio
http://www.kokyokyo.kofu-ymn.ed.jp/bukai/gijutu.html教材開発アイディア - むっちーのブログ - Yahoo!ブログ- 中学校の技術の授業で、JA制御ヒダピオというものを使って、実習をし... - Yahoo!知恵袋
- ArduBlock(ヒダピオシステム向けバージョン)を使おう | Gijyutu.com | Gijyutu.com
パソコン制御用ソフトで計測・制御の学習をしよう!! - 弘前大学 ...- AVRマイコンという、これまでまったく無縁だった世界に魅了され|人生に出会う7WAYS+α
- PDF版(生徒用) - JA制御 ヒダピオ システム
- ヒダピオ制御カー | Manualzz
- 中3の技術です。 - Clearnote
- ヒダピオ学習回路 付属説明書
- 私家版 Ardublock
- Arduino/リンク集 - 講義のページ
- NRS+ 特集・小ネタ Arduinoで電子工作2 -サンプルスケッチでLチカと簡単電子オルゴール-
- 産教連通信第199号
- 産教連通信
- 産教連通信第187号ホームページ用
- 色々 | It wishes strongly and it lives.
- 計測・制御教育のための教材開発とその教材を活用 した授業設計及び実践
- 未来社会・生活をつくる力を育てる技術・家庭科教育
- 「ヒダピオ」tag一覧|人生に出会う7WAYS+α
- 授業のエキスパート養成事業(第3学年技術・家庭科)授業実践記録
- ArduBlock(ヒダピオシステム向けバージョン)を使おう | Gijyutu.com 技術の面白教材集
- Km2Net - おにたま(オニオンソフト)のおぼえがき
- 体験と言葉をつなぐ教育
- Arduinoプログラミングでものづくり(ATtiny4313版)
- 特別支援教育で参考になる教材情報
簡易プログラミングでの文法について
AWK
- awkが新しくなる!? 本家AwkがUnicode (UTF-8)とCSV対応に! - Qiita
- 開発から 45 年、プログラミング言語 AWK に Unicode サポートが追加 | スラド デベロッパー
- 世界のプログラミング言語(40) ハッカー御用達の言語AWKはテキスト処理で今日も活躍中 | TECH+(テックプラス)
- [awk入門_2022 講義ノート]
- awklang.org – Τhe site for things related to the awk language
- [AWK「グフフ……」女騎士「くッ……!」アドベントカレンダー2019 7日目] | 東京工業大学デジタル創作同好会traP
- Use Gawk to process CSV files - In the shadow of a kind tiger
- www.mogami.com/unix/awk-02.html(IA)
- myzsyweb’s gists · GitHub
- awk組み込み変数の活用でさまざまな形式のテキストファイルを扱う
- <code>%</code>の入った文字列をawkで<code>printf $0</code>するとエラーに | 上田ブログ
- gawkで先頭が空のCSVデータを加工すると面白いことになる #AWK - Qiita
- [gawk4.1.4+MPFRでフィボナッチ数列をF[0]からF998]まで出力してみる。 - labunix's blog
- gawk · GitHub Topics · GitHub
- GitHub - freznicek/awesome-awk: A curated list of awesome AWK frameworks, libraries, software and resources
- GitHub - PacktPublishing/Learning-AWK-Programming: Learning AWK Programming, published by Packt
- comp.lang.awk - Google グループ
- comp.lang.awk
AWK Users JP :: 日本の AWK ユーザのためのハブサイト(IA)Front Page - Japan GNU AWK Users Club(IA)- AWK - Wikipedia(日本語)
- AWK - Wikipedia(英語)
- The GNU Awk User's Guide
- 『コーパス日本語学ガイドブック』付録CD収録のjgawkについて
- awk 製 3Dシューティングゲーム awkaster で遊んでみた – matoken's meme
- AWK製FPSゲームの「TERMMAZE3D」 – matoken's meme
- Debian/Ubuntuでawkを切り替える – matoken's meme
- mikkun/AWKTC: AWKTC is Workable Klutzy Time-wasting Command
- [SGソフトウェア開発ブログ: awk]gawkとmawk
- mawk MBCS (32bit版)の詳細情報 : Vector ソフトを探す!
AWK本
- O'Reilly Japan - プログラミング言語AWK 第2版
- プログラミング言語AWK
- AWKを256倍使うための本
- sed & awkプログラミング 改訂版: Dale Dougherty, Arnold Robbins, 福崎 俊博: 本
- sed & awkプログラミング(改訂版) | Ohmsha
- O'Reilly Japan - sed & awkプログラミング 改訂版
awkでプログラミング- Amazon.co.jp: awkでプログラミング: 植村 富士夫, 富永 浩之: 本
- AWK実践入門:書籍案内|技術評論社
- 「シェル芸」に効く! AWK処方箋(斉藤 博文)|翔泳社の本
- Software Design 2013年9月号|技術評論社
- The AWK Programming Language, Second Edition
GAWK for Windows
- Gawk on Windows(IA)
- GitHub - mbuilov/gawk-windows: Fork of the GNU Awk (https://www.gnu.org/software/gawk/)
- Downloads - gnu-on-windows - compile GNU programs for win32 - Google Project Hosting
- ezwinports - Browse Files at SourceForge.net
fatal: print to "standard output" failed (No space left on device)
fatal: print to "standard output" failed (No space left on device)
- AWK 座敷
- gawk「cmd. line:1: (FILENAME=- FNR=1) fatal: print to "standard output" failed (No space left on device)」で死亡 - いろきゅう.jp 〜Programmable maiden〜 Tech side
- いろきゅう.jp 〜Programmable maiden〜 Tech side
GAWK サクラエディタで快適に使う- GAWK サクラエディタで快適に
warning: regexp escape sequence `\"' is not a known regexp operator
warning: regexp escape sequence `\"' is not a known regexp operator
- 1790227 – regexp escape sequence `\"' is not a known regexp operator
- warning: regexp escape sequence `\"' is not a known regexp operator
AWK言語処理系の実装
- gawk.git - gawk
- [bug-gawk] Win32 Gawk 4.0.0 bugs
- Difference Between awk, nawk, gawk and mawk | Baeldung on Linux
- GitHub - ThomasDickey/mawk-20121129: mawk 1.3.4 20121129
- GitHub - ploxiln/mawk-2: Mike Brennan's new development of his original "mawk" - https://github.com/mikebrennan000/mawk-2
GitHub - snddns/mawk-notes: Going through the awk programming language with mawk- GitHub - d4tocchini/spawk: forked from fast scripting phenom mawk (v2 beta), focused on adding parallelism, memory-efficient persistence, embeddability and healthy dose of sugar while maintaining performance
- GitHub - gvlx/gawk: forked from git://git.savannah.gnu.org/gawk.git
- GitHub - e36freak/awk-libs: GNU awk libraries
- GitHub - benhoyt/goawk: A POSIX-compliant AWK interpreter written in Go
- GoAWK, an AWK interpreter written in Go
- 私的 goawk リポート - 標準愚痴出力
- κeenさんはTwitterを使っています: 「Rust製のAWK(っぽい言語)の実装。型推論してJITしたり並列化したりSIMDで高速化頑張ってたりするらしい ezrosent/frawk: an efficient awk-like language https://t.co/LbWgvlTsOj」 / Twitter
- GitHub - ezrosent/frawk: an efficient awk-like language
- malloc/free まとめ - きゅうり。
- webawk/README.md at master · agordon/webawk · GitHub
- WebAWK - client-side awk in Javascript
- Javascriptでawkが動く。魔界ライブラリWebAWK - Bye Bye Moore
- AWK live editor
- A web based AWK interpreter
- Online Awk Compiler - Online Awk Editor - Online Awk IDE - Awk Coding Online - Practice Awk Online - Execute Awk Online - Compile Awk Online - Run Awk Online
- Online AWK Compiler - Online AWK Editor - Run AWK Online - Online AWK Runner
- Online AWK (gawk) compiler and IDE - API provided by Sphere Engine - Ideone.com
AWK SQL
XML Processing with GNU Awk- XML Processing with GNU Awk
- gawk libraries for XML, PostgreSQL,... | Free Development software downloads at SourceForge.net
- dbohdan/sqawk: Like Awk but with SQL and table joins
- Sqawk
- SPAWK
- SPAWK
- awklang.org – SPAWK - SQL Powered AWK
AWKによる言語処理系の実装
AWKによるSPARC V8逆アセンブラ 竹下世界塔の計算機よもやま話/ウェブリブログ→ AWKによるSPARC V8逆アセンブラ : 竹下世界塔の計算機よもやま話ホワット・ア・ワンダフル・ワールド もう AWK なんて使わないなんて言わないよ絶対〜(IA)- aaa - The Amazing Awk Assembler by Henry Spencer
しまりすくらぶ 梵天丸のPIC改造工作/まきものの応用から,ものづくりメカトロニクスへ- しまりすくらぶ 梵天丸のPIC改造工作/まきものの応用から,ものづくりメカトロニクスへ
- Shudo's Notes (2007/9)
PICマイコンのお部屋(IA)- Mitzyuki's Blog :: awk を利用した構文解析ツール
- 紫ログ:Grass on AWK - AWKでちょっと草を - livedoor Blog(ブログ)
- myzsyweb’s gists
- darius/awklisp: A Lisp interpreter written in Awk.
- A LISP interpreter in Awk - ChaSen.org
- CLiki: AWK Lisp
- CLiki: CLAWK
- [Announce] CL-AWK (Common Lisp AWK library)
- GitHub - sharplispers/clawk: CLAWK is an AWK implementation embedded into Common Lisp, by Michael Parker. This version contains some patches to make it compile again.
- Solene'% : Common LISP awk macro for easy text file operations
- シェルスクリプトでLISP処理系を作ってみた
- I wrote a compiler in awk! To bytecode; I wanted to use the awk-based compiler a... | Hacker News
- Mercat
- GitHub - siraben/awk-vm: A virtual machine and assembler written in AWK.
- GitHub - LBPHacker/R216: Stuff one needs to play around with my R216 computers (see README)
- awk言語で作った簡易クロス・アセンブラ
- AWKでアッセンブラーを作る(2) アッセンブラースクリプト編 | Asm Sphere
- assembly - Is there a reference for the assembler-like output produced by `awk -W dump`? - Unix & Linux Stack Exchange
- GitHub - Syuparn/webawk: simple (mock) web server framework written in awk
- (GNU)AWKで簡易Webフレームワークを作る - Qiita
AVR
BASCOM-AVR
LCD関連
学習指導要領
教科書
[平成24年度版 中学校 教科書のご紹介新しい技術・家庭/技術分野]:東京書籍- 平成24年度用中学校技術・家庭科 技術分野教科書のご案内/開隆堂出版株式会社
教育図書株式会社- 【東京書籍】 教科書教材 技術・家庭
- 技術分野教科書 - 教育図書教育図書
実態調査
その他の教材
(2011.9.8) 今頃気づきましたが小山先生のページに「バスコンピ」の文字がありました。
BASCOM?
BASCOMP
高校生
AVRマイコンを用いた交通信号機制御(IA) 岡山県立岡山工業高等学校 平成24年度 情報技術科 課題研究- Microsoft Word - AVRマイコンを用いた交通信号機制御.docx
既知の問題
改訂の履歴とファイルのダウンロード
注意! 0.36から0.43までは、Windows 7/Vistaで動作しない場合があります。
自己展開形式(.exe)のファイルとzipファイルの中身は全く同じものです。
- 2012.3.13 0.57
(1) [本体] PortB.x=0の形式が直接使えるようにした。
(2) [本体] CALL命令を使用せずにサブルーチンを呼び出す書式も使用できるようにした。
bascompi057.exe(0) bascompi057.zip(2)
- 2012.3.5 0.56
(1) [本体] 名前付き定数の2重定義チェックが間違っているのを直した。
(2) [本体] Data文中の定数式を加算以外も計算するようにした。ついでに再帰的に計算するようにした。循環参照は検出するようにしたつもり。
(3) [本体] 別名を使用したときにa=a+1のパターンが認識できなかったのを直した。
(4) [本体] Waitms文で名前付き定数が使えるようにした。
(5) [本体] 定数_XTALを設定するタイミングが間違っていたので直した。
(6) [本体] X=2^I、X=2^Jが処理されていなかったのを直した。
(7) [本体] Call文が正しく処理されていないのを直した。
(8) [vavrdisasm.exe] 同梱する逆アセンブラを最新のものにした。
bascompi056.exe(0) bascompi056.zip(0)
- 2012.2.1 0.55
(1) [本体] シリアル通信の出力に対応した。$BAUD、Print文、Printbin文が使えるようにした。入力は未だ出来ない。
(2) [本体] Call文でサブルーチンに引数を渡せるようにした。定義のためのDeclare Sub文、Sub〜End Sub文が使えるようにした。
(3) [本体] Dim文でString型の変数と1次元の配列が宣言できるようにした。SRAM上の領域も確保されるようにした。
(4) [本体] PortB.0=aのような書き方が出来るようにした。
(5) [本体] 配列要素への単純変数、配列変数および10進定数の代入が出来るようにした。(6) [本体] 代入文の右辺に16進定数と2進定数が使えるようにした。
(7) [本体] 代入文の右辺で配列の要素が使えるようにした。ただし、演算は出来ない。
(8) [本体] Data文の中で定数同士の加算が出来るようになった。
(9) [本体] ソースコードからデバッグ用のメッセージ出力やコメントアウトした不要な行を削除した。
bascompi055.exe(0) bascompi055.zip(0)
- 2012.1.6 0.54
(1) [本体] Bits/Nbits関数が使えるようにした。
(2) [本体] If文でLong型変数と定数の比較が行なえるようにした。
(3) [本体] 初期化ルーチンを生成するタイミングが間違っているのを直した。
(4) [本体] Long型変数のインクリメント/デクリメントができるようにした。
(5) [本体] If文で16進定数が使えるようにした。
(6) [本体] 16ビットの乗算ができるようにした。
(7) [本体] Data文でカンマの前後に空白があると記号定数が認識できないのを直した。
(8) [本体] If文で変数名にアンダースコアが使えないのを直した。
(9) [本体] If文での変数と0との比較を高速化した。
(10) [本体] If文で定数値に%が付いていても良いようにした。
bascompi054.exe(0) bascompi054.zip(0)
- 2011.12.28 0.53
(1) [本体] 宣言したLong型の変数に値を代入できるようにした。
(2) [本体] 32bitの除算ができるようにした。加算、減算、乗算についてはまだできない。
(3) [本体] 定数_XTALを定義しプログラム中で動作クロック数($Crystalで指定した値)を読み出せるようにした。
(4) [本体] HIGHW関数によりLong型変数の上位16bitを取り出すことができるようにした。
(5) [本体] $Baudでボーレートを設定できるようにした。シリアル通信はまだできない。
(6) [本体] Enable/Disable文で個別の割り込みを許可/禁止できるようにした。
(7) [本体] On 割り込み 文で割り込みベクタを設定できるようにした。
(8) [本体] On 割り込み文で指定したサブルーチンを割り込みルーチンとして認識しレジスタの退避と復帰を行うようにした。
(9) [本体] インラインアセンブラの開始と終了に$asmと$end asmが使えるようにした。
(10) [本体] Portb文で変数の値を代入する場合のコードを改善した。
(11) [本体] I/Oレジスタへの代入及び値の参照ができるようになった。
(12) [本体] &Hxxによる16進定数が使えるようにした。
(13) [本体] Stop TIMER0/COUNTER0/TIMER1/COUNTER1/WATCHDOG文により各デバイスを停止できるようにした。
(14) [本体] Start WATCHDOG文によりウォッチドッグタイマを起動できるようにした。
(15) [本体] 引数なしのStop文によりプログラムの停止が行なえるようにした。End文との違いは割り込みの禁止を行わないことである。
bascompi053.exe(0) bascompi053.zip(0)
- 2011.12.7 0.52
(1) [本体] LCDに変数の値を表示できるようにした。ただし、負の数には対応していない。
(2) [mkbachfile.vbs] アセンブルエラーが出たときは空のhexファイルを生成するようにした。
bascompi052.exe(0) bascompi052.zip(0)
- 2011.11.26 0.51
(1) [本体] 簡易プログラミングでSound文がコンパイルできなくなる間違いを直した。
bascompi051.exe(0) bascompi051.zip(0)
- 2011.11.22 0.50
(1) [本体] Enable Interrupts/Disable Interruptsで割り込みの許可と禁止が行えるようにした。
(2) [本体] ASM_TEXT/ASM_ENDでインラインアセンブラが使えるようにした。
(3) [Orgel.awk] 入力に対応した。
bascompi050.exe(0) bascompi050.zip(0)
- 2011.11.8 0.49
(1) [本体] If文でa>0とa<0の処理が間違っていたのを直した。
(2) [本体] Config Portd.0の処理が間違っていたのを直した。
(3) [本体] If文で文字比較の処理が間違っていたのを直した。
(4) [本体] If文で名前付定数が使えるようにした。
(5) [本体] Config pinB、Config pinB.0、Config pinD、Config pinD.0が使えるようにした。
bascompi049.exe(0) bascompi049.zip(0)
- 2011.11.7 0.48
(1) [本体] Constが使えるようにした。
(2) [本体] Aliasが使えるようにした。
(3) [本体] Locate文で予約されていない変数を使ったときの処理が間違っていたので直した。
(4) [本体] BASCOM-AVRモードで余計な初期化コードが出力されないようにした。
(5) [本体] ATmega168(P)に対応させた。ただし、テストは一切行っていない。
(6) [本体] Config PortXで以下の形式が使えるようにした。
- Config PortB=Input
- Config PortD=Output
- Config PortX.0=Input
- Config PortX.0=Output
- Config PortX=&Bbbbbbbbb
(7) [本体] アセンブリ言語のオペランドで定数を0b00000000のように常に8桁になるようにした。
(8) [本体] (7)の変更によりオペランドが0のときに間違っていたのが直った。
(9) [本体] $regfileが正しく認識され無い場合があったのを直した。
(10) [本体] For文でStepが使えるようになった(ただし指定できるのは-63〜-1、1〜63の定数のみ)。
(11) [その他] 「m168def.inc」を添付した。
bascompi048.exe(0) bascompi048.zip(0)
- 2011.10.6 0.47
(1) [本体] ATtiny2313でa=getadc(0)によってA/D変換ができるようにした。
ChaN氏のページ
ELM - シンプルなA-Dコンバータ(http://elm-chan.org/docs/avr/avradc_j.html)
からコードを引用した。ただし、クロックが1MHzのときはあまりうまくは動かないようである。
(2) [本体] a=a*2 の処理が間違っていたのを直した。
(3) [本体] a=int(a/2) も間違っていたので直した。
(4) [本体] PortD=a ができるようにした。
bascompi047.exe(0) bascompi047.zip(0)
- 2011.9.22 0.46
(1) [本体] Display On/Off のコードが間違っていたのを直した。
bascompi046.exe(0) bascompi046.zip(0)
- 2011.9.15 0.45
(1) [本体] バージョンナンバーと日付以外は特に変更無し。
(2) [Orgel.awk] 12MHzに対応した。
(3) [Orgel.awk] 電子オルゴールのプログラムでないときは「bascompi_orz.bas」を出力しないようにした。
(4) [Orgel.awk] 各音符(休符)の前に30msの待ち時間を入れた。
bascompi045.exe(0) bascompi045.zip(0)
- 2011.9.13 0.44
(1) [本体] 再びWindows 7/Vistaで動作しなくなっていることが発覚したので対処をした。
(2) [本体] ラベルの処理に関して余計なメッセージが出ていたのを直した。
(3) [本体] Config PortB、Config PortDが処理されていなかったのを直した。
(4) [Orgel.awk] #,bの処理がやっぱりなされていなかったのを直した。
bascompi044.exe(0) bascompi044.zip(0)
- 2011.9.12 0.43
(1) [本体] Sound文のランタイムルーチンでループのラベル位置が間違っていたのを直した。これにより、テンポが遅くなったり、音程が低くなるのが改善したと思われる。
(2) [Orgel.awk] #,bの処理がなされていなかったのを直した。
bascompi043.exe(0) bascompi043.zip(0)
- 2011-9-8 0.42
(0) 0.41の日付が間違っていた。何か良い管理法は無いものか。
(1) [本体] Sound文の引数でカンマの前後に空白があっても良くなった。
(2) [本体] ラベルの扱いが間違っていたのを直した。「-」を含むラベルも使えるようになった。
(3) [Orgel.awk] 判定法が甘く、Sound文を含むプログラムを全て誤認していたのをSound文を含みかつData文を含んでいて、そのデータが全て電子オルゴールの音符データであるときに「電子オルゴール」のプログラムと看做すことにした。
bascompi042.exe(0) bascompi042.zip(0)
- 2011-9-7 0.41
(1) [本体] ソースを少し弄ったが、特に機能的な変更はない。
(2) [Orgel.awk] 電子オルゴールの出力したプログラムをバスコンピのプログラム「bascompi_orz.bas」に変換するスクリプト「Orgel.awk」を作成した。
(3) [mkbatchfile.vbs] 上の「Orgel.awk」のために大幅に書き換えた。
bascompi041.exe(0) bascompi041.zip(0)
- 2011-9-6 0.40
(0) 0.39の日付が間違っていた。
(1) Waitms文で変数が使えるようになった。
(2) CONFIG、$CRYSTALでもBASCOM-AVRモードになるようにした。
8LED点滅回路http://hidapio.jp/m8led.htm
にある、プログラム例の「ヒダピオ」、「BASCOM」の両方がコンパイルできるようになった。
(3) If文が壊れていたのを直した。
(4) 乗算ルーチン、除算ルーチンのコメントがコメントになっていなかったのを直した。
(5) 代入文の右辺にI、J、K、A以外の変数も使えるようになった。
(6) If文でI、J、K、A以外の変数も使えるようになった。
(7) Sound文で変数を使った場合のコード生成が間違っていたのを直した。
(8) 入力ファイルの名前が「bascompi*.bas」とき出力ファイル名を「bascompi.asm」にするようにした。
bascompi040.exe(0) bascompi040.zip(1)
- 2011-9-5 0.39
(1) 「ddrb 255」の記法を使えるようにした。
(2) Lcd Chr(0) ; "Hello" ; Chr(0)
chr関数と文字列定数をセミコロンで区切って並べられるようにした。セミコロンの前後に空白があっても良い。
(3) LCDdefchar文でカンマの前後に空白があっても良くなった。
(4) LCDdefchar文のコード生成が間違っていたのを直した。
(5) Locate文の引数でカンマの前後に空白があっても良くなった。
(6) BASCOM-AVRモードではNext文の変数を無視するようにした。
(7) Dim文でBASCOM-AVRモードになるようにした。
(8) For文で「=」の前後に空白があっても良くなった。
(9) LCD文で文字列定数の中にカナがあるとアセンブル時に警告がでるが実害はない。
これらによって、
AVRマイコンのプログラム(LCD編)http://hidapio.jp/program6.htm
にあるサンプルがコンパイルできるようになった。
bascompi039.exe(1) bascompi039.zip(0) 注意! If文が壊れています。
- 2011-9-2 0.38
- Data &Hxx
一旦、バッファに記録し、ラベルを見つけるかプログラムの最後に到達したときに2バイト単位で.db擬似命令を出力する。これにより本来バイトであるデータがワードになってしまいコードが膨らんでいたのを防ぐことができる。ただし、偶数行の連続したData文の後ろにラベル文を置く必要があることに注意する。
- Read a
Dim文で型情報を記録していたのを使うようにし、Read文で変数がByte型である場合は1バイトだけ読み出し変数の下位バイトに格納するようにした。
- これらにより、電子掲示板の全てのパターンがコンパイルできるようになった。
bascompi038.exe(0) bascompi038.zip(0)
履歴以前の古い版
exeファイルとzipファイルの中身は全く同じものです。上の方にあるもの程、新しい版です。
- bascompi037.exe(0)
- bascompi037.zip(0)
- bascompi036.exe(0)
- bascompi036.zip(0)
- bascompi035.exe(0)
- bascompi035.zip(0)
- bascompi034.exe(0)
- bascompi034.zip(0)