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