⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can 的调试程序.txt

📁 单片机开发源代码集锦 31例
💻 TXT
📖 第 1 页 / 共 2 页
字号:
 
  
我的CAN 的调试程序,供参考,交流 

#INCLUDE 
; 接收数据程序

;***********RAM DEFINE*******************
CBLOCK 10H
TEMP_CANCON ; 
TEMP_CANSTAT;
W_TEMP 
DELAY2 ; DELAY 延时
DELAY1 ; DELAY 
COUNT ; 查表
RX_COUNT ; 接收的字节数

_PORTA ; PORTA缓冲器
ENDC
;*************LOCAL MACROS*************** 
CONFIGURE_MODE MACRO
BSF CANCON,REQOP2
ENDM
NORMAL_MODE MACRO
BCF CANCON,REQOP2 
BCF CANCON,REQOP1
BCF CANCON,REQOP0 
BCF CANCON,ABAT
ENDM
LOOPBACK_MODE MACRO
BCF CANCON,REQOP2 
BSF CANCON,REQOP1
BCF CANCON,REQOP0 
BCF CANCON,ABAT
ENDM
DIS_ALL_TX MACRO
BSF CANCON,ABAT
ENDM
ENABLE_ALL_TX MACRO
BCF CANCON,ABAT
ENDM 
;**************DIFINE*********************** 
#DEFINE _TXREQ0 TXB0CON,TXREQ 
#DEFINE _TXB0IF PIR3,TXB0IF 
#DEFINE _RXFUL0 RXB0CON,RXFUL
#DEFINE _RXFUL1 RXB1CON,RXFUL
;******************复位矢量中断向量*************
ORG 000h 
NOP
GOTO MAIN
ORG 0008h
GOTO INTSER
INTSER
;**************利用查表来调查中断源*************

MOVWF W_TEMP
MOVFF CANCON,TEMP_CANCON ;保护寄存器
MOVFF CANSTAT,TEMP_CANSTAT;
MOVF TEMP_CANSTAT,W
ANDLW b'00001110'
ADDWF PCL,F
BRA nointerrupt; 
BRA errorinterrupt
BRA txb2interrupt
BRA txb1interrupt
BRA txb0interrupt
BRA rxb1interrupt
BRA RXB0_INTERRUPT 
;*********txb0 中断******** 
txb0interrupt
BCF PIR3,TXB0IF
MOVLW 0FFH
MOVWF 20H
GOTO ACCESSBUFFERS
RETFIE
txb1interrupt
BCF PIR3,TXB1IF
GOTO ACCESSBUFFERS
RETFIE
txb2interrupt
BCF PIR3,TXB2IF
GOTO ACCESSBUFFERS
RETFIE
RXB0_INTERRUPT
BCF RXB0CON,RXFUL ;必须清零,否则会溢出到RXB1D0
BCF PIR3,RXB0IF 
MOVFF RXB0D0,PORTC
GOTO ACCESSBUFFERS
RETFIE
rxb1interrupt
BCF RXB1CON,RXFUL ;必须清零,否则会溢出到RXB1D0
BCF PIR3,RXB1IF 
MOVFF RXB1D0,PORTC
GOTO ACCESSBUFFERS
RETFIE
nointerrupt
BCF INTCON,TMR0IF
MOVF PORTB,W
XORLW B'00000001'
MOVWF PORTB


MOVF W_TEMP,W
retfie
errorinterrupt
BCF PIR3,ERRIF
retfie
ACCESSBUFFERS
MOVF TEMP_CANCON,W
ANDLW B'11110001'
MOVWF TEMP_CANCON
MOVF TEMP_CANSTAT,W
ANDLW B'00001110'
IORWF TEMP_CANCON
MOVFF TEMP_CANCON,CANCON
MOVF CANCON,W
ANDLW B'11110001'
IORWF TEMP_CANCON 
RETFIE
;*****************主程序*************************
MAIN
CALL CLR_BANK ;CLEAR ALL BANK 0,1,2,15

;**********开始进入传输初始化的设定***************
SETUP
MOVLB 0FH ;BANK 15
LFSR FSR0,40H ;接收缓冲器

MOVLW B'11000000' ;ENABLE ALL 
MOVWF INTCON ;enable gie
MOVLW B'00000001' ;ONLY ENABLE RXB0IE
MOVWF PIE3
CALL SET_PORT ;set port
CALL TXB0_IDENTIFIER ;TXB0 FILTER
CALL RXB0_FILTER0 ;RXB0 FILTER0
CALL BAUD_RATE ;50KB/S
NORMAL_MODE ;NORMAL MODE 

STOP

NOP
GOTO STOP 


;******************RXB0 FILTER0****************
;RXB0_FILTER0 
; ;*********************************************
RXB0_FILTER0
CONFIGURE_MODE
BSF RXB0CON,RXM1 
BSF RXB0CON,RXM0 
;0,0 FILTER 有效
;0,1 ONLY STANDARD FRAME
;1,1 RECEIVE ALL
;1,0 ONLY EXTERN FRAME 
MOVLW B'10101111'
MOVWF RXF0SIDH ;进行过滤器的设定,只能再配置位模式进行
MOVLW b'11100000'
MOVWF RXF0SIDL
MOVLW B'11111111' ;识别位XXXXX000111
MOVWF RXM0SIDH
MOVLW B'11111111' ;全部起作用
MOVWF RXM0SIDL ;进行屏蔽位设定,全部为11
RETURN 


