2018年11月3日土曜日

PIAのみでRTCからの時刻の読み書きができました

PIAに接続したRTCから時刻を読み書きするアセンブラのプログラムが完成


前回(10月27日)はRTCモジュールから時刻を読み込むまででしたが、時刻の書き込みもできるようになりました。
読み込み・書き込みプログラムはそれぞれRTC_RD.CMD、RTC_WR.CMDですが、読み込みプログラムに、FLEX9の起動時に時刻をRTCモジュールから読み込んでFLEX9の日付を設定する機能を追加したSETDATE.CMDを用意しました。

RTC_RD.CMDとRTC_WR.CMDはFLEX9上のコマンドとして使用します。


FLEX9システムに組み込んで使用する


SETDATE.CMDはFLEX9の起動時に自動的に実行されるように、STARTUP.TXTに書き込んでおいて使用しますが、FLEX9の起動時にデフォルトで実行される日付入力ルーチンが不要になりますので、FLEX9のシステムを一箇所変更します。

FLEX9システムをTrk01,Sct01から保存した場合、初期化ルーチンはSct08にあります。
そのうちの日付入力ルーチンはオフセット$76からのBD,CA,AC (JSR $CAAC) ですので、このBDを39 (RTS)に変更します。

初期化ルーチン(変更前)
初期化ルーチン(変更後)

これによって、起動時に日付を問い合わせてくることは無くなり、代わりに、STARTUP.TXTに書き込んだSETDATE.CMDがRTCモジュールから取得した日付を設定してくれることになります。

その様子を下図に示します。


起動画面(従来のもの)

今までは、起動時に日付を「月、日、年」の順に入力する必要がありました。
(FLEX9では時刻は管理していませんので、年月日のみです。)
それに対して、SETDATE.CMDを組み込むと、

起動画面(RTCモジュールから読み込み)

日付を問い合わせてくることなく、RTCモジュールから取得した日付と時刻を表示してそのままコマンド入力待ちになります。DATEコマンドを入力してみると、確かに日付が設定されていることが分かります。
なお、RTCモジュールが無い場合には、デフォルトの日付入力ルーチンが呼び出されて手動で日付を入力することになります。

起動画面(RTCモジュールが無い場合)

作成したRTC_RD.CMD, RTC_WR.CMD, SETDATE.CMDのソースをOneDriveに上げておきます。
入出力ルーチンなど一部にFLEX9のシステムルーチンを使用していますが、I2C通信部分は一般的な6809のアセンブラですので、I2C機能を持たないマイコンで、しかもアセンブラでI2C通信をしたいという場合の参考になれば嬉しいです。
(I2Cの解説も、DS3231のマニュアルも、もう少し分かりやすく書いてもらえればこんなに苦労しなくても済んだかもしれないのに...愚痴でした。)

0 件のコメント:

コメントを投稿