aqui les pongo el codigo que estoy utilizando
; El siguiente programa configura al PIC18F258 para operar
; en comunicacion CAN Bus con ID=0x001 para captura de datos que
; posteriormente son enviados al nodo 2.
list p=18f258
#include <p18F258.inc>
; oscillator selection
CONFIG OSC = HS
; Secccion de Memoria Reservada
#DEFINE NODO1_SOURCE
#include "CAN18.inc"
NODO1 UDATA
W_temp res 01
Status_temp res 01
BSR_temp res 01
PRO_temp res 01
org 0x0000
goto Init
org 0x0008
goto HighPINT
org 0x0018
goto LowPINT
NODO1_SOURCE CODE
org 0x00100
Init:
; Configuracion de los Puertos del PIC
initPORTA OUT & PIN_0 ;^ PIN_1 ^ OUT
; Puerto A SALIDA RA0
movlw 0x07
iorwf ADCON1,f
initPORTB IN & PIN_0 ^ PIN_1 ^ PIN_3 ^ OUT
; Puerto B con entradas RB0, RB1 y RB2
; el resto salidas
initPORTC IN ; Puerto C completo como ENTRADAS
; Configurando Interrupciones
bsf RCON, IPEN ; habilita prioridad de interrupcion
;bsf INTCON, GIEH ; habilita prioridad alta
movlw B'11010000'
movwf INTCON
movlw B'01100000' ; habilita interrupcion en flanco de bajada
movwf INTCON2 ; habilita interrupcion en flanco de bajada
movlw B'00001000' ; habilita prioridad alta para int1
movwf INTCON3 ; tambien habilita interrupcion 1 y 2
;movlw 0xD0 ; Habilitando las interrupciones de
;movwf INTCON ; GIEH, GIEL e INT0 (High Priority)
;movlw 0xE0 ; Configurando interrupciones en Rising Edge
;movwf INTCON2 ; para INT0 e INT1
;movlw 0x08 ; Habilitando interrupciones por INT1
;movwf INTCON3 ; en Low Priority
SETF PIE3 ; HABILITA TODAS LAS INTERRUPCIONES DEL CAN
setf IPR3 ; Interrupciones CAN todas en High Priority
CLRF PIR3
; Configuracion del Modulo CAN
; Inicializando el Modulo
CANInitialize 1, 5, 7, 6, 2, CAN_CONFIG_LINE_FILTER_ON & CAN_CONFIG_VALID_STD_MSG
; Configurando los Filtros y Mascaras, Modo de Operacion en Configuracion
CANSetOperationMode CAN_OP_MODE_CONFIG
; Estableciendo la Mascara del Buffer 0
CANSetReg CAN_MASK_B0, 0x00000007, CAN_CONFIG_STD_MSG
; Filtro RX0 Buffer 0
CANSetReg CAN_FILTER_B0_F1, 0x00000000, CAN_CONFIG_STD_MSG
; Filtro RX1 Buffer 0
CANSetReg CAN_FILTER_B0_F2, 0x00000002, CAN_CONFIG_STD_MSG
; Estableciendo el Modo de Operacion Normal
CANSetOperationMode CAN_OP_MODE_NORMAL
Main: goto Main
;************************************************************
;
; ATENCION DE INTERRUPCIONES
;
;************************************************************
;**********INTERRUPCIONES CON ALTA PRIORIDAD*****************
HighPINT:
DISABLE_GIE
SAVE_STATUS_W_BSR
btfss INTCON3,INT1IF ; REVISA SI FUE ESTA LA INTERRUPCION QUE SE GENERO
bra OTRO
goto pinb2
OTRO: btfss INTCON,INT0IF ; revisa si fue generada int0
BRA OTRO2
pinb1: ;atencion a interrupcin int0
bcf INTCON,INT0IF ;limpia bandera de interrupcion
RESTORE_STATUS_W_BSR ;reestablece registros
ENABLE_GIE ;habilita interrupcion global
retfie
pinb2: ;atencion a interrupcion int1
bcf INTCON3,INT1IF ;limpia bandera de interrupcion
RESTORE_STATUS_W_BSR ;reestablece registros
ENABLE_GIE ;habilita interrupcion global
retfie
OTRO2:
; call CANISR
banksel PIR3
btfss PIR3,IRXIF
goto IsWAKIF
goto AbortU
IsWAKIF:
btfss PIR3,WAKIF
goto IsERRIF
goto EndHigh
IsERRIF:
btfss PIR3,ERRIF
goto IsTXB2IF
goto AbortU
IsTXB2IF:
btfss PIR3,TXB2IF
goto IsTXB1IF
goto EndHigh
IsTXB1IF:
btfss PIR3,TXB1IF
goto IsTXB0IF
goto EndHigh
IsTXB0IF:
btfss PIR3,TXB0IF
goto IsRXB1IF
goto EndHigh
IsRXB1IF:
btfss PIR3,RXB1IF
goto IsRXB0IF
call RxRou
call PROCESSFun
goto EndHigh
IsRXB0IF:
btfss PIR3,RXB1IF
goto IsRXB0IF
call RxRou
call PROCESSFun
goto EndHigh
AbortU:
CANAbortAll
EndHigh:
clrf PIR3
RESTORE_STATUS_W_BSR
ENABLE_GIE
retfie
;************INTERRUPCIONES CON BAJA PRIORIDAD*****************
LowPINT:
DISABLE_GIE
SAVE_STATUS_W_BSR
btfss INTCON,INT0IF
bra isINT1
movff PORTC,PRO_temp
;movlw 0x00
;cpfseq PRO_temp
;bra in1
;try1: call CANIsTxReady
bnc TxNotRdy
banksel MessageData
movlw 0x00
movwf MessageData,1
movlw 0x82
movwf MessageData+1,1
movlw 0x0F
movwf MessageData+2,1
movlw 0x01
movwf MessageData+3,1
CANSendMessage 0x001, MessageData, 8, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME
bcf INTCON,INT0IF
bra EndLow
in1: movlw 0x01
cpfseq PRO_temp
bra EndLow
call CANIsTxReady
bnc TxNotRdy
banksel MessageData
movlw 0x03
movwf MessageData,1
movlw 0x80
movwf MessageData+1,1
movlw 0x0F
movwf MessageData+2,1
movlw 0x00
movwf MessageData+3,1
CANSendMessage 0x001, MessageData, 8, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME
bcf INTCON,INT0IF
bra EndLow
isINT1:
btfss INTCON3,INT1IF
bra EndLow
try1 call CANIsTxReady
bnc TxNotRdy
banksel MessageData
;movlw 0x02
movff PORTC,WREG
movwf MessageData,1
;movlw 0x82
movlw 0x00
movwf MessageData+1,1
;movlw 0x0F
movlw 0x00
movwf MessageData+2,1
;movlw 0x00
movlw 0x00
movwf MessageData+3,1
CANSendMessage 0x001, MessageData, 1, CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME
bcf INTCON3,INT1IF
bra EndLow
TxNotRdy:
goto try1
EndLow:
RESTORE_STATUS_W_BSR
ENABLE_GIE
retfie
RxRou
call CANIsRxReady
bnc RxNotRdy
banksel NewMessage
CANReadMessage NewMessage, NewMessageData, NewMessageLen, NewMessageFlags
bra ExitRx
RxNotRdy:
ExitRx:
return
end