CAN总线实验报告

时间:2024.3.31

xiyou

CAN总线实验报告

实验一 SJA1000       初始化实验

1.实验要求

正确完成对SJA1000初始化,初始化成功后用发光二极管显示成功信号

否则循环执行初始化程序。

2.实验目的

(1)   实现SJA1000的初始化设置。

(2)   理解SJA1000的相关寄存器的设置。

3.实验内容

(1)   实验流程图

(2)   实验源程序

ORG     0DE00H

JMP     START

ORG     0DE40H

START:

MOV DPTR,#0DE00H  ;指向模式寄存器

MOV A,#0FH

MOVX @DPTR,A

MOV DPTR,#0DE1FH ;时钟

MOV A,#88H

MOVX @DPTR,A

MOV DPTR,#0DE10H ;验收滤波

MOV A,#00H

MOVX @DPTR,A

MOV DPTR,#0DE11H

MOV A,#20H

MOVX @DPTR,A

MOV DPTR,#0DE14H

MOV A,#00H

MOVX @DPTR,A

MOV DPTR,#0DE15H

MOV A,#0FH

MOVX @DPTR,A

MOV DPTR,#0DE16H

MOV A,#0FFH

MOVX @DPTR,A

MOV DPTR,#0DE17H

MOV A,#0FFH

MOVX @DPTR,A

MOV DPTR,#0DE06H ;总线时序

MOV A,#00H

MOVX @DPTR,A

MOV DPTR,#0DE07H

MOV A,#1CH

MOVX @DPTR,A

MOV DPTR,#0DE08H ;输出控制

MOV A,#0AAH

MOVX @DPTR,A

MOV DPTR,#0DE00H

MOV A,#0EH

MOVX @DPTR,A

MOV DPTR,#0DE02H

MOVX A,@DPTR

CJNE A,#0CH,START

CLR P1.0

SJMP $

END

实验截图:

实验心得:

   本次实验是对SJA1000的初始化。虽然上课听老师讲了,但具体应用起来又是另一回事,刚开始将整个初始化程序输完后,显示有错误,然后就修改修改再修改,使之完善.最后进行单步运行可并没有结果。实验二 SJA1000局部自检测实验

.实验要求:

进行单节点自测这实验,要求CAN节点自发自收标准数据(数据可自定义),并将所收数据显示到LCD上,观察与发送数据是否一致。

二.实验目的:

实现CAN节点的初始化及CAN节点的自发自收。

学会对CAN 节点的基本操作,理解CAN通信的基本流程。

三.实验器材:

计算机一台,CAN模块一个

源程序

MODE   EQU      0DE00H         ;模式寄存器

CMR      EQU      0DE01H           ;命令寄存器

SR   EQU      0DE02H              ;状态寄存器

IR   EQU      0DE03H              ;中断寄存器

IER EQU      0DE04H            ;中断使能寄存器

BTR0     EQU      0DE06H              ;总线定时寄存器一

BTR1     EQU      0DE07H            ;总线定时寄存器二

OCR      EQU      0DE08H            ;输出控制寄存器

ALC     EQU     0DE0BH          ;仲裁丢失捕捉寄存器

ECC     EQU     0DE0CH          ;错误代码捕捉寄存器

TXERR   EQU     0DE0FH          ;发送错误计数器

ACR0    EQU      0DE10H              ;验收代码寄存器0

ACR1    EQU      0DE11H            ;              1

ACR2    EQU      0DE12H              ;              2

ACR3    EQU      0DE13H            ;              3

AMR0    EQU      0DE14H       ;验收屏蔽寄存器0

AMR1    EQU      0DE15H           ;             1

AMR2    EQU      0DE16H            ;              2

AMR3    EQU      0DE17H            ;              3

FIN     EQU   0DE10H         ;发送/接收帧信息

ID1      EQU      0DE11H              ;发送/接收缓冲区之标示符一

ID2     EQU      0DE12H            ;发送/接收缓冲区之标示符二

DATA1   EQU   0DE13H           ;发送/接收数据首址

RBSA    EQU      0DE1EH                  ;接收缓冲器起始地址寄存器                       

