CAN现场总线.rar
源代码在线查看: 01-发送函数.c
#include "reg52.h"
#include "sja1000.h"
unsigned char Txd_data;
//CAN节点发送函数
void CAN_TXD(void)
{
unsigned char bdata temp;
do
{
temp=SR; //判断报文接收完毕?
}
while(temp&0x10); //SR.4=0 发送闲置,SR.4=1 发送状态中
do
{
temp=SR; //判断最后报文请求?
}
while(!(temp&0x08)); //SR.3=0 没有余报文请求,SR.3=1 还存在报文请求
do
{
temp=SR; //判断TXFIFO是否锁定?
}
while(!(temp&0x04)); //SR.2=0 锁定,SR.2=1 开放
TBSR0=0x88; //ff=1 SFF格式,DLC.3=1 数据长度8
TBSR1='C'; //目标节点地址 CAN0
TBSR2='A';
TBSR3='N';
TBSR4=0x00;
TBSR5=Txd_data; //数据
TBSR6=0x00;
TBSR7=0x00;
TBSR8=0x00;
TBSR9=0x00;
TBSR10=0x00;
TBSR11=0x00;
TBSR12=0x00;
CMR=0x01; //命令寄存器-自动发送请求
}