Hi Jeff,
Give this a shot. I've tested it on a 16F627A, and it works fine.
Code:
DEFINE DEBUG_REG PORTB
DEFINE DEBUG_BIT 7
DEFINE DEBUG_BAUD 19200
DEFINE DEBUG_MODE 0 ' 1 = inverted, 0 = true
' DS1307 control pins
SDA VAR PORTB.1 ' DS1307 SDA pin #5
SCL VAR PORTB.2 ' DS1307 SCL pin #6
TRISA = %11111111
LeftButton var PORTA.1 ' Control Button
RghtButton var PORTA.2
second var byte
minute var byte
hour var byte
tock var byte
CMCON = 7 ' all digital - comparators disabled
PAUSE 1000 ' Allow power to stabilize on power-up
GOSUB Blink_1200 ' Blink 12:00 time on entry
Tick:
gosub Read_1307 ' Read the time from the DS1307 Clock
tock = second // 2 ' Get the Mod of second
If tock = 0 then
High PORTB.0 ' Turn on LED connected to PORTB.0
DEBUG "P",12,"~" ' Turn on colon
else
Low PORTB.0 ' Turn off LED connected to PORTB.0
DEBUG "P",0,"~" ' Turn off colon
endif
' Display time
DEBUG "D",hour DIG 1,hour DIG 0,minute DIG 1, minute DIG 0
PAUSE 1000
Goto Tick ' Go back to Tick
Read_1307:
' Read time Seconds,Minutes,Hours
I2CREAD SDA,SCL,$D0,$00,[second,minute,hour] ' Read time from DS1307
return
Write_1307:
' Set time to 12:00
I2CWRITE SDA,SCL,$D0,$00,[$00,$00,$0C,$01,$01,$01,$00,$90] ' Write to DS1307
RETURN ' Sec Min Hr Day D M Y Control
Blink_1200:
' Write 12:00 on display
DEBUG "D",1,2,0,0
DEBUG "P",12,"~" ' Turn on colon
pause 1000
DEBUG "C","~" ' Clear Display
DEBUG "P",0,"~" ' Turn off colon
pause 1000
if LeftButton = 1 then
gosub Write_1307
'goto Tick
return
endif
Goto Blink_1200
End
You can compare this to your original to see where I made the few changes.
Bookmarks