マイコン独立大作戦
ROM/RAM/RTCボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第27回]
●LOGファイル名を月日時分にしました
いよいよ仕上げの時が近づいてきました。
今まではテストのためにLOGファイル名は仮の名前にしていました。
本来のLOGファイル名としてはそのファイルをオープンしたときの月日時分をそのままファイル名にするつもりです。
たとえば9月15日10時52分でしたら、ファイル名は09151052.LOGになります。
そうするためには、RTC(Real Time Clock)が必要です。
RTC回路から日時データを読み取って、DATE$、TIME$関数に組み込むことは[第14回]で行ないました。
ND80Z3.5(USB接続型)への組込みです。
今回はそれを利用してLOGファイル名を月日時分にするようにプログラムを組み立てます。
まずは日時データの取得について整理をします。
DATE$、TIME$関数を使うとそのときの日時データがバッファに格納されます。
日時データバッファはF2C8〜F2CEです。
>p.date$,time$ 17/09/14 16:01:05 >dm f2c8,f2cf F2C8 05 01 16 04 14 09 17 9E-71 20 F5 36 C8 D6 EB FC ........q .6ネヨ.. |
日時データは4ビットのBCD数です。
BCD2桁をあわせて1バイトのデータとします。
F2C8 秒
F2C9 分
F2CA 時
F2CB 曜日
F2CC 日
F2CD 月
F2CE 年(西暦年の下位2桁)
実はDATE$、TIME$はシステムプログラムに組み込んだRTC READ/WRITEルーチンをコールしています。
RTCREADはアドレス3E7Fです。
RTCREADをコールするとそのときの日時データがバッファに入ります。
>usr($3e7f) >dm f2c8,f2cf F2C8 06 56 17 04 14 09 17 9E-71 20 F5 36 C8 D6 EB FC .V......q .6ネヨ.. |
ここまで確認ができましたので、SDカードアクセスプログラムのLOGファイルオープンのところでRTCREADをコールして日時データを取得するように直しました。
さっそく試運転です。
>/ld nd3sd4m.bin,9000 loading ND3SD4M.BIN ...0d45(3397)bytes loaded,from 9000 to 9D44 >usr($903c) >jp 904e >jp 904b 12345670.LOG 1234567J.LOG 1234567Z.LOG 1234567j.LOG 1234567z.LOG 123456Gz.LOG 123456WZ.LOG 09141839.LOG >p.date$,time$ 17/09/14 18:39:56 |
おお!
成功です!
09141839.LOGが作成されました。
せっかくここまでできましたから、ついでにLOGファイル名が重複したときの対策についてもテストをしてみました。
LOGファイルはZB3BASICの起動時にOPENするように考えています。
LOGファイル名は分の単位ですからひょっとすると1分以内にZB3BASICを再起動したりすると、同じファイル名ができてしまう可能性があります。
また年はありませんから前年作成したLOGファイルと同じ日時にLOGファイルがOPENされてしまうということも無いとはいえません。
そのための対策としてLOGファイル名が重複した場合には末尾桁から順に計算によってアルファベットに置き換えるように考えました。
もとは小文字にも置き換えるようにしてあったのですが、前回の問題によって小文字への置き換えはしないことにしました。
>p.time$ 18:41:57 >jp 904e >jp 904e >jp 904e >jp 904e >jp 904e >jp 904e >jp 904e >p.time$ 18:42:40 >jp 904e >jp 904e >p.time$ 18:42:59 >jp 904b 12345670.LOG 1234567J.LOG 1234567Z.LOG 1234567j.LOG 1234567z.LOG 123456Gz.LOG 123456WZ.LOG 09141839.LOG 09141840.LOG 0914184J.LOG 0914184Z.LOG 09141841.LOG 09141842.LOG 0914184B.LOG 0914184R.LOG 091418DR.LOG 091418TR.LOG 09141HTR.LOG 09141XTR.LOG 0914AXTR.LOG 0914QXTR.LOG |
18時42分の1分間に繰り返しLOGファイルOPEN(904E)を実行したあと、LOGDIR表示(904B)を行いました。
文字の置き換えルールは次の通りです。
1桁の文字コード(月日時分は”0〜9”だけで構成されますから、30〜39)に10を加算します(全て16進数です)。
30に10を加算すると40(”@”)になって不都合なので30だけは1Aを加算して4A(”J”)にします。
31〜39は41〜49(”A”〜”I”)になります。
さらに重ねて同じファイルが作成される場合には、41〜4Aに10を加算して51〜5A(”Q”〜”Z”)にします。
以上を整理すると次のようになります。
31(”1”)→41(”A”)→51(”Q”)
32(”2”)→42(”B”)→52(”R”)
33(”3”)→43(”C”)→53(”S”)
34(”4”)→44(”D”)→54(”T”)
35(”5”)→45(”E”)→55(”U”)
36(”6”)→46(”F”)→56(”V”)
37(”7”)→47(”G”)→57(”W”)
38(”8”)→48(”H”)→58(”X”)
39(”9”)→49(”I”)→59(”Y”)
30(”0”)→4A(”J”)→5A(”Z”)
このように変更してさらになお同じLOGファイル名をOPENしなければならない場合には(現実にはちょっとありえないのですが)ひとつ上位の桁に対して同じことを行ないます。
上のテストではそのルールが正しく働いていることがわかります。
ROM/RAM/RTCボードの製作[第27回]
2017.9.16upload
前へ
次へ
ホームページトップへ戻る