Thanks for the info. It helped a little but I'm nowhere closer now than I was on Friday. Not one CAN frame received, nor was one sent. Part of my problem is that I don't completely understand the register settings listed in the datasheet. I keep reading it but it's not 100% clear so I'm sure my settings in the code aren't going to work. Can you (or anyone else) take a look at this and let me know where my mistakes are? I'm sure there are plenty
Code:
DEFINE OSC 20
' REGISTERS AND PINOUT ( 1 = IN; 0 = OUT )
' ================================================================
'76543210 '76543210
TRISA = %11011111: PORTA = %00000000
TRISB = %00000000: PORTB = %00000001
TRISC = %00010000: PORTC = %00000000
TRISD = %00000000: PORTD = %00000000
TRISE = %00000000: PORTE = %00000000
ADCON0 = %00000000
ADCON1 = %00000000
ADRESH = %00000000
ADRESL = %00000000
CMCON = %00000000
SSPSTAT = %00000000 'I'M A LITTLE LOST WITH THE SSPSTAT AND SSPCON1
SSPCON1 = %00110000
' VARIABLES AND CONSTANTS
'==============================================================================
TXBNCTRL var byte
TXBNSIDH var byte
TXBNSIDL VAR BYTE
TXBNDLC VAR BYTE
TXBNDM7 VAR BYTE
TXBNDM6 VAR BYTE
TXBNDM5 VAR BYTE
TXBNDM4 VAR BYTE
TXBNDM3 VAR BYTE
TXBNDM2 VAR BYTE
TXBNDM1 VAR BYTE
TXBNDM0 VAR BYTE
B0 VAR BYTE
B1 VAR BYTE
B2 VAR BYTE
B3 VAR BYTE
B4 VAR BYTE
B5 VAR BYTE
B6 VAR BYTE
B7 VAR BYTE
B7 = TXBNDM7 ' 8TH BYTE OF DATA FRAME
B6 = TXBNDM6 ' 7TH BYTE OF DATA FRAME
B5 = TXBNDM5 ' 6TH BYTE OF DATA FRAME
B4 = TXBNDM4 ' 5TH BYTE OF DATA FRAME
B3 = TXBNDM3 ' 4TH BYTE OF DATA FRAME
B2 = TXBNDM2 ' 3RD BYTE OF DATA FRAME
B1 = TXBNDM1 ' 2ND BYTE OF DATA FRAME
B0 = TXBNDM0 ' 1ST BYTE OF DATA FRAME
'THE PIC MUST ENABLE THE CANINTE.TXINE BIT TO CHANGE THE INTERRUPT FLAG
'THE PIC MUST CLEAR THE TXBNCTRL.TXREQ BIT BEFORE WRITING TO THE TRANSMIT BUFFER
' ALIAS & MODIFIERS
' ================================================================
CS VAR PORTB.4
SCLK VAR PORTC.3
SDI VAR PORTB.0
SDO VAR PORTC.7
SENDLED VAR PORTA.5 'LED TO INDICATE THE PROGRAM IS IN THE SENDING ROUTINE
MAINLED VAR PORTE.2 'LED TO INDICATE THE PROGRAM IS IN THE MAIN ROUTINE
' START OF PROGRAM
'================================================================================
START:
TOGGLE MAINLED 'LED INDICATING THE 18F4550 IS IN THE MAIN ROUTINE
PAUSE 100
GOSUB SENDCANDATA 'CAN DATA IS ABOUT TO BE SENT......OR WE COULD ONLY WISH......
GOTO START
' SEND CAN DATA SECTION
'===============================================================================
SENDCANDATA:
PAUSE 50
TOGGLE SENDLED ' LED FOR DEBUGGING
LOW CS ' CS PIN IS HELD LOW IN ORDER TO TRANSMIT DATA
TXBNDLC = %00000111 ' DATA LENGTH. THIS IS FOR 8 BYTES.
TXBNCTRL = %00001011 ' THE TXBNCTRL IS A REGISTER THAT DETERMINES THE CONDITIONS UNDER WHICH THE MESSAGE WILL BE TRANSMITTED. SEE DATA SHEET FOR DESCRIPTION.
TXBNSIDL = %11100000 ' STANDARD IDENTIFIER BITS
TXBNSIDH = %11111111 ' NOT REALLY SURE WHAT MICROCHIP WANTS HERE. IT JUST STANDARD IDENTIFIER BITS?
B0 = $0 'DATA IN BYTE 1
B1 = $01 'DATA IN BYTE 2
B2 = $03 'DATA IN BYTE 3
B3 = $06 'DATA IN BYTE 4
B4 = $08 'DATA IN BYTE 5
B5 = $0A 'DATA IN BYTE 6
B6 = $0C 'DATA IN BYTE 7
B7 = $0E 'DATA IN BYTE 8
IF TXBNCTRL.3=1 OR TXBNCTRL.5=1 OR TXBNCTRL.4=1 THEN GOTO SENDCANDATA 'THERE WAS AN ERROR, TRY AGAIN.
HIGH CS ' DATA TRANSMISSION IS COMPLETE. PUT CS LINE BACK TO 1.
PAUSE 1000
RETURN
Bookmarks