CDR     EQU    0DE1FH         ;时钟分频寄存器

ORG     4000H

JMP     START

ORG     4080H

START:  MOV     R1,#8

        MOV     R0,#27H

FILL:   MOV     B,#11H

        MOV     A,R1

        MUL     AB

        MOV     @R0,A

        DEC     R0

        DJNZ    R1,FILL

        MOV     R0,#0AAH

        LCALL   INITCAN             ;CAN初始化(CAN片选为CS0:0DE00H)

;-------------------------发送------------------

RETRAN: MOV     DPH, #0DEH

        MOV     R0, #20H

        LCALL   SEND                ;发送20H为首址的1桢数据(前三字节为:08H、BBH、FFH,后8字节任意)

        LCALL   DELAY

;-----------------------接收数据--------------------------

        MOV     DPH, #0DEH  

        MOV     R0, #30H

        LCALL   RECV

        NOP                         ;在此处设置断点,以观察结果

        JMP     $

INITCAN:

        MOV    DPTR,#MODE        ;初始化子程序,DPH、R0为入口参数

       MOV    A,#01H

       MOVX   @DPTR,A              ;模式寄存器,单验收滤波器,进入复位模式

       MOV     DPTR,#CDR

       MOV     A,#88H

       MOVX   @DPTR, A        ;时钟分频R,选择增强CAN模式,关闭CLKOUT输出

       MOV     DPTR,#IER                

       MOV     A,#0DH                     

       MOVX    @DPTR,A                   ;中断使能寄存器,开溢出、错误、接收中断  

       MOV     DPTR,#BTR0                   

       MOV     A,#03H

       MOVX   @DPTR,A                ;总线定时寄存器一

       MOV     DPTR,#BTR1

       MOV     A,#0FFH

       MOVX    @DPTR,A                   ;总线定时寄存器二,6MHz晶振,波特率30Kbps

       MOVX    A, @DPTR

       MOV     DPTR,#OCR

       MOV     A,#0AAH

       MOVX   @DPTR,A                ;输出控制寄存器

       MOV     DPTR,#ACR0

       MOV     A, 00H

       MOVX   @DPTR,A                ;验收代码ACR0

       MOV     DPTR,#ACR1

       MOV     A,#0FFH

       MOVX    @DPTR,A                    ;无关

       INC      DPTR

       MOVX   @DPTR,A                 ;无关

       INC     DPTR

       MOVX   @DPTR,A                 ;无关

       MOV     DPTR,#AMR0

       MOV        A,#0FFH               ;modify #00 to #0FF               

       MOVX    @DPTR,A                    ;验收屏蔽寄存器AMR0=00H

       INC      DPTR

       MOV     A,#0FFH

       MOVX   @DPTR,A                  ;AMR1

       INC      DPTR

       MOVX   @DPTR,A                  ;AMR2

       INC       DPTR

       MOVX   @DPTR,A                  ;AMR3验收屏蔽:只有ACR0是相关项

       MOV     DPTR, #RBSA

       MOV     A, #00H

       MOVX    @DPTR, A            ;接收缓冲器FIFO起始地址为0

       MOV     DPTR, #TXERR

       MOVX    @DPTR, A            ;清除发送错误计数器 

       MOV     DPTR, #ECC

       MOVX    @DPTR, A            ;清除错误代码捕捉寄存器

       MOV     DPTR,#MODE

       MOV     A,#0CH             

       MOVX    @DPTR,A                  ;单滤波方式,返回工作方式  

       RET

SEND:   MOV     DPTR,#SR         ;状态寄存器

       MOVX    A,@DPTR             ;从SJA1000 读入状态寄存器值

       JB ACC.4,SEND           ;判断是否正在接收正在接收则等待

SEND0:

       MOVX    A,@DPTR

       JNB     ACC.3,SEND0         ;判断上次发送是否完成未完成则等待发送完成

SEND1:

       MOVX A,@DPTR

       JNB       ACC.2,SEND1         ;判断发送缓冲区是否锁定锁定则等待

