GOTO OverDS3231
SYMBOL RTC_SDA PORTA.4
SYMBOL RTC_SCL PORTA.5
SYMBOL AL1_OpS %00001111
SYMBOL AL1_S %00001110
SYMBOL AL1_MS %00001100
SYMBOL AL1_HMS %00001000
SYMBOL AL1_DtHMS %00000000
SYMBOL AL1_DayHMS %00010000
SYMBOL AL2_OpM %00001110
SYMBOL AL2_M %00001100
SYMBOL AL2_HM %00001000
SYMBOL AL2_DtHM %00000000
SYMBOL AL2_DayHM %00010000
DIM RTCYear AS BYTE
DIM RTCMonth AS BYTE
DIM RTCDate AS BYTE
DIM RTCDay AS BYTE
DIM RTCHour AS BYTE
DIM RTCMin AS BYTE
DIM RTCSec AS BYTE
DIM RTCCtrl AS BYTE
DIM HexValue AS BYTE
DIM DecValue AS BYTE
DIM I2C_Adr AS BYTE
DIM I2C_Flags AS BYTE
SYMBOL I2C_NACK I2C_Flags.0
DIM RTC_Reg AS BYTE
SYMBOL RTC_EOsc RTC_Reg.7
SYMBOL RTC_BBSQW RTC_Reg.6
SYMBOL RTC_CONV RTC_Reg.5
SYMBOL RTC_RS2 RTC_Reg.4
SYMBOL RTC_RS1 RTC_Reg.3
SYMBOL RTC_INTCN RTC_Reg.2
SYMBOL RTC_A2IE RTC_Reg.1
SYMBOL RTC_A1IE RTC_Reg.0
SYMBOL RTC_OSF RTC_Reg.7
SYMBOL RTC_EN32kHz RTC_Reg.3
SYMBOL RTC_BSY RTC_Reg.2
SYMBOL RTC_A2F RTC_Reg.1
SYMBOL RTC_A1F RTC_Reg.0
SetTime:
I2C_NACK = 0
I2C_Adr = $00
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear], I2CNACK
RETURN
GetTime:
I2C_NACK = 0
I2C_Adr = $00
I2CRead RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCSec, RTCMin, RTCHour, RTCDay, RTCDate, RTCMonth, RTCYear], I2CNACK
RETURN
SetAlarm1:
I2C_Adr = $07
I2C_NACK = 0
RTCSec.7 = RTC_Reg.0
RTCMin.7 = RTC_Reg.1
RTCHour.7 = RTC_Reg.2
IF RTC_Reg.3 = 1 THEN
RTCDate.7 = RTC_Reg.3
RTCDate.6 = 0
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCSec, RTCMin, RTCHour, RTCDate], I2CNACK
ELSE
IF RTC_Reg.4 = 1 THEN
RTCDay.7 = 0
RTCDay.6 = 1
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCSec, RTCMin, RTCHour, RTCDay], I2CNACK
ELSE
RTCDate.7 = 0
RTCDate.6 = 0
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCSec, RTCMin, RTCHour, RTCDate], I2CNACK
ENDIF
ENDIF
RETURN
SetAlarm2:
I2C_Adr = $0B
I2C_NACK = 0
RTCMin.7 = RTC_Reg.1
RTCHour.7 = RTC_Reg.2
IF RTC_Reg.3 = 1 THEN
RTCDate.7 = RTC_Reg.3
RTCDate.6 = 0
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCMin, RTCHour, RTCDate], I2CNACK
ELSE
IF RTC_Reg.4 = 1 THEN
RTCDay.7 = 0
RTCDay.6 = 1
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCMin, RTCHour, RTCDay], I2CNACK
ELSE
RTCDate.7 = 0
RTCDate.6 = 0
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTCMin, RTCHour, RTCDate], I2CNACK
ENDIF
ENDIF
RETURN
ReadControlRegister:
I2C_Adr = $0E
I2C_NACK = 0
I2CRead RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTC_Reg], I2CNACK
RETURN
WriteControlRegister:
I2C_Adr = $0E
I2C_NACK = 0
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTC_Reg], I2CNACK
RETURN
ReadStatusRegister:
I2C_Adr = $0F
I2C_NACK = 0
I2CRead RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTC_Reg], I2CNACK
RETURN
WriteStatusRegister:
I2C_Adr = $0F
I2C_NACK = 0
I2CWrite RTC_SDA, RTC_SCL, $D0, I2C_Adr, [RTC_Reg], I2CNACK
RETURN
I2CNACK:
I2C_NACK = 1
RETURN
Hex2BCD:
DecValue = 10 * (HexValue >> 4)
DecValue = DecValue + (HexValue & $0F)
RETURN
BCD2Hex:
HexValue = (DecValue DIG 0) + ((DecValue DIG 1) << 4)
RETURN
OverDS3231: