久々に、室内温度計。RTC-8564の時刻設定ルーチンを作っていなかったので、作ってみたところ、2時間ほどの作業で出来てしまった。PIC-BASICとHSPの組み合わせ最強ですな。こんな感じ。
HSP ソース
・・・・中略・・・・
; 時刻設定
*set_time
comput "t" ;時刻設定コマンド送信
a = gettime(5) ;分
min = int((a - (a/10*10)) + a/10*16) ;bcdコードへ変換
computc min ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
pos 0,100 ;出力位置設定
print "分 = " + min
a = gettime(4) ;時刻
hour = int((a - (a/10*10)) + a/10*16)
computc hour ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "時刻 = " + hour
a = gettime(3) ;日
day = int((a - (a/10*10)) + a/10*16)
computc day ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "日 = " + day
a = gettime(2) ;曜日
week = int((a - (a/10*10)) + a/10*16)
computc week ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "曜日 = " + week
a = gettime(1) ;月
month = int((a - (a/10*10)) + a/10*16)
computc month ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "月 = " + month
a = gettime(0) - 2000 ;年
year = int((a - (a/10*10)) + a/10*16)
computc year ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "年 = " + year
print "END"
stop
PIC-BASIC ソース
・・・・中略・・・・
While 1
Clearlcd
Putlcd "I2C EEPROM R/W"
Setpos 0,1
Putlcd "ready..."
'コマンド待ち
adr=0
cmd=0
Do
Serin pb115200,100,cmd
If(rb.Bit0=0) Then Gosub romview '閲覧モード
Until (cmd=0)
cmd = cmd | &h20 '小文字化
If cmd = &h72 Then Gosub romread '読み込みモード[r]
If cmd = &h77 Then Gosub romwrite '書き込みモード[w]
If cmd = &h74 Then Gosub set_time '時刻設定モード[t]
Wend
・・・・中略・・・・
'//// 時刻設定モード ////
set_time:
Gosub init 'I2C初期設定
Sleep 12 'SHT11のready待ち
Clearlcd
Putlcd "time set mode"
Serin pb115200,1000, min
Serin pb115200,1000, hour
Serin pb115200,1000, day
Serin pb115200,1000, week
Serin pb115200,1000, month
Serin pb115200,1000, year
Gosub stCond
sdata = rtcaddr '送信データへスレーブアドレスセット
Gosub send
sdata = &h03 '分アドレス送信
Gosub send
sdata = min '分データ送信
Gosub send
sdata = hour '時刻データ
Gosub send
sdata = day '日データ
Gosub send
sdata = week '曜日データ
Gosub send
sdata = month '月データ
Gosub send
sdata = year '年データ
Gosub send
Gosub stopseq
Sleep 1000
Return
HSP ソース
・・・・中略・・・・
; 時刻設定
*set_time
comput "t" ;時刻設定コマンド送信
a = gettime(5) ;分
min = int((a - (a/10*10)) + a/10*16) ;bcdコードへ変換
computc min ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
pos 0,100 ;出力位置設定
print "分 = " + min
a = gettime(4) ;時刻
hour = int((a - (a/10*10)) + a/10*16)
computc hour ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "時刻 = " + hour
a = gettime(3) ;日
day = int((a - (a/10*10)) + a/10*16)
computc day ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "日 = " + day
a = gettime(2) ;曜日
week = int((a - (a/10*10)) + a/10*16)
computc week ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "曜日 = " + week
a = gettime(1) ;月
month = int((a - (a/10*10)) + a/10*16)
computc month ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "月 = " + month
a = gettime(0) - 2000 ;年
year = int((a - (a/10*10)) + a/10*16)
computc year ;シリアルポートから1バイト送信
wait 2 ;20msecウエイト
print "年 = " + year
print "END"
stop
PIC-BASIC ソース
・・・・中略・・・・
While 1
Clearlcd
Putlcd "I2C EEPROM R/W"
Setpos 0,1
Putlcd "ready..."
'コマンド待ち
adr=0
cmd=0
Do
Serin pb115200,100,cmd
If(rb.Bit0=0) Then Gosub romview '閲覧モード
Until (cmd=0)
cmd = cmd | &h20 '小文字化
If cmd = &h72 Then Gosub romread '読み込みモード[r]
If cmd = &h77 Then Gosub romwrite '書き込みモード[w]
If cmd = &h74 Then Gosub set_time '時刻設定モード[t]
Wend
・・・・中略・・・・
'//// 時刻設定モード ////
set_time:
Gosub init 'I2C初期設定
Sleep 12 'SHT11のready待ち
Clearlcd
Putlcd "time set mode"
Serin pb115200,1000, min
Serin pb115200,1000, hour
Serin pb115200,1000, day
Serin pb115200,1000, week
Serin pb115200,1000, month
Serin pb115200,1000, year
Gosub stCond
sdata = rtcaddr '送信データへスレーブアドレスセット
Gosub send
sdata = &h03 '分アドレス送信
Gosub send
sdata = min '分データ送信
Gosub send
sdata = hour '時刻データ
Gosub send
sdata = day '日データ
Gosub send
sdata = week '曜日データ
Gosub send
sdata = month '月データ
Gosub send
sdata = year '年データ
Gosub send
Gosub stopseq
Sleep 1000
Return