Code:
'FL PIC18F6680
' 18F6680(PIC) 24FC1025(EEPROM) DS1337C(RTC)
DEFINE OSC 20
@ __CONFIG _CONFIG1H, _OSC_HS_1H
@ __CONFIG _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
@ __CONFIG _CONFIG4L, _LVP_OFF_4L
DEFINE LCD_DREG PORTG
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
DEFINE LCD_COMMANDUS 3000
DEFINE LCD_DATAUS 150
DPIN VAR PORTB.2 'I2C DATA PIN
CPIN VAR PORTB.1 'I2C CLOCK PIN
ADDR VAR WORD
DATI VAR BYTE
DATO VAR BYTE
' -------------- RTC definitions -----------------
RTC CON %11010000
SecReg CON $00 ' seconds address (00 - 59) ' MSB of SecReg must be set to a 0 to enable RTC
ContReg CON $0E ' control register
cntrl CON %00000000 ' sets the SQW/OUT to 1Hz pulse, logic level low
I2CWRITE DPIN, CPIN, RTC, ContReg, [cntrl]
' The variable below holds the values entered:
' entered by the user
sec VAR BYTE ' seconds
mins VAR BYTE ' minutes
hr VAR BYTE ' hours
day VAR BYTE ' day
date VAR BYTE ' date
mon VAR BYTE ' month
yr VAR BYTE ' year
Esec VAR BYTE ' seconds
Emins VAR BYTE ' minutes
Ehr VAR BYTE ' hours
I VAR BYTE
PAUSE 1000
'GOSUB SET_RTC
RUN:
ADDR = 0
'SAVE DATA
FOR I = 0 TO 100
ADDR = ADDR + 3
I2CREAD DPIN, CPIN, RTC, SecReg, [sec,mins,hr,day,date,mon,yr]
PAUSE 100
I2CWRITE DPIN,CPIN,$A0,ADDR,[hr,mins,sec]
PAUSE 100
I2CREAD DPIN,CPIN,$A0,ADDR,[Ehr,Emins,Esec]
PAUSE 100
LCDOUT $FE,1,"RTC ", HEX2 hr, ":", HEX2 mins, ":", HEX2 sec
LCDOUT $FE,$C0,"EEP ",HEX2 Ehr, ":", HEX2 Emins, ":", HEX2 Esec
LCDOUT $FE,$90,"ADDR ", DEC ADDR
PAUSE 1000
NEXT I
'READ SAVED DATA
ADDR = 0
FOR I = 0 TO 100
ADDR = ADDR + 3
I2CREAD DPIN,CPIN,$A0,ADDR,[Ehr,Emins,Esec]
PAUSE 100
LCDOUT $FE,1,"READ SAVED "
LCDOUT $FE,$C0,"EEP ",HEX2 Ehr, ":", HEX2 Emins, ":", HEX2 Esec
LCDOUT $FE,$90,"ADDR ", DEC ADDR
NEXT I
GOTO RUN
Bookmarks