PIC18F4680 ECAN Module code help?

Coding and general discussion relating to the compiler

Moderators: David Barker, Jerry Messina

Post Reply
Mtl
Posts: 1
Joined: Wed Jan 10, 2007 7:09 pm

PIC18F4680 ECAN Module code help?

Post by Mtl » Wed Jan 10, 2007 8:16 pm

Hi

Thanks for swordfish developer team.
High performance compiler.
Me Swordfish License user.
ECAN Module receiver function problem.Please HELP? :( :?:
ECAN Programmable TX/RX and Auto-RTR Buffers or normal CAN needed example code
Besides CAN normal operation worked code sample.

Code: Select all

Device = 18F4680
    Clock = 20
    Config 
    OSC = HS,IESO = OFF,PWRT = ON,WDT = OFF,WDTPS = 128,LVP = OFF,DEBUG = OFF,
    MCLRE = ON
    
    Dim CAN_TX_BUFFER0(8) As Byte
    Dim CAN_RX_BUFFER0(8) As Byte
    Dim CAN_RX_ID0        As Word
    Dim CAN_RX_ID0_0      As CAN_RX_ID0.Byte0
    Dim CAN_RX_ID0_1      As CAN_RX_ID0.Byte1
    Dim CAN_TX_ID0        As Word
    Dim CAN_TX_ID0_0      As CAN_TX_ID0.Byte0
    Dim CAN_TX_ID0_1      As CAN_TX_ID0.Byte1
    Dim CAN_TX_BYTE0      As Byte
    Dim CAN_TX_BYTE1      As Byte
    Dim CAN_TX_BYTE2      As Byte
    Dim IDX               As Byte
    
Sub CAN_INIT()               
    TRISB.2 = 0
    TRISB.3 = 1
    CAN_TX_ID0 = 12341
    CAN_RX_ID0 = 12344
    CAN_TX_BYTE0 = 0
    CAN_TX_BYTE1 = 0
    CAN_TX_BYTE2 = 0
    For IDX = 0 To 7
    CAN_TX_BUFFER0(IDX) = 0
    CAN_RX_BUFFER0(IDX) = 0
    Next
    CANCON  = %10000000
WT:    
    If CANSTAT.7 = 0 Then GoTo WT EndIf
    ECANCON = %01000000
    BRGCON1 = %00000011
    BRGCON2 = %11101100
    BRGCON3 = %00000111
    CIOCON.5 = 0
    BSEL0 = %00011100
    'B0CON = %00000001
    'B1CON = %00000001
    'B2CON = %00000001
    B3CON = %00000000
    B4CON = %00000001
    B5CON = %00000010
    B0DLC = CAN_TX_BYTE0
    B1DLC = CAN_TX_BYTE1
    B2DLC = CAN_TX_BYTE2
    B0D0 = 0
    B0D1 = 0
    B0D2 = 0
    B0D3 = 0
    B0D4 = 0
    B0D5 = 0
    B0D6 = 0
    B0D7 = 0
    B1D0 = 0
    B1D1 = 0
    B1D2 = 0
    B1D3 = 0
    B1D4 = 0
    B1D5 = 0
    B1D6 = 0
    B1D7 = 0
    B2D0 = 0
    B2D1 = 0
    B2D2 = 0
    B2D3 = 0
    B2D4 = 0
    B2D5 = 0
    B2D6 = 0
    B2D7 = 0
    B3D0 = 0
    B3D1 = 0
    B3D2 = 0
    B3D3 = 0
    B3D4 = 0
    B3D5 = 0
    B3D6 = 0
    B3D7 = 0
    B4D0 = 0
    B4D1 = 0
    B4D2 = 0
    B4D3 = 0
    B4D4 = 0
    B4D5 = 0
    B4D6 = 0
    B4D7 = 0
    B5D0 = 0
    B5D1 = 0
    B5D2 = 0
    B5D3 = 0
    B5D4 = 0
    B5D5 = 0
    B5D6 = 0
    B5D7 = 0
    B0EIDH = CAN_TX_ID0_1
    B0EIDL = CAN_TX_ID0_0
    B3EIDH = CAN_RX_ID0_1
    B3EIDL = CAN_RX_ID0_0
    B0SIDL = %00000000
    B1SIDL = %00000000
    B2SIDL = %00000000
    B0SIDH = %00000000
    B1SIDH = %00000000
    B2SIDH = %00000000
    B0SIDL.3 = 1
    B1SIDL.3 = 1
    B2SIDL.3 = 1
    RXF0SIDL = %00000000
    RXF0SIDH = %00000000
    RXF1SIDL = %00000000
    RXF1SIDL = %00000000
    RXF2SIDL = %00000000
    RXF3SIDL = %00000000
    RXF0SIDL.3 = 1
    RXF1SIDL.3 = 1
    RXF2SIDL.3 = 1
    RXF0EIDH = CAN_RX_ID0_1
    RXF0EIDL = CAN_RX_ID0_0
    RXM0SIDH = %00000000
    RXM0SIDL = %00000000
    RXM1SIDH = %00000000
    RXM1SIDL = %00000000
    RXM0SIDL.3 = 1
    RXM1SIDL.3 = 1
    RXM0EIDL = %11111111
    RXM0EIDH = %11111111
    RXM1EIDL = %11111111
    RXM1EIDH = %11111111
    RXFCON0  = %00000111
    RXFCON1  = %00000111
    SDFLC    = %00000000
    RXFBCON0 = %00110010
    RXFBCON1 = %00000100
    MSEL0    = %11000100
    CANCON   = %00000000
    DelayMS(100)
WT1:
    If CANSTAT.7 = 0 And CANSTAT.6 = 0 And CANSTAT.5 = 0 Then GoTo WT2 EndIf
    GoTo WT1
WT2:    
    PORTD.0 = 1
    DelayMS(500)
    PORTD.0 = 0
    DelayMS(500)
End Sub

Sub CAN_SEND_0()
    B0D0 = CAN_TX_BUFFER0(0)
    B0D1 = CAN_TX_BUFFER0(1)
    B0D2 = CAN_TX_BUFFER0(2)
    B0D3 = CAN_TX_BUFFER0(3)
    B0D4 = CAN_TX_BUFFER0(4)
    B0D5 = CAN_TX_BUFFER0(5)
    B0D6 = CAN_TX_BUFFER0(6)
    B0D7 = CAN_TX_BUFFER0(7)
    B0CON = %00001000 
WAIT_TX0_OK: 
    If B0CON.3 = 1 Then GoTo WAIT_TX0_OK EndIf
End Sub
   
    
 
MAIN:
    TRISD.0 = 0
    CAN_INIT()
While TRUE
    CAN_TX_ID0 = 12341
    CAN_TX_BUFFER0(0) = 255
    CAN_TX_BYTE0 = 8
    CAN_SEND_0()
    PORTD.0 = 1
    DelayMS(500)
    PORTD.0 = 0
    DelayMS(500)
    CAN_TX_ID0 = 12341
    CAN_TX_BUFFER0(0) = 0
    CAN_TX_BYTE0 = 8
    CAN_SEND_0()
    PORTD.0 = 1
    DelayMS(500)
    PORTD.0 = 0
    DelayMS(500)
Wend
    End
Sorry my English. :roll:

Thanks,Mtl

Best regards

Post Reply