8080Aマイコンボードの開発環境が落ち着いたので、I2C接続のRTCを読み出すプログラムを書いて遊びました。I2C接続のRTCは、DS3231のモジュールがアマゾンの通販で安く売ってますので、それを使ってます。レジスタを読み出してHEXで表示するだけでOKなので、ラクチン。
前にmicrosoft basic でテストしていた内容を下敷きに、アセンブラでRTCの読み出し表示プログラム(要は時計)を実装しました。
テスト中。いい感じ。
こちらに、作成したプログラムを貼っておきます。
i2ctest_8080_lstI2Cの初期化がうまくいかない(?)ことがたまにあり、これはbasicで試していた時もそうだったのですが、なぜかよくわかっていません(多分STOPコンディションなど半端な状態のまま、終わったりした影響が次に実行するときに出るんだと思う)。
ま、後でよく考えよう。
RTCの読み出しと表示を合わせて3ms程度で終わります。basic と比べるとやっぱり圧倒的に速い。ロジアナでデータとアドレスのバスを観測すると、一つずつ命令を実行している様子が楽しめて、可愛らしく感じるものがあります。ビットもえー、って感じ?
I2Cのクロックは63kHz程度になってます。マニュアルによると、PCF8584に12MHz クロックを入れたときに90kHzになる設定にしているのですが、8080Aなので、実際に入れているのは、2MHz クロックなんだけど、何となく動いている。どないやねん(これが初期化に失敗する理由?)。設定値を変更して遊ぼう。
(追記)設定を変えて試そうとしてみたら、設定を間違えていることに気づき、直したら全く動かない。いろいろやってみたけど、間違った設置値でしか動かせてない。やっぱりちゃんとしたクロックを送ってあげないとダメなのかな?(追記終わり)
最初はおっかなびっくりアセンブラを書いていましたが、パターンに慣れてくると、気軽に手が動くようになってきた。生成される機械語もアセンブラだと短いし、結構楽しくなってきました。
smallc は変数の受け渡しがいまだによくわからなくって勉強中。smallcでめちゃくちゃ冗長なコードが生成されるのを見てしまうと、やっぱり遊ぶのには、アセンブラの方がいいかも、と思える。
次は、I2C接続のeepromの読み書きをしてみようと思っているところです。