SEND2:

       MOV     DPTR,#FIN            ;SJA1000 发送缓存区首址

       MOV     A, #08H

       MOVX    @DPTR, A

       INC     DPL

       MOV     A, #00H

       MOVX    @DPTR, A

       INC     DPL

       MOV     A, #0FFH

       MOVX    @DPTR, A

       INC     DPL    

       MOV     R2, #08H

SEND3:       

       MOV     A, @R0              ;R0为发送数据首址

       MOVX    @DPTR, A

       INC     R0

       INC     DPL

        DJNZ    R2, SEND3

       MOV     DPTR,#CMR           ;命令寄存器地址

       MOV     A,#10H              ;发送请求        

       MOVX @DPTR,A             ;启动SJA1000 发送

       RET

RECV:   MOV   DPTR,#SR       ;状态寄存器地址

       MOVX A,@DPTR

       ANL     A, #0C3H            ;读取总线脱离、错误状态、接收溢出、有数据等位

       JNZ     PROC

       RET                         ;无上述状态,结束

PROC:   JNB     ACC.7, PROC1

BUSERR: MOV     DPTR, #IR            ;IR中断寄存器,出现总线脱离

        MOVX    A, @DPTR            ;读中断寄存器,清除中断位

        MOV     DPTR, #MODE

        MOV     A, #08H

        MOVX    @DPTR, A            ;将方式寄存器复位请求位清0

        RET

        NOP

PROC1:  MOV     DPTR, #IR            ;总线正常

        MOVX    A, @DPTR            ;读取中断位

        JNB     ACC.3, OTHER

OVER:   MOV     DPTR, #CMR           ;数据溢出处理

        MOV     A, #0CH

        MOVX    @DPTR, A            ;清除数据溢出位,释放接收缓冲区

        RET

        NOP

OTHER:  JB      ACC.0, RECE

        LJMP    RECOUT              ;接收缓冲区无数据

        NOP

RECE:   CLR     P1.0

        SETB    P1.7

        MOV     DPTR, #FIN           ;接收缓冲区有数据

       MOVX   A,@DPTR

       JNB     ACC.6, RDATA

       MOV     DPTR, #CMR           ;远程桢处理

       MOV     A, #04H

       MOVX    @DPTR, A

       LJMP    RECOUT

       NOP

RDATA:  MOV     DPTR, #DATA1          ;将接收数据传至R0为首址的内存中

        MOV     R2, #08H

RDATA1: MOVX    A, @DPTR

        MOV     @R0, A

        INC     DPL

        INC     R0

        DJNZ    R2, RDATA1

        MOV     DPTR, #CMR

       MOV     A, #04H

       MOVX    @DPTR, A     

RECOUT: MOV     DPTR, #ALC       ;释放仲裁丢失捕捉寄存器和错误捕捉寄存器

        MOVX    A, @DPTR

        NOP

        RET      

DELAY:  MOV     R2, #40

DELAY1: MOV     R4, #255

DELAY2: NOP

        DJNZ    R4, DELAY2

        DJNZ    R2, DELAY1

        RET                      

     END

实验心得:

通过本次实验,对局部自检测有了较深的认识,结合上次初始化实验自己的感想,通过分析和查看课本,完成本次试验.对我来说,这次实验也让我对SJA10000有了一些了解。CAN网络进行通信时,发送器需要得到接收器的应答信号,但是,节点局部自检测不需要其它节点的配合,接终端电阻即可。实验采用中断接收,将SJA1000的中断引脚与单片机的外部中断0相连。本实验选择120Ω的终端电阻。

     实验三双机通信

一.    实验目的通过SJA1000完成CAN节点间通信

二.    实验内容在前次实验的基础上,初始化的时候定义两个节点ID号,分别为0020和0040,修改发送缓冲器的地址分别为定义的对方的ID号 修改模式寄存器的值为08.在发送子程序确认发送无误后点灯接收子程序中有数据正确接收亮灯并把接收到的数据低四位送二极管显示

实验源程序

MODE  EQU       0DE00H          ;模式寄存器

CMR    EQU       0DE01H            ;命令寄存器

SR EQU       0DE02H               ;状态寄存器

IR EQU       0DE03H               ;中断寄存器

