Code:
'****************************************************************
'* Name : TST_25J11_RTC.BAS *
'* Author : B. Reynolds *
'* Notice : Copyright (c) 2009 http://www.Rentron.com *
'* : All Rights Reserved *
'* Date : 1/25/2010 *
'* Version : 1.0 *
'* Notes : Testing 18F25J11 RTCC & remappable pin options. *
'* : *
'****************************************************************
' NOTE: CONFIG options below are placed in the PBP 18F25J11.INC file with
' default config options commented out.
' CONFIG OSC=INTOSC, LPT1OSC=OFF, CP0=OFF, WDTEN=ON, XINST=OFF, IOL1WAY=OFF
' CONFIG STVREN=OFF, T1DIG=ON, FCMEN=OFF, WDTPS=512, RTCOSC=T1OSCREF
' Connect a 32.768 kHz watch crystal between pins 11 & 12 T1CKI & T1OSI
' with caps to match your crystal load capacitance.
' 11 12
' |---||---|
' | xtal |
' _|_ _|_
' ___ ___ 2 x 12pF caps
' | |
' gnd gnd
DEFINE DEBUG_REG PORTB
DEFINE DEBUG_BIT 3 ' RB3 sends serial data to PC
DEFINE DEBUG_BAUD 19200 ' 19200 bps
DEFINE DEBUG_MODE 0 ' 1 = inverted, 0 = true
DEFINE OSC 8
X VAR BYTE
Hours VAR BYTE
Minutes VAR BYTE
Seconds VAR BYTE
Year VAR BYTE
Month VAR BYTE
Day VAR BYTE
Weekday VAR BYTE
Duty VAR WORD
OSCCON = %01110000 ' using 8MHz internal osc
' // A/D disable & setup Timer1 for RTCC //
ANCON0 = $ff
ANCON1 = $1f ' disable A/D on all analog pins
T1CON = %10001001 ' external xtal, 1:1 prescale, no synch, 8-bit, timer1 on
' // PWM & port setup //
Duty = 400 ' 50-50 PWM duty-cycle
T2CON = %00000100 ' timer2 on, 1:1 prescale
PORTA = 0
PORTB = 8 ' RB3 debug pin idles high
PORTC = 0 ' PWM outputs low at POR
TRISA = 0
TRISB = 0
TRISC = 0
CCP1CON = %00001100 ' setup for single-ended PWM output
PR2 = 199 ' setup for 10kHz
PSTR1CON = %00000001 ' P1A is driven by PWM
CCP1CON.4 = Duty.0 ' load 10-bit duty cycle into
CCP1CON.5 = Duty.1 ' duty registers
CCPR1L = Duty >> 2
' // re-map PWM output to RA0, RC4 and RC3 pins //
RPOR0 = 14 ' RA0, RP0 = P1A output
RPOR15 = 14 ' RC4. RP15 = P1A output
RPOR14 = 14 ' RC3, RP14 = P1A output
' // set initial time/date at POR //
GOSUB WRT_Enable ' run unlock sequence to enable RTCC writes
GOSUB LoadTime ' setup RTCC time/date
GOSUB WRT_Disable ' disable RTC writes after initial time & date setup
Main:
RTCCFG = 3 ' set pointer to Year
Year = RTCVALL ' read Year
RTCCFG = 2 ' set pointer to Month & Day
Day = RTCVALL ' read Day
Month = RTCVALH ' read Month & decrement pointer
Hours = RTCVALL ' read Hours
Weekday = RTCVALH ' read Weekday & decrement pointer
Seconds = RTCVALL ' read Seconds
Minutes = RTCVALH ' read Minutes (pointer already at 0)
PAUSE 990
' // date/time serial output format //
' Time: 03:33:00
' Monday:
' Date: 01:25:2010
' // display Hours, Minutes, Seconds //
DEBUG "Time: ",DEC (Hours>>4),DEC Hours & $0F,":", DEC (Minutes>>4),_
DEC Minutes & $0F,":", DEC (Seconds>>4),DEC Seconds & $0F,13,10
' // display day of week //
SELECT CASE Weekday
CASE 0
DEBUG "Sunday: ",13,10
CASE 1
DEBUG "Monday: ",13,10
CASE 2
DEBUG "Tuesday: ",13,10
CASE 3
DEBUG "Wednesday: ",13,10
CASE 4
DEBUG "Thursday: ",13,10
CASE 5
DEBUG "Friday: ",13,10
CASE 6
DEBUG "Saturday: ",13,10
END SELECT
' // display Month, Day, Year //
DEBUG "Date: ",DEC2 Month & $1F,":", DEC (Day>>4), DEC Day & $0F,":",_
"20",DEC (Year>>4), DEC Year & $0F,13,10,13,10,13,10
GOTO Main
LoadTime: ' // NOTE: time & date is in BCD format //
RTCCFG = %00100011 ' set pointer to Year
RTCVALL = %00010000 ' set Year to 2010
RTCCFG = %00100010 ' set pointer to Month & Day
RTCVALL = %00100101 ' set Day to the 25rd
RTCVALH = 1 ' set Month to Jan (decrements pointer to Weekday & Hours)
RTCVALL = %00000011 ' set Hour to 3
RTCVALH = 1 ' 0=Sun, 6=Sat. set Weekday (decrements pointer to Minutes & Seconds)
RTCVALL = 0 ' set Seconds to 0
RTCVALH = %00110011 ' set Minutes to 33
RTCCFG.7 = 1 ' RTCC enabled
RETURN
WRT_Enable: ' enable writes to RTCC registers
EECON2 = $55 ' unlock sequence
EECON2 = $AA '
RTCCFG.5 = 1 ' write enable RTCC register
RETURN
WRT_Disable: ' disable writes to RTCC registers
EECON2 = $55
EECON2 = $AA
RTCCFG.5 = 0
RETURN
END
This shows how to re-map PWM output to RA0, RC4 and RC3 pins, and use the built-in
Bookmarks