I've directly given the registers the bcd values and monitored the bcd value of the register as it changes but it still increase's the tens of the hours by 4 when seconds=40, i have not addressed the unused bits in the registers, so i cannot see it being that.
i am lost for ideas
Code:
@ device pic16f870,WDT_OFF 'Watch Dog Timer Disabled
@ device pic16f870,PROTECT_OFF 'Code Protect Off
@ device pic16f870,XT_OSC 'Using External Oscillator
@ device pic16f870,BOD_OFF 'Brown Out Timer Disabled
@ device pic16f870,PWRT_OFF 'Power On Timer Disabled
@ device pic16f870,LVP_OFF 'Low Voltage Programmed Disabled
DEFINE OSC 4
ADCON0.0=0
ADCON1=7 ' ALL PINS SET TO DIGITAL
TRISB = %00000000
TRISA = %00000000
TRISC.0=0
'rtc pins
clk_pin var portc.5
data_pin var portc.6
number var word
display VAR PORTB
segment var PORTA
seg_number var byte
digit var byte
delay var word
'register address's
reg_seconds CON $02
reg_minutes con $03
reg_hours con $04
reg_days con $05
reg_weekdays con $06
reg_months_century con $07
reg_years con $08
reg_minute_alarm con $09
reg_hour_alarm con $0A
reg_day_alarm con $0B
reg_weekday_alarm con $0C
rtc_write var byte
rtc_read var byte
rtc_write=$a2
rtc_read=$a3
'time variables
bcdseconds var BYTE
bcdminutes var BYTE
bcdhours var BYTE
bcddays var BYTE
bcdyears var BYTE
seconds var BYTE
minutes var BYTE
hours var BYTE
days var BYTE
years var BYTE
'-----------------------------------------------------
'initial time variable values
seconds=%0100011
minutes=%0100011
hours=%100011
'days=23
'years=7
' -------------------------------------------------------
'write intial variable's to the relevant rtc registers
init:
'bcd_encode:
'bcdseconds=seconds dig 1
'bcdseconds=bcdseconds<<4
'bcdseconds=bcdseconds+seconds dig 0
'bcdminutes=minutes dig 1
'bcdminutes=bcdminutes <<4
'bcdminutes=bcdminutes+minutes dig 0
'bcdhours=hours dig 1
'bcdhours=bcdhours<<4
'bcdhours=bcdhours+hours dig 0
pause 10
I2CWrite data_pin,clk_pin,$A2,reg_seconds,[seconds,minutes,hours]
pause 100
clock_read:
I2CRead data_pin,clk_pin,$A2,reg_seconds,[bcdseconds,bcdminutes,bcdhours]
pause 10
'bcd_decode: 'decodes bcd to decimal
'seconds=(bcdseconds>>4)*10+(bcdseconds & %00001111)
'minutes=(bcdminutes>>4)*10+(bcdminutes & %00001111)
'hours=(bcdhours>>4)*10+(bcdhours & %00001111)
OUT:
pause 20
serout2 portc.1,16780,["(",HEX bcdhours,")","(",HEX bcdminutes,")","(",HEX bcdseconds,")"]
PORTC.0=1
PAUSE 100
PORTC.0=0
goto clock_read
Bookmarks