IER      EQU       0DE04H             ;中断使能寄存器

BTR0    EQU       0DE06H               ;总线定时寄存器一

BTR1    EQU       0DE07H             ;总线定时寄存器二

OCR     EQU       0DE08H             ;输出控制寄存器

ALC     EQU     0DE0BH          ;仲裁丢失捕捉寄存器

ECC     EQU     0DE0CH          ;错误代码捕捉寄存器

TXERR   EQU     0DE0FH          ;发送错误计数器

ACR0   EQU       0DE10H               ;验收代码寄存器0

ACR1   EQU       0DE11H             ;              1

ACR2   EQU       0DE12H               ;              2

ACR3   EQU       0DE13H             ;              3

AMR0  EQU       0DE14H         ;验收屏蔽寄存器0

AMR1  EQU       0DE15H            ;             1

AMR2  EQU       0DE16H             ;              2

AMR3  EQU       0DE17H             ;              3

FIN          EQU   0DE10H           ;发送/接收帧信息

ID1   EQU       0DE11H               ;发送/接收缓冲区之标示符一

ID2          EQU       0DE12H             ;发送/接收缓冲区之标示符二

DATA1   EQU   0DE13H            ;发送/接收数据首址

RBSA   EQU       0DE1EH            ;接收缓冲器起始地址寄存器                          

CDR     EQU   0DE1FH         ;时钟分频寄存器

ORG     4000H

JMP     START

ORG     4080H

START:  MOV     R1,#8

        MOV     R0,#27H

FILL:   MOV     B,#10H

        MOV     A,R1

        MUL     AB

        MOV     @R0,A

        DEC     R0

        DJNZ    R1,FILL

        MOV     R0,#0AAH

        LCALL   INITCAN             ;CAN初始化(CAN片选为CS0:0DE00H)

;-------------------------发送------------------

RETRAN: MOV     DPH, #0DEH

        MOV     R0, #20H

        LCALL   SEND                ;发送20H为首址的1桢数据(前三字节为:08H、BBH、FFH,后8字节任意)

        LCALL   DELAY

;-----------------------接收数据--------------------------

        MOV     DPH, #0DEH  

        MOV     R0, #30H

        LCALL   RECV

        NOP                         ;在此处设置断点,以观察结果

        JMP     $

INITCAN:

        MOV    DPTR,#MODE     ;初始化子程序,DPH、R0为入口参数

     MOV    A,#01H

     MOVX   @DPTR,A                ;模式寄存器,单验收滤波器,进入复位模式

     MOV      DPTR,#CDR

     MOV      A,#88H

     MOVX    @DPTR, A     ;时钟分频R,选择增强CAN模式,关闭CLKOUT输出

     MOV      DPTR,#IER                 

     MOV      A,#0DH                      

     MOVX    @DPTR,A  ;中断使能寄存器,开溢出、错误、接收中断

     MOV      DPTR,#BTR0              

     MOV      A,#03H

     MOVX    @DPTR,A                  ;总线定时寄存器一

     MOV      DPTR,#BTR1

     MOV      A,#0FFH

     MOVX    @DPTR,A  ;总线定时寄存器二,6MHz晶振,波特率30Kbps

     MOVX    A, @DPTR

     MOV      DPTR,#OCR

     MOV      A,#0AAH

     MOVX    @DPTR,A                  ;输出控制寄存器

     MOV      DPTR,#ACR0

     MOV      A, 00H

     MOVX    @DPTR,A                  ;验收代码ACR0

     MOV      DPTR,#ACR1

     MOV      A,#2FH

     MOVX    @DPTR,A                ;无关

     MOV      A,#0FFH

     INC       DPTR

     MOVX    @DPTR,A                   ;无关

     INC     DPTR

     MOVX    @DPTR,A                   ;无关

     MOV      DPTR,#AMR0

     MOV         A,#0FFH               ;modify #00 to #0FF               

     MOVX    @DPTR,A               ;验收屏蔽寄存器AMR0=00H

     INC      DPTR

     MOV      A,#0FFH

     MOVX    @DPTR,A                    ;AMR1

     INC       DPTR

     MOVX    @DPTR,A                    ;AMR2

     INC       DPTR

     MOVX    @DPTR,A                    ;AMR3验收屏蔽:只有ACR0是相关项

     MOV     DPTR, #RBSA

     MOV     A, #00H

     MOVX    @DPTR, A            ;接收缓冲器FIFO起始地址为0

     MOV     DPTR, #TXERR

     MOVX    @DPTR, A            ;清除发送错误计数器 

     MOV     DPTR, #ECC

     MOVX    @DPTR, A            ;清除错误代码捕捉寄存器

     MOV      DPTR,#MODE

     MOV      A,#08H             

     MOVX    @DPTR,A             ;单滤波方式,返回工作方式     

     RET

