📄 main.c
字号:
#include <reg51.h>
#include <intrins.h>
#include <STDIO.h>
#include <sja1000.h>
#define TR 1
#define SLAVE 0xF1 //单片机地址
#define uchar unsigned char
p2_7=0;
uchar idata lzw[10];
uchar idata tld[10]={"sucesslove"};
void Init_CAN(void)
{
BCAN_ENTER_RETMODEL();
BCAN_SET_BANDRATE(0x04);
BCAN_SET_OBJECT(0xAA,0xFF);
BCAN_SET_OUTCLK(0xAA,0x48);
BCAN_QUIT_RETMODEL();
SJA_BCANAdr=REG_CONTROL;
*SJA_BCANAdr|=0x1e;
}
TX_DATA_CAN();
RE_DATA_CAN();
SERIAL();
main()
{
SCON=0x50; //串口方式1
PCON=0x00; //单倍频
TMOD=0x21; //设置T1方式2 T0方式1
TL1=0xfd; //波特率为80kb/s
TH1=0xfd;
TR1=1;
EA=1;
ES=1;
Init_CAN();
if(TR==0)
{TX_DATA_CAN(); }
else{RE_DATA_CAN();}
SERIAL();
}
TX_DATA_CAN()
{
uchar i,pf;
do
{ SBUF=0xAA; //发送联络信息
while(TI==0); //等待发送
TI=0;
while(RI==0); //接收答应信号
RI=0;
}while((SBUF^0xBB)!=0); //未准备好继续联络
do
{ pf=0;
for(i=0;i<10;i++)
{ SBUF=lzw[i];
pf+=lzw[i];
while(TI==0);
TI=0;}
SBUF=pf;
while(TI==0)
TI=0;
while(RI==0);
RI=0; //等待回答
}while(SBUF!=0) ; //出错重发
}
RE_DATA_CAN()
{ uchar i,pf;
uchar T[10];
uchar test;
do
{}while(RI==0); //等待接收
RI=0;
test=SBUF;
test=test^0xaa;
while(test!=0)
{
SBUF=0xBB;
}
// while((SBUF^0xAA)!=0); //判断是否申请发送
// {
// SBUF=0xBB;
// }
while(TI==0)
TI=0;
while(1)
{ pf=0;
for(i=0;i<10;i++)
{while(RI==0); //接收数据
RI=0;
T[i]=SBUF; //接收一位数据
pf+=T[i]; //求和
}
while(RI==0);
RI=0;
if((SBUF^pf)==0) //比较求和是否正确
{ SBUF=0x00;
while(TI==0)
TI=0;
break;}
else
{
SBUF=0xff;
while(TI==0)
TI=0;}
}
}
void error(void)
{SBUF=0xFF;
while(TI!=1);
TI=0;}
uchar receive(uchar addrs)
{uchar i,pf;
while(1)
{while(RI!=1)
RI=0; //等待PC的联络信号
if(SBUF!=addrs) //如果出错,发送出错标志
error();
else
{TB8=0; //清地址标志位准备接受数据
SBUF=0x00; //发送约定代码00H,说明地址正确
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
{while(1)
{pf=0;
for(i=0;i<10;i++)
{while(RI!=1);
RI=0;
lzw[i]=SBUF; //单片机接收数据
pf+=lzw[i];}
while(RI==0);
RI=0;
if(SBUF==pf)
{SBUF=0x00;
while(TI!=1);
TI=0;}
else
{SBUF=0xFF; //校验和不同,发0XFF给PC机
while(TI!=1);
TI=0;}
}
TB8=1; //重置地址标志位
return(0);}
}}}
uchar send()
{uchar pf,i;
do
{pf=0;
for(i=0;i<10;i++)
{SBUF=tld[i];
pf+=tld[i];
while(TI!=1);
TI=0;}
SBUF=pf;
while(TI!=1);
TI=0;
while(RI!=1);
RI=0;
}
while(SBUF!=0);
TB8=1;
return(0);}
SERIAL()
{
receive(SLAVE);
send();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -