Code:
DEFINE LOADER_USED 1
DEFINE OSC 20
ADCON1=7
DEFINE LCD_LINES 2
DEFINE LCD_BITS 4
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 0
' Software Defines
' ----------------
iButton var PortD.2
ByteA var BYTE
ByteB var BYTE
ByteC var BYTE
ByteD var BYTE
DAYS var WORD
HOURS var BYTE
MINUTES var BYTE
SECONDS var BYTE
TempA var WORD
TempB var WORD
TempHOURS var WORD
TempMINUTES var WORD
TempSECONDS var WORD
CounterA var BYTE
DAY var BYTE
MONTH var BYTE
YEAR var BYTE
DoW var byte[3]
DATA @0,"S","a","t","S","u","n","M","o","n","T","u","e","W","e","d","T","h","u","F","r","i"
DATA @21,31,28,31,30,31,30,31,31,30,31,30,31
' Calculate and Display
' ---------------------
Loop:
' Read iButton
' ------------
owout iButton,1,[$cc,$f0,$03,$02]
owin iButton,0,[ByteD,ByteC,ByteB,ByteA]
Gosub CalculateLinearDAYS
GOSUB CalculateDateFromLinear
LCDOut $FE,$01, STR DOW\3,". ", dec2 Day,".",dec2 month,".","20",dec2 year
LCDOut $FE,$C0," ",DEC2 HOURS,":",DEC2 MINUTES,":",DEC2 SECONDS
Pause 1000
Goto Loop
'
' Calculate Linear DAYS and Day of Week
' -------------------------------------
CalculateLinearDAYS:
TempA.Highbyte=ByteA
TempA.Lowbyte=ByteB
TempB=TempA*18
DAYS=DIV32 24
HOURS=R2
TempB=TempA*12
TempHOURS=DIV32 60
MINUTES=R2
TempB=TempA*16
TempMINUTES=DIV32 60
SECONDS=R2
'
TempA.Highbyte=ByteC
TempA.Lowbyte=ByteD
TempHOURS=TempHOURS+(TempA/3600)+HOURS
TempA=TempA//3600
TempMINUTES=TempMINUTES+(TempA/60)+MINUTES
TempA=TempA//60
TempSECONDS=TempA+SECONDS
'
TempMINUTES=TempMINUTES+(TempSECONDS/60)
SECONDS=TempSECONDS//60
TempHOURS=TempHOURS+(TempMINUTES/60)
MINUTES=TempMINUTES//60
DAYS=DAYS+(TempHOURS/24)
HOURS=TempHOURS//24
'
Read (DAYS//7*3),DoW[0]
Read (DAYS//7*3+1),DoW[1]
Read (DAYS//7*3+2),DoW[2]
'
Return
' Subroutine Calculates Date from Linear Days
' -------------------------------------------
CalculateDateFromLinear:
YEAR=0
DAYS=DAYS+1
For CounterA=4 to 183
TempA=CounterA//4
TempB=365
If TempA=0 then
TempB=TempB+1
endif
If DAYS>TempB then
YEAR=YEAR+1
DAYS=DAYS-TempB
else
Goto CalculateMonth
endif
Next CounterA
' add 2000 to the YEAR value, ie YEAR=4 implies 2004.
CalculateMonth:
MONTH=0
CalculateMonthLoop:
READ (MONTH+21),DAY
IF TempA=0 then
If MONTH=1 then DAY=DAY+1
Endif
If DAYS>DAY then
DAYS=DAYS-DAY
MONTH=MONTH+1
Goto CalculateMonthLoop
Endif
MONTH=MONTH+1
DAY=DAYS
Return
End
Best regards
Bookmarks