;*********设置TXB0 IDENTIFIER***********************
;TXB0_IDENTIFIER
;***************************************************
TXB0_IDENTIFIER
BCF TXB0CON,TXPRI1
BCF TXB0CON,TXPRI0 ;high interrupt
MOVLW B'10101111'
MOVWF TXB0SIDH 
MOVLW B'11100000' ;标志位是XXXXX000111
MOVWF TXB0SIDL
MOVLW B'00000001' 
MOVWF TXB0DLC ;数据帧 6,txrtr是零 
RETURN 

;***********SET_PORT******************************
SET_PORT

;********PORTB********
;RB0 OUT
;RB1 OUT
;RB2 OUT TXCAN
;RB3 IN RXCAN
;RB4 IN 
;RB5 IN
;RB6 ICD2
;RB7 ICD2
CLRF LATB
MOVLW B'00001000'
MOVWF TRISB 
;*******PORTC*********
;RC0 OUT RC0-RC7 ALL OUT
;RC1 OUT
;RC7 OUT
CLRF LATC
MOVLW B'00000000'
MOVWF TRISC 
RETURN 
;**************BAUD RATE SET****************** 
; FOSC =4MHZ 
; NOMINAL BIT TIME = 8 TQ
; TQ=2*(BAUD RATE +1)/FOSC
; SYN =1 TQ,PRO=1TQ,PHE1=3TQ,PHE2=3TQ
; BAUD RATE= 250KB/S
; BAUD RATE PRESCALER=00000
; fosc =4mhz MAX_baud rate=250kb/s
; If fosc=16Mhz ,the max_band=1Mkb/s
;01.05,使用600米长的总线,发现接受不到数据。估计是波特率太高,换低的波特率
;********************************************* 
;BAUD_RATE ;250KB/S
; CONFIGURE_MODE 
; MOVLW B'00000000' ;BAUD RATE SET
; MOVWF BRGCON1
; MOVLW B'10010000'
; MOVWF BRGCON2
; MOVLW B'00000010'
; MOVWF BRGCON3 
; RETURN
;**************BAUD RATE SET****************** 
; FOSC =4MHZ 
; NOMINAL BIT TIME = 8 TQ
; TQ=2*(BAUD RATE +1)/FOSC
; SYN =1 TQ,PRO=1TQ,PHE1=3TQ,PHE2=3TQ
; BAUD RATE= 50KB/S
; BAUD RATE PRESCALER=00100
; fosc =4mhz MAX_baud rate=250kb/s
; If fosc=16Mhz ,the max_band=1Mkb/s
;************************************************
BAUD_RATE ;50KB/S
CONFIGURE_MODE 
MOVLW B'00000100' ;BAUD RATE SET
MOVWF BRGCON1
MOVLW B'10010000'
MOVWF BRGCON2
MOVLW B'00000010'
MOVWF BRGCON3 
RETURN

;**********CLEAR BANK************************
CLR_BANK
LFSR FSR0,00H ;BANK 0
NEXT CLRF POSTINC0
BTFSS FSR0H,0
GOTO NEXT
LFSR FSR0,100H
NEXT1 CLRF POSTINC0 ;BANK1
BTFSS FSR0H,1
GOTO NEXT1
LFSR FSR0,200H
NEXT2 CLRF POSTINC0 ;BANK 2
BTFSS FSR0H,0
GOTO NEXT2 
LFSR FSR0,0F00H 
NEXT3 CLRF POSTINC0 ;BANK 15
BTFSS FSR0L,7 
GOTO NEXT3
RETURN



END ;这是接收数据程序


#INCLUDE 
;,处于等待远程帧,然后发送程序
;等待远程帧状态,接收到远程帧进入发送程序。

;***********RAM DEFINE*******************
CBLOCK 10H
TEMP_CANCON ; 
TEMP_CANSTAT;
W_TEMP 
DELAY2 ; DELAY 延时
DELAY1 ; DELAY 
COUNT ; 查表
RX_COUNT ; 接收的字节数
_PORTA ; PORTA缓冲器
ENDC
;*************LOCAL MACROS*************** 
CONFIGURE_MODE MACRO
BSF CANCON,REQOP2
ENDM
NORMAL_MODE MACRO
BCF CANCON,REQOP2
BCF CANCON,REQOP1
BCF CANCON,REQOP0 
BCF CANCON,ABAT
ENDM
LOOPBACK_MODE MACRO
BCF CANCON,REQOP2
BSF CANCON,REQOP1
BCF CANCON,REQOP0 
BCF CANCON,ABAT
ENDM

