📄 sja100_can_rx.asm
字号:
;*************************************************
; File Name: G332LEDR3R1.ASM
; Version: V1.0
; Company: I/O Controls Corporation.
; Written by Xu
; Date: 09-14-2007
; 250 K pbs at CAN
;*********************************************************************************
LIST P=18F452 ;OSC= 16Mhz
#INCLUDE "P18F452.INC"
#DEFINE COMM_LED LATE,2
#DEFINE SJWR PORTB,2
#DEFINE SJRD PORTB,3
#DEFINE SJCS PORTB,4
#DEFINE SJALE PORTB,5
;********************************************************************************
;控制字设置
CONFIG OSC = HS ;晶震模式设
; CONFIG FCMEN = ON ;故障保护时钟监视器打开
; CONFIG IESO = OFF ;双速启动关闭
; CONFIG PWRT = ON ;上电延时定时器使能
; CONFIG BOREN = BOHW ;可编程欠压复位打开
; CONFIG BORV = 1 ;4.2V
; CONFIG WDT = ON ;看门狗打开
; CONFIG WDTPS = 128 ;看门狗定时器分频比设定
; CONFIG MCLRE = ON ;上电复位引脚使能
; CONFIG LPT1OSC = OFF ;TIMER1功耗模式设定关闭,默认情况下为高功耗
; CONFIG PBADEN = OFF ;B口模拟数字输入设定模式关闭
; CONFIG STVREN = ON ;堆栈上溢复位使能
; CONFIG LVP = OFF ;单电源ICSP编程模式设定关闭
;********************************************************************************
code 0x00
goto INIT
H_INT code 0x0008
goto INTSUB
L_INT code 0x0018
goto INTSUB
;********************************************************************************
BDELY EQU 01H
BPORTD EQU 02H
REBUFF1 EQU 03H
REBUFF2 EQU 04H
REBUFF3 EQU 05H
REBUFF4 EQU 06H
REBUFF5 EQU 07H
REBUFF6 EQU 08H
REBUFF7 EQU 09H
REBUFF8 EQU 08H
INTSUB CODE 0x002A
INTSUB
NOP
NOP
RETURN
;**************************** 端口初始化****************************************
PORT_Init
BSF INTCON2,7 ;Disable all PULL-UP FOR PORTB禁止所有PORTB内部弱上拉
CLRF PORTA
CLRF LATA
MOVLW 00H
MOVWF TRISA
MOVLW 07H
MOVWF ADCON1
CLRF PORTB
CLRF LATB
MOVLW 81H ;10000001
MOVWF TRISB
MOVLW 03H
MOVWF PORTB
CLRF PORTC
CLRF LATC
MOVLW 00H
MOVWF TRISC
MOVLW 00H
MOVWF TRISE
BSF LATA,5
CLRF PORTD
CLRF LATD
MOVLW 00H
MOVWF TRISD
RETURN
;**************************** 流水灯显示**************************************
LED0
BSF LATA,5
MOVLW 01H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED1
BSF LATA,5
MOVLW 02H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED2
BSF LATA,5
MOVLW 04H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED3
BSF LATA,5
MOVLW 08H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED4
BSF LATA,5
MOVLW 10H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED5
BSF LATA,5
MOVLW 20H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED6
BSF LATA,5
MOVLW 40H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
LED7
BSF LATA,5
MOVLW 80H
MOVWF PORTD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
BCF LATA,5
RETURN
;**************************** 延时程序****************************************************
DELY
MOVLW 1FH
MOVWF BDELY
L1 BCF INTCON,2
MOVLW 0C7H
MOVWF T0CON
L2 BTFSS INTCON,2
GOTO L2
DECFSZ BDELY
GOTO L1
RETURN
;**************************** SJA1000初始化***********************************************
;**************************** SJA1000初始化***********************************************
;**************************** SJA1000初始化***********************************************
;**************************** SJA1000初始化***********************************************
SJA1000_INT0
CLRF INTCON ;close all the int
;************设置SJA1000控制寄存器(CR),地址00********************************************
MOVLW 00H
MOVWF PORTD
CALL WRREG
MOVLW 01H
MOVWF PORTD
CALL WRREG1
;****************************初始化命令寄存器**********************************************
MOVLW 01H
MOVWF PORTD
CALL WRREG
MOVLW 0EH
MOVWF PORTD
CALL WRREG1
;**************************** 设置SJA1000时钟分频寄存器(CDR),地址1FH***********************
MOVLW 1FH
MOVWF PORTD
CALL WRREG
MOVLW 48H ;工作于BasicCAN模式
MOVWF PORTD
CALL WRREG1
;****************************设置SJA1000输出控制寄存器,地址08H******************************
MOVLW 08H
MOVWF PORTD
CALL WRREG
MOVLW 0AAH
MOVWF PORTD
CALL WRREG1
;**************************** 设置中断使能寄存器(IER),地址04H*******************************
MOVLW 04H
MOVWF PORTD
CALL WRREG
MOVLW 1EH
MOVWF PORTD ;开发送中断,超载中断,和错误警告中断
CALL WRREG1
;****************************设置SJA1000总线定时寄存器BTRO,地址06H**************************
MOVLW 06H
MOVWF PORTD
CALL WRREG
MOVLW 01H ;波特率设置为250K
MOVWF PORTD
CALL WRREG1
;****************************设置SJA1000总线定时寄存器BTR1,地址07H***************************
MOVLW 07H
MOVWF PORTD
CALL WRREG
MOVLW 1CH
MOVWF PORTD
CALL WRREG1
;****************************设置SJA1000错误计数寄存器,地址0FH***************************
MOVLW 0FH
MOVWF PORTD
CALL WRREG
MOVLW 00H
MOVWF PORTD
CALL WRREG1
;****************************设置SJA1000验收代码寄存器,地址04H***************************
MOVLW 04H
MOVWF PORTD
CALL WRREG
MOVLW 40H
MOVWF PORTD
CALL WRREG1
;****************************设置SJA1000验收屏蔽寄存器,地址05H***************************
MOVLW 05H
MOVWF PORTD
CALL WRREG
MOVLW 0FFH
MOVWF PORTD
CALL WRREG1
;****************************清除复位模式****************************************************
MOVLW 00H
MOVWF PORTD
CALL WRREG
MOVLW 0FEH
MOVWF PORTD
CALL WRREG1
NOP
;***************************开中断*******************************************
BSF INTCON,7
RETURN
;***************初始化结束,开中断**********************************************************
;***************初始化结束,开中断**********************************************************
;***************初始化结束,开中断**********************************************************
;***************初始化结束,开中断**********************************************************
;**************************写寄存器时序程序*************************************************
WRREG
BSF SJCS
BSF SJALE
BSF SJWR
BSF SJRD
NOP
NOP
BCF SJALE
BCF SJCS
BCF SJWR
NOP
NOP
RETURN
WRREG1
BSF SJWR
BSF SJCS
NOP
NOP
RETURN
;***************************发送子程序**************************************************
;***************************发送子程序**************************************************
;***************************发送子程序**************************************************
;***************************发送子程序**************************************************
TDATA1
CALL RDSR ;判断是否正在接收,是则等待
BTFSC BPORTD,4
GOTO TDATA1
TDATA2
CALL RDSR ;判断上次发送是否完成,未完成则等待发送完成
BTFSS BPORTD,3
GOTO TDATA2
TDATA3
CALL RDSR ;判断发送缓冲区是否锁定,锁定则等待
BTFSS BPORTD,2
GOTO TDATA3
;***********************第一个标识符ID0,88H************************************
TDATA4
MOVLW 00H
MOVWF TRISD
MOVLW 0AH
MOVWF PORTD
CALL WRREG
MOVLW 88H
MOVWF PORTD
CALL WRREG1
;************************第二个标识符ID1,08H***********************************
MOVLW 0BH
MOVWF PORTD
CALL WRREG
MOVLW 08H
MOVWF PORTD
CALL WRREG1
;*************************第一个数据,00H************************************
MOVLW 0CH
MOVWF PORTD
CALL WRREG
MOVLW 00H
MOVWF PORTD
CALL WRREG1
;*************************第二个数据,11H**********************************
MOVLW 0DH
MOVWF PORTD
CALL WRREG
MOVLW 11H
MOVWF PORTD
CALL WRREG1
;*************************第三个数据,22H***********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -