¿Alguien ha conseguido comunicarse por CAN? Yo he tratado de hacerlo en ensamblador, en C con el ccs y con el C18 de Microchip, pero no hay manera. ¿Podeis ayudarme? Os envio mi codigo en ensamblador, que es mas facil de entender. Estoy tratando de enviar una trama de un caracter (0x31) con el identificador 0x00, y un baud rate de 125Kbps. La frecuencia del oscilador es de 16MHz
CONF_CAN movlw b"10010000" ;Modo configuracion
movwf CANCON
;Configuracion del Baud Rate
movlw b"00000011"; SJW1:SJW0=1, BRP=3 125kb/s
movwf BRGCON1
movlw b"10100001" ;SEG2PHTS=libremente programable,
;se muestrea 1 vez, phseg1=5, propseg=2
movwf BRGCON2
movlw b"00000011" ;no Wake-up, phseg2 ignorado porque seg2phts=1
movwf BRGCON3
;Configuracion de los pines I/O
movlw b"00110000" ;CANTX pin =Vdd cuando es recesivo.
;CAN msg receive reemplaza a RC2/CCP1
movwf CIOCON
;Configuración de interrupciones
movlw b"00011111" ;Invalid Msg Received Interupt disabled,
movwf PIE3 ;bus activity wake-up disable
;bus Error Interrupt disable
;Transmit Buff2 interrupt enable
;Transmit Buff1 interrupt enable
;Transmit Buff0 interrupt enable
;Receive Buff1 interrupt enable
;Receive Buff0 interrupt enable
movlw b"00100100" ;Prio Alta a CAN Error, y a Transmit Buff0
movwf IPR3
movlw b"10000000" ;Habilita la prioridad de las interrupciones
movwf RCON
NORMAL movlw b"00001000" ;Modo normal,Transmit Buff0
movwf CANCON
btfsc CANSTAT,7 ;¿Ha cambiado el modo?
bra NORMAL
movlw b"1100000" ;Habilita las interr de alta prior
movwf INTCON ;Habilita las interr de los perifericos y de baja prior
;Config Buffer Trans 0
clrf RXB0SIDH
clrf RXB0SIDL
movlw 0x01
movwf RXB0DLC
movlw 0x0A;
movwf cuenta
clrf nMens
ENVIA movlw 0x01
movwf RXB0D0 ;Byte 0 del buffer0
movlw 0x03
movwf RXB0D1 ;Byte 1 del buffer0
clrf RXB0D2
clrf RXB0D3
clrf RXB0D4
clrf RXB0D5
clrf RXB0D6
clrf RXB0D7
bsf RXB0CON,TXREQ
COM_ENVI btfsc RXB0CON,TXREQ
bra COM_ENVI
decfsz cuenta
bra ENVIA
BIEN_TRANS incf nMens
¡¡Gracias!!