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

📄 sja100_init_code.asm

📁 PIC18F452下SJA100的初始化
💻 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 + -