SEND:   MOV     DPTR,#SR         ;状态寄存器

     MOVX    A,@DPTR             ;从SJA1000 读入状态寄存器值

     JB   ACC.4,SEND     ;判断是否正在接收正在接收则等待

SEND0:

     MOVX    A,@DPTR

     JNB     ACC.3,SEND0         ;判断上次发送是否完成未完成则等待发送完成

SEND1:

     MOVX   A,@DPTR

     JNB       ACC.2,SEND1         ;判断发送缓冲区是否锁定锁定则等待

SEND2:

     MOV     DPTR,#FIN            ;SJA1000 发送缓存区首址

     MOV     A, #08H

     MOVX    @DPTR, A

     INC     DPL

     MOV     A, #00H

     MOVX    @DPTR, A

     INC     DPL

     MOV     A, #4FH

     MOVX    @DPTR, A

     INC     DPL    

     MOV     R2, #08H

SEND3:             

     MOV     A, @R0              ;R0为发送数据首址

     MOVX    @DPTR, A

     INC     R0

     INC     DPL

        DJNZ    R2, SEND3

     MOV     DPTR,#CMR           ;命令寄存器地址

     MOV     A,#10H              ;发送请求        

     MOVX   @DPTR,A             ;启动SJA1000 发送

     RET

RECV:   MOV DPTR,#SR         ;状态寄存器地址

     MOVX   A,@DPTR

     ANL     A, #0C3H            ;读取总线脱离、错误状态、接收溢出、有数据等位

     JNZ     PROC

     RET                         ;无上述状态,结束

PROC:   JNB     ACC.7, PROC1

BUSERR: MOV     DPTR, #IR            ;IR中断寄存器,出现总线脱离

        MOVX    A, @DPTR            ;读中断寄存器,清除中断位

        MOV     DPTR, #MODE

        MOV     A, #08H

        MOVX    @DPTR, A            ;将方式寄存器复位请求位清0

        RET

        NOP

PROC1:  MOV     DPTR, #IR            ;总线正常

        MOVX    A, @DPTR            ;读取中断位

        JNB     ACC.3, OTHER

OVER:   MOV     DPTR, #CMR           ;数据溢出处理

        MOV     A, #0CH

        MOVX    @DPTR, A            ;清除数据溢出位,释放接收缓冲区

        RET

        NOP

OTHER:  JB      ACC.0, RECE

        LJMP    RECOUT              ;接收缓冲区无数据

        NOP

RECE:   CLR     P1.0

        SETB    P1.7

        MOV    DPTR, #FIN           ;接收缓冲区有数据

     MOVX    A,@DPTR

     JNB     ACC.6, RDATA

     MOV     DPTR, #CMR           ;远程桢处理

     MOV     A, #04H

     MOVX    @DPTR, A

     LJMP    RECOUT

     NOP

RDATA:  MOV     DPTR, #DATA1          ;将接收数据传至R0为首址的内存中

        MOV     R2, #08H

RDATA1: MOVX    A, @DPTR

        MOV     @R0, A

        INC     DPL

        INC     R0

        DJNZ    R2, RDATA1

        MOV     DPTR, #CMR

     MOV     A, #04H

     MOVX    @DPTR, A

RECOUT: MOV     DPTR, #ALC          ;释放仲裁丢失捕捉寄存器和错误捕捉寄存器

        MOVX    A, @DPTR

        NOP

        RET    