DIS_ALL_TX MACRO
BSF CANCON,ABAT
ENDM
ENABLE_ALL_TX MACRO
BCF CANCON,ABAT
ENDM 
;**************DIFINE*********************** 
#DEFINE _TXREQ0 TXB0CON,TXREQ 
#DEFINE _TXB0IF PIR3,TXB0IF 
#DEFINE _RXFUL0 RXB0CON,RXFUL
#DEFINE _RXFUL1 RXB1CON,RXFUL
;******************复位矢量中断向量*************
ORG 000h 
NOP
GOTO MAIN
ORG 0008h
GOTO INTSER
INTSER
;**************利用查表来调查中断源*************

MOVWF W_TEMP
MOVFF CANCON,TEMP_CANCON ;保护寄存器
MOVFF CANSTAT,TEMP_CANSTAT;
MOVF TEMP_CANSTAT,W
ANDLW b'00001110'
ADDWF PCL,F
BRA nointerrupt; 
BRA errorinterrupt
BRA txb2interrupt
BRA txb1interrupt
BRA txb0interrupt
BRA rxb1interrupt
BRA RXB0_INTERRUPT 
;*********txb0 中断******** 
txb0interrupt
BCF PIR3,TXB0IF
MOVLW 0FFH
MOVWF 20H
GOTO ACCESSBUFFERS
RETFIE
txb1interrupt
BCF PIR3,TXB1IF
GOTO ACCESSBUFFERS
RETFIE
txb2interrupt
BCF PIR3,TXB2IF
GOTO ACCESSBUFFERS
RETFIE
RXB0_INTERRUPT
BCF RXB0CON,RXFUL ;必须清零,否则会溢出到RXB1D0
BCF PIR3,RXB0IF 
MOVFF RXB0D0,PORTC
; GOTO AA
; NOP 
AA GOTO ACCESSBUFFERS
RETFIE
rxb1interrupt
BCF RXB1CON,RXFUL ;必须清零,否则会溢出到RXB1D0
BCF PIR3,RXB1IF 
MOVFF RXB1D0,PORTC
GOTO ACCESSBUFFERS
RETFIE
nointerrupt
; BCF INTCON,TMR0IF
; MOVF PORTB,W
; XORLW B'00000001'
; MOVWF PORTB
; MOVF W_TEMP,W
retfie
errorinterrupt
BCF PIR3,ERRIF
; MOVLW 0FFH
; MOVWF 22H
; GOTO MOVE
retfie
ACCESSBUFFERS
MOVF TEMP_CANCON,W
ANDLW B'11110001'
MOVWF TEMP_CANCON
MOVF TEMP_CANSTAT,W
ANDLW B'00001110'
IORWF TEMP_CANCON
MOVFF TEMP_CANCON,CANCON
MOVF CANCON,W
ANDLW B'11110001'
IORWF TEMP_CANCON 
RETFIE
;*****************主程序*************************
MAIN
CALL CLR_BANK ;CLEAR ALL BANK 0,1,2,15

;**********开始进入传输初始化的设定***************
SETUP
MOVLB 0FH ;BANK 15
LFSR FSR0,40H ;接收缓冲器30H——37H
MOVLW B'11000000' ;ENABLE ALL 
MOVWF INTCON ;enable gie
MOVLW B'00000000' ;ONLY ENABLE RXB0IE
MOVWF PIE3
CALL SET_PORT ;set port
CALL TXB0_IDENTIFIER ;TXB0 FILTER
CALL RXB0_FILTER0 ;RXB0 FILTER0
CALL BAUD_RATE ;250KB/S
NORMAL_MODE ;NORMAL MODE 
;**********接收******************** 
;///////////1219///////////////////////////////
;//1219 ,判断是否有远程帧,然后跳到发送程序
MOVLB 0FH

MOVLW B'00000001'
MOVWF 30H

CHECK 
BTFSS RXB0DLC,RXRTR ;判断是否有远程帧
GOTO $-2
BCF RXB0DLC,RXRTR
BCF _RXFUL0 ;很重要,要不就只能接收一次
INCF 30H,F
MOVFF 30H,TXB0D0
MOVFF 30H,PORTC
BSF _TXREQ0
BTFSS _TXB0IF
GOTO $-2
BCF _TXB0IF
GOTO CHECK 

STOP

NOP
GOTO STOP 

;******************RXB0 FILTER0****************
;RXB0_FILTER0 
; STANDARD FRAME 
;PORTA 低五位作为ID的高五位
;*********************************************
RXB0_FILTER0
CONFIGURE_MODE
BCF RXB0CON,RXM1 
BCF RXB0CON,RXM0 
;0,0 FILTER 有效
;0,1 ONLY STANDARD FRAME
;1,1 RECEIVE ALL
;1,0 ONLY EXTERN FRAME 
MOVLW B'10101111'
MOVWF RXF0SIDH ;进行过滤器的设定,只能再配置位模式进行
MOVLW b'11100000'
MOVWF RXF0SIDL
MOVLW B'11111111' ;识别位XXXXX000111
MOVWF RXM0SIDH
MOVLW B'11111111' ;全部起作用
MOVWF RXM0SIDL ;进行屏蔽位设定,全部为11
RETURN 


;*********设置TXB0 IDENTIFIER***********************
;TXB0_IDENTIFIER
;***************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -