📄 sja100_init_code.asm
字号:
;*************************************************
; File Name:
; Version: V1.0
; Company:
; Written by
; Date:
; 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 0x0028
BPORTD EQU 0x0029
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
;**************************** 流水灯显示**************************************
LED_1TO8
MOVLW 07H
MOVWF LATD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
MOVLW 48H
MOVWF LATD
MOVLW 00H
MOVWF LATE
MOVLW 02H
MOVWF LATE
CALL DELY
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_INT0
CLRF INTCON ;close all the int
;************设置SJA1000模式寄存器(MOD),地址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 ;工作于PeliCAN模式
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 01EH
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
;****************************清除复位模式******************************
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 TDATA ;判断是否正在接收,是则等待
BTFSC BPORTD,4
GOTO TDATA1
TDATA2
CALL TDATA ;判断上次发送是否完成,未完成则等待发送完成
BTFSS BPORTD,3
GOTO TDATA2
TDATA3
CALL TDATA ;判断发送缓冲区是否锁定,锁定则等待
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********************************
MOVLW 0EH
MOVWF PORTD
CALL WRREG
MOVLW 22H
MOVWF PORTD
CALL WRREG1
;*************************第四个数据,33H********************************
MOVLW 0FH
MOVWF PORTD
CALL WRREG
MOVLW 33H
MOVWF PORTD
CALL WRREG1
;**************************第五个数据,44H*********************************
MOVLW 010H
MOVWF PORTD
CALL WRREG
MOVLW 44H
MOVWF PORTD
CALL WRREG1
;**************************第六个数据,55H*********************************
MOVLW 011H
MOVWF PORTD
CALL WRREG
MOVLW 55H
MOVWF PORTD
CALL WRREG1
;***************************第七个数据,66H*******************************
MOVLW 012H
MOVWF PORTD
CALL WRREG
MOVLW 66H
MOVWF PORTD
CALL WRREG1
;***************************第八个数据,77H********************************
MOVLW 013H
MOVWF PORTD
CALL WRREG
MOVLW 77H
MOVWF PORTD
CALL WRREG1
;****************************启动发送位发送数据***************************
MOVLW 01H
MOVWF PORTD
CALL WRREG
MOVLW 01H
MOVWF PORTD
CALL WRREG1
BSF SJALE
CALL DELY
RETURN
;***********读状态寄存器的值********************
TDATA
MOVLW 00H
MOVWF TRISD
MOVLW 02H
MOVWF PORTD
BSF SJCS
BSF SJALE
BSF SJRD
BSF SJWR
NOP
BCF SJALE
BCF SJCS
BCF SJRD
NOP
MOVLW 0FFH
MOVWF TRISD
NOP
MOVFF PORTD,BPORTD
RETURN
;****************************主程序开始**********************************
main_p code 0x0700
INIT NOP
CLRF INTCON
CLRF INTCON2
CLRF INTCON3 ;清除中断寄存器
CALL PORT_Init
BSF COMM_LED
BSF LATA,5
CALL LED_1TO8
NOP
NOP
BCF LATA,5
CALL SJA1000_INT0
NOP
NOP
LL
BCF COMM_LED
CALL DELY
CALL TDATA1
NOP
BSF COMM_LED
CALL DELY
GOTO LL
NOP
NOP
GOTO INIT
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -