请教个问题: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
用CAN助手 试一下
下载软件 链接:软件下载 AIapp-ISP-V6.94R 版
芯LYS 发表于 2024-10-11 09:30
用CAN助手 试一下
下载软件 链接:软件下载 AIapp-ISP-V6.94R 版
谢谢您的回复,发送数据基本没有问题,但是我发现TMP2_BUF占用的3个字节之后的地址也被修改了,我不知道哪里出了问题,所以才在这里发帖。 你提供的代码只对 TMP2_BUF+0、TMP2_BUF+1、TMP2_BUF+2 进行了操作,查一下程序里是否还对后面的地址进行了操作。
此外检查是否有变量定义到后面的地址上了。
CAN模块接收的数据是放在 RX_BUF 里面,通过代码读取出来放到RAM里面的。 乘风飞扬 发表于 2024-10-11 17:15
你提供的代码只对 TMP2_BUF+0、TMP2_BUF+1、TMP2_BUF+2 进行了操作,查一下程序里是否还对后面的地址进行了 ...
谢谢乘风老师的回复,我明天去仔细看下。
页:
[1]