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
If this is commented out the code compiles for an 18F4520Code:OPTION_REG=%10000111 'weak pullups off, TMRO prescale = 256
Here is the code in full
Can anyone advise how to set up the timer and prescaler settings as per the original code for the 12F chip ?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
Cheers
Malcolm




Bookmarks