newlined 发表于 2024-10-11 09:21:01

请教个问题:CAN2模块收发3个字节的数据,这样设置可以吗?

本帖最后由 newlined 于 2024-10-11 09:27 编辑

首先是读数据,不需要解析ID,是标准帧,TMP2_BUF 是不是占用3个字节就可以了?谢谢。



CAN2_ReadMsg:
                              ORL   AUXR2,         #08H                                           ;选择CAN2模块
                              MOV   A, #RX_BUF0
                              CALL    CAN_ReadReg
                              MOV   TMP2_BUF+0, A
                              
                              MOV   A, #RX_BUF1
                              CALL    CAN_ReadReg
                              MOV   TMP2_BUF+1, A
                              
                              MOV   A, #RX_BUF2
                              CALL    CAN_ReadReg
                              MOV   TMP2_BUF+2, A
                              
                              MOV   A, #RX_BUF3
                              CALL    CAN_ReadReg
                              MOV   RX2_BUF+0, A   ;RX_BUF+0
                              
                              MOV   A, #RX_BUF0
                              CALL    CAN_ReadReg
                              MOV   RX2_BUF+1, A   ;RX_BUF+1
                              
                              MOV   A, #RX_BUF1
                              CALL    CAN_ReadReg
                              MOV   RX2_BUF+2, A   ;RX_BUF+2


发送数据:
CAN2_SendMsg:
                              PUSH    WR2
                              MOV   A, #TX_BUF0
                              MOV   B, #03H      ;bit7: 标准帧(0)/扩展帧(1), bit6: 数据帧(0)/远程帧(1), bit3~bit0: 数据长度(DLC)
                              CALL    CAN_WriteReg
                              
                              MOV   WR2, CAN2_ID
                              SLL   WR2
                              SLL   WR2
                              SLL   WR2
                              SLL   WR2
                              SLL   WR2
                              MOV   A, #TX_BUF1
                              MOV   B, R2
                              CALL    CAN_WriteReg
                              MOV   A, #TX_BUF2
                              MOV   B, R3
                              CALL    CAN_WriteReg
                              
                              MOV   A, #TX_BUF3
                              MOV   B, TX2_BUF+0
                              CALL    CAN_WriteReg
                              
                              MOV   A, #TX_BUF0
                              MOV   B, TX2_BUF+1
                              CALL    CAN_WriteReg
                              
                              MOV   A, #TX_BUF1
                              MOV   B, TX2_BUF+2
                              CALL    CAN_WriteReg
   
                              MOV   A, #TX_BUF3
                              MOV   B, #0
                              CALL    CAN_WriteReg
                              
                              MOV   A, #CMR
                              MOV   B, #04H                                                ;发起一次帧传输
                              CALL    CAN_WriteReg
                              POP                WR2
                              RET

                              



芯LYS 发表于 2024-10-11 09:30:04


用CAN助手 试一下

下载软件 链接:软件下载    AIapp-ISP-V6.94R 版



newlined 发表于 2024-10-11 09:36:29

芯LYS 发表于 2024-10-11 09:30
用CAN助手 试一下

下载软件 链接:软件下载    AIapp-ISP-V6.94R 版

谢谢您的回复,发送数据基本没有问题,但是我发现TMP2_BUF占用的3个字节之后的地址也被修改了,我不知道哪里出了问题,所以才在这里发帖。

乘风飞扬 发表于 2024-10-11 17:15:51

你提供的代码只对 TMP2_BUF+0、TMP2_BUF+1、TMP2_BUF+2 进行了操作,查一下程序里是否还对后面的地址进行了操作。
此外检查是否有变量定义到后面的地址上了。
CAN模块接收的数据是放在 RX_BUF 里面,通过代码读取出来放到RAM里面的。

newlined 发表于 2024-10-11 18:12:36

乘风飞扬 发表于 2024-10-11 17:15
你提供的代码只对 TMP2_BUF+0、TMP2_BUF+1、TMP2_BUF+2 进行了操作,查一下程序里是否还对后面的地址进行了 ...

谢谢乘风老师的回复,我明天去仔细看下。
页: [1]
查看完整版本: 请教个问题:CAN2模块收发3个字节的数据,这样设置可以吗?