These newer PICs that allow you to assign onboard peripherals like hardware PWM, USART, and a lot more, to different pins, are really nifty, and a lot like using the higher-end 24 series.
'**************************************************************** '* 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
RTCC clock functions. These PICs are definitely worth looking at, so have fun...;o)
It does take a bit of time to learn how to use these guys, but it's very cool. You can re-
map almost every onboard hardware peripheral to work on any pin.
Re: CAN header and EXT asm question
Interface board with SPI controlled MCP 2515 and line driver to use with non CAN enabled PIC's
retepsnikrep Today, 08:34https://www.aliexpress.com/item/1005006850683509.html
Line driver to use with CAN enabled PIC's....