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

📄 sja100_can_rx.asm

📁 SJA100的CAN初始化以及接收子程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*************************************************	
;	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 + -