C8051F040在基于CAN总线的分布式测控系统中的应用
MOV CAN0DATH,#00H ; MAGVAL=0;
MOV CAN0ADR,#09H ; 指向IF1的命令掩码寄存器
MOV CAN0DATL,#0A0H ?; 方向为写,改变仲裁位
MOV R1,#20H
MOV CAN0ADR, #08H ;指向IF1的命令寄存器
ENABLE_MESSAGE_OBJECTS:
MOV CAN0DATL,R1 ;写R1指向的消息目标
MOV CAN0ADR, #08H ;指向IF1的命令寄存器
WAIT_TRANSFER_OVER?
MOV A,CAN0DATH ?;读命令寄存器
JB ACC.7,WAIT_TRANSFER_OVER
DEC R1
CJNE R1,#02H,ENABLE_MESSAGE_BJECTS
;配置消息目标2为接收
MOV CAN0ADR,#21H
MOV CAN0DATL,#11111000B?; 写IF2命令掩码
MOV CAN0DATH,#00H
MOV CAN0DATL,#00H ?;写IF2掩码1
MOV CAN0DATH,#00H
MOV CAN0DATL,#00H ?; 写IF2掩码2
MOV CAN0DATL,#00H ?; 写IF2仲裁寄存器1
MOV CAN0DATH,#80H ?; 写IF2仲裁寄存器2高8位
消息目标有效,标准仲裁帧,方向为接收
MOV CAN0DATL,#00H ?; 写IF2仲裁寄存器2低8位
MOV CAN0DATH,#00010100B?; 写IF2控制寄存器高位
MOV CAN0DATL,#80H ?; 写IF2控制寄存器低位
MOV CAN0ADR, #20H
MOV CAN0DATL, #02H ?; 通过IF2写2号消息目标
WAIT_TRANSFER_OVER1;
MOV A,CAN0DATH ; 读命令寄存器
JB ACC.7,WAIT_TRANSFER_OVER1
; 等待写结束
;CAN进入操作模式
MOV CAN0CN,#00000010B ; CAN进入正常操作模式状态中断使能,
RET
发送过程是将存储在从BUF0起始地址中的2个字节的A/D采样数据,通过IF1传送到消息目标1的过程。其启动发送程序代码如下:
SEND_AD_DATA:
《C8051F040在基于CAN总线的分布式测控系统中的应用(第3页)》