2017.9.16
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
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

前へ
次へ
ホームページトップへ戻る