Processor 18F258 include p18F258.inc CONFIG OSC = HS CONFIG WDT = OFF TEMP1 equ 0x00 ;Temp-Register FF equ 0x0c ;ASCII Form Feed CR equ 0x0d ;ASCII Carriage Return LF equ 0x0a ;ASCII Line Feed BS equ 0x08 ;ASCII Back Space ;=================================================================================== resetVect org 0x0000 goto init highIntVect org 0x0008 movlw 'h' call send232 goto hIntService lowIntVect org 0x0018 movlw 'l' call send232 goto lIntService ;----------------------------------------------------------------------------------- init org 0x0040 ; movlb 0x0f ; Do not use Bank 15! movlb 0x00 ;PIC18FXX8 Rev. B4 Silicon Errata Sheet clrf PORTA,ACCESS movlw 0x1f movwf TRISA,ACCESS clrf PORTB,ACCESS ;Pin B3(CANRX) als Eingang / Test als Ausgang konfiguriert movlw 0x08 movwf TRISB,ACCESS clrf PORTC,ACCESS ;Pin C6(TX) als Ausgang / Rest als Eingang konfiguriert movlw 0x80 movwf TRISC,ACCESS movlw 0x19 movwf SPBRG,ACCESS ;19=25Baudrate 9K6 @ 16MHz / BRGH=0 (Power-on-default) movlw 0x20 movwf TXSTA,ACCESS ;8Bit Asynchron movlw 0x90 movwf RCSTA,ACCESS ;8Bit Asynchron movlw 0x90 movwf CANCON,ACCESS ;switch to config mode and abbort transmitter movlw CR call send232 movlw LF call send232 call send232 waitConfigMode movf CANSTAT,W,ACCESS ;wait until switched to config mode andlw 0xe0 xorlw 0x80 bnz waitConfigMode bcf CANCON,ABAT,ACCESS movlw 'c' call send232 BRG_setzen ;250kBit/s @ 16MHz movlw 0x41 ;SJW=2 BRP=1 movwf BRGCON1,ACCESS movlw 0xaa ;Sample=1 PH1=6 PG=3 movwf BRGCON2,ACCESS movlw 0x05 ;WAKE=0 PH2=6 movwf BRGCON3,ACCESS CAN_Interupts_aktivieren bsf PIE3,RXB0IE ;Interrupt für Empfangenes CAN Telegramm aktivieren bsf IPR3,RXB0IP ;Priorität auf High setzten bsf INTCON,GIEH,ACCESS ;Global Interrupt Enable High CAN_TX_Setting bsf CIOCON,ENDRHI,ACCESS CAN_RX_Setting movlw 0x00 ;Maske setzen (receive all frames) movwf RXM0SIDH,ACCESS movwf RXM0SIDL,ACCESS movwf RXM0EIDH,ACCESS movwf RXM0EIDL,ACCESS movwf RXF0SIDH,ACCESS ;Filter setzen (SID=0 EID=0) movlw 0x08 movwf RXF0SIDL,ACCESS movlw 0x00 movwf RXF0EIDH,ACCESS movwf RXF0EIDL,ACCESS movlw 0x60 movwf RXB0CON,ACCESS ;No Overflow to RXB1 ;set_Loopbackmode set_NormalMode movlw 0x10 ;0x50+++++++++++++++++++++++++ 0x10 movwf CANCON,ACCESS ;switch to config mode and abbort transmitter ;waitLoopbackMode waitNormalMode movf CANSTAT,W,ACCESS ;wait until switched to normal mode andlw 0xe0 xorlw 0x00 ;0x40+++++++++++++++++++++++++ ; bnz waitLoopbackMode bnz waitNormalMode bcf CANCON,ABAT,ACCESS movlw 'n' call send232 ;----------------------------------------------------------------------------------- start call makeCAN call sendCAN endless goto endless ;Endlosschleife wird durch Interrupts unterbrochen ;----------------------------------------------------------------------------------- send232 btfss PIR1,TXIF,ACCESS goto send232 ;wait until TXIF is set (TXREG is free) befor transmitting byte. movwf TXREG return makeCAN movlw 0x00 ;SID=0 movwf TXB0SIDH,ACCESS movlw 0x08 ;EID=0 movwf TXB0SIDL,ACCESS movlw 0x00 movwf TXB0EIDH,ACCESS movlw 0x00 movwf TXB0EIDL,ACCESS movlw 0x06 ;Payload=7Byte movwf TXB0DLC,ACCESS movlw 'T' ;Testmessage "Test0", .... , "Test9" movwf TXB0D0,ACCESS movlw 'e' movwf TXB0D1,ACCESS movlw 's' movwf TXB0D2,ACCESS movlw 't' movwf TXB0D3,ACCESS movlw '0' movwf TXB0D4,ACCESS movlw CR movwf TXB0D5,ACCESS movlw LF movwf TXB0D6,ACCESS return sendCAN movlw '.' call send232 movlw 0x0b ;set highest priority and TXREQ movwf TXB0CON,ACCESS waitSent btfsc TXB0CON,TXREQ,ACCESS goto waitSent movlw '+' btfsc TXB0CON,TXERR,ACCESS movlw 'e' btfsc TXB0CON,TXLARB,ACCESS movlw 'l' btfsc TXB0CON,TXABT,ACCESS movlw 'a' call send232 return receiveCAN movlw 'r' call send232 return ;----------------------------------------------------------------------------------- hIntService btfsc PIR3,RXB0IF,ACCESS ;CAN-buffer 0 has received data call receiveCAN retfie lIntService btfsc RXB0CON,RXFUL,ACCESS ;when receiving byte call receiveCAN ;receive CAN-frame retfie ;=================================================================================== END ;===================================================================================