DELAY:  MOV     R2, #40

DELAY1: MOV     R4, #255

DELAY2: NOP

        DJNZ    R4, DELAY2

        DJNZ    R2, DELAY1

        RET                    

     END

实验截图:

实验心得 :

    本试验不再是单一试验台的操作,而是两台实验台联机操作,这在实际中应用是很多的。当然也较为复杂,但是有了前几次试验的基础,操作起来还比较顺手。试验中,主要是要明白对各个寄存器的配置,ID号在通信中所起的具体作用。以前觉得抽象枯燥的寄存器的配置,通过它所通过它所具体实现的功能,我们有了直观认识。

更多相关推荐:
实验总结报告

实验报告专业:______姓名:______学号:______日期:______桌号:______________课程名称:模拟电子技术基础实验指导老师:成绩:________________实验名称:实验总结…

实验设计报告的各种心得体会

实训心得体会为期一周的高频电子线路实训就这样告一段落了我们通过这一周紧锣密鼓的实训我们对于通信电子电路的这门课程又有了更直观更深刻的了解首先我们在实训的第一天和第二天对于高频小信号调谐放大器场效应管谐振放大器集...

实验报告范文

心理学实验报告20xx09141109短时记忆的信息提取20xx年12月28日星期四1034摘要本次实验通过测定男女两名被试对不同长度识记数字的检查项目的再认重复Sternberg著名的短时记忆信息提取实验了解...

实验报告范本

华侨大学工学院实验报告课程名称实验项目名称学院专业班级姓名学号指导教师年月日预习报告一实验目的二实验仪器三实验原理预习报告四实验内容及步骤实验报告指导老师签名五实验原始数据时间实验报告六数据处理实验报告七实验结...

实验报告格式

2020学年第学期佛山职业技术学院食品营养与检测专业实验报告课程名称食品添加剂专业班级姓名学号所在组别同组成员实验地点实验时间实验一几种食品添加剂在果味饮料中的应用实例佛山职业技术学院食品营养与检测专业指导教师...

实验报告和总结

科技与艺术学院经管系实验报告实验名称证券投资实践实验地点10号机房实验时间20xx20xx2系部经管系专业国贸经济与贸易班级08国贸4学生姓名李文静学号Xc08510420指导老师牧云志151617

实验报告格式

实验报告课程名称物证技术学实验项目名称捺印手印样本指纹显现提取班级与班级代码074213070853实验室名称或课室法学实验教学中心专业任课教师刘红学号0925020xx20姓名康杰辉实验日期20xx年12月1...

计算方法实验报告格式20xx

一实验总体要求1实验报告要求用实验报告纸2实验报告要求手写3根据规定格式写实验报告具体见第五节4实验报告前四项内容在上实验前写好5实验报告第五项在实验课上根据具体情况写6每节实验课下课前交实验报告7提倡实验程序...

实训实验报告

信息工程学院数据库实验训练设计报告题目电视机库存系统班级软件133班学号20xx20xx5039姓名德世洋日期2014年9月内蒙古工业大学信息工程学院一程序设计的目的和要求1目的本实验的目的是进一步理解线性表链...

一份关于“诚信”的实验报告作文

一份关于诚信的实验报告作文一份关于gt诚信的实验报告作文周尚辰实验目的探索诚信这一物质的性质实验器材镊子蓝色固体诚信黑色固体虚假无色汗水溶液混浊唾液溶液两根试管实验步骤1用镊子取几块黑色固体虚假放入一号试管中并...

会计实务实验报告标准格式

会计实务学生实验报告学院商学院课程名称会计实务专业班级财务管理二班姓名关琪凡学号20xx1222255郑州大学西亚斯国际学院商学院学生实验报告一实验目的及要求1实验目的通过本课程实践增强学生对理论知识的理解与记...

android实验报告模板(新)

移动互联网开发Android实验报告姓名万思学号专业指导老师张华完成日期20xx1116目录实验一Android开发环境的搭建41实验目的及要求42实验设备环境及要求43实验内容44实验步骤55实验核心代码关键...

实验报告总结范文(43篇)