Guys,
I came across a post where the internal timer is used to display the time rather than a DS1307 (as I'm having issues reading a DS1307 for some reason as per my other post). Here is the thread in question http://www.picbasic.co.uk/forum/showthread.php?t=2129
I've followed the notes on converting the code to run on a 20 mhz xtal, but there is one command that comes up with a syntax error
Code:
OPTION_REG=%10000111 'weak pullups off, TMRO prescale = 256
If this is commented out the code compiles for an 18F4520
Here is the code in full
Code:
ASM
__CONFIG _CONFIG1H, _OSC_HSPLL_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L
__CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
__CONFIG _CONFIG3H, _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H
__CONFIG _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
ENDASM
DEFINE OSC 48 ; config settings 18F4520, 20mhz crystal
ADCON1 = $0F
clear
DEFINE LCD_DREG PORTB ' LCD Data port
DEFINE LCD_DBIT 0 ' starting Data bit (0 or 4)
DEFINE LCD_EREG PORTB ' LCD Enable port
DEFINE LCD_EBIT 5 ' Enable bit (on EasyPIC 5 LCD)
DEFINE LCD_RSREG PORTB ' LCD Register Select port
DEFINE LCD_RSBIT 4 ' Register Select bit (on EasyPIC 5 LCD)
DEFINE LCD_BITS 4 ' LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 4 ' number of lines on LCD
DEFINE LCD_COMMANDUS 2000 ' Command delay time in us
DEFINE LCD_DATAUS 50 ' Data delay time in us
CMCON=7 'all digital
'GPIO=0
'TRISIO=0
T0CON = %00000001
OPTION_REG=%10000111 'weak pullups off, TMRO prescale = 256
INTCON=0 'interrupts off
'**********************************************************
HzTimer VAR Word '1/2 second counter (2 Hz)
HH VAR Byte ' Hours 0-23
MM VAR ByTE ' Minutes 0-59
SS VAR Byte ' Seconds 0-59
col VAR Byte ' colon 1=on, 0=0ff
HzTimer=$7A12 'for 1/2 Sec
HH=12:MM=0:SS=0:col=0 'initial conditions (12:00 O'clock noon)
'**********************************************************
Main:
ClockLoop: IF intcon.2=0 THEN ClockLoop 'Poll for TMRO overflow
INTCON.2=0 ' Clear TMRO overflow flag
HzTimer=HzTimer-$1000 'decrement timer count
IF HzTimer < $1000 THEN
IF Col=10 THEN ' update time'
SS=SS+1
'GPIO.1=0 ' Turn off GP1
IF SS=60 THEN ' minute
SS=0
MM=MM+1
IF MM=60 THEN ' hour
MM=0
HH=HH+1
IF HH=24 THEN HH=0
'IF HH=20 then GPIO.0 = 1 ' Turn on GP0 at 8:00pm
' GPIO.1=1 ' Turn On GP1 for 1 second on the hour
ENDIF ' Adjust these to meet your needs
'if MM=15 then GPIO.0 = 0 ' Turn off GP0 at 8:15pm
ENDIF
ENDIF
Col=Col+1
HzTimer=HzTimer+$7A12 ' Add 0.5 seconds to count
ELSE
' Do something here but must be less than 65.5 mSec
ENDIF
if Col=11 then
Col=1
endif
LCDOut $FE,$D4,HH,MM,SS
GOTO Main 'forever
' **************************************************************
END
Can anyone advise how to set up the timer and prescaler settings as per the original code for the 12F chip ?
Cheers
Malcolm
Bookmarks