您的位置 首页 FPGA

单片机双机点对点通讯规划

单片机双机点对点通信设计-#define__MAX_LEN_64//数据最大长度

#define_MHz_11//设置单片机使用的晶振频率(11.0592MHz)

/*以下为程序协议中使用的握手信号*/

#define__RDY_0x06//主机开始通信时发送的呼叫信号

#define__BUSY_0x15//从机忙应答

#define__OK_0x00//从机准备好

#define__SUCC_0x0f//数据传送成功

#define__ERR_0xf0//数据传送错误

/*双机点对点通讯的从机部分*/

#ifndef__P2P_S_C__

#define__P2P_S_C__

#include

#include

#define__MAX_LEN_64//数据最大长度

#define_MHz_11//设置单片机运用的晶振频率(11.0592MHz)

/*以下为程序协议中运用的握手信号*/

#define__RDY_0x06//主机开端通讯时发送的呼叫信号

#define__BUSY_0x15//从机忙应对

#define__OK_0x00//从机准备好

#define__SUCC_0x0f//数据传送成功

#define__ERR_0xf0//数据传送过错

voidinit_serial();//串口初始化

unsignedcharrecv_data(unsignedchar*buf);//接纳数据

voidBeep_ok();//蜂鸣表明数据接纳ok,该函数代码未给出

voidmain()

{

charbuf[__MAX_LEN_];

unsignedchari=0;

unsignedchartmp=0xff;

/*串口初始化*/

init_serial();//初始化串口

EA=0;//封闭一切中止

/*进入设备应对阶段*/

while(1)

{

/*假如接纳到的数据不是握手信号__RDY_,则持续等候*/

while(tmp!=__RDY_)

{

RI=0;

while(!RI);

tmp=SBUF;

RI=0;

}

/*程序经过检测P0口数据判别当时设备状况,若P0=0xab,表明当时设备忙*/

P0=0xff;

tmp=P0;

if(tmp==0xab)//假如P0口数据为0x,则当时设备忙,发送__BUSY_信号

{

TI=0;

SBUF=__BUSY_;

while(!TI);

TI=0;

conTInue;

}

TI=0;//不然发送__OK_信号表明能够接纳数据

SBUF=__OK_;

while(!TI);

TI=0;

/*数据接纳*/

tmp=0xff;

while(tmp==0xff)

{

tmp=recv_data(buf);//校验失利回来0xff,接纳成功则回来0

}

Beep_ok();//蜂鸣表明数据接纳成功

}

}

/*初始化串口*/

voidinit_serial()

{

TMOD=0x20;//定时器T1运用工作方式2

TH1=250;//设置初值

TL1=250;

TR1=1;//开端计时

PCON=0x80;//SMOD=1

SCON=0x50;//工作方式1,波特率9600bps,答应接纳

}

/*接纳数据,留意该函数运用buf指向的缓冲区保存数据,在数据结尾运用’’表明数据完毕

*回来值为0,数据校验成功,回来值为0xff,数据校验失利

*/

unsignedcharrecv_data(unsignedchar*buf)

{

unsignedcharlen;//该字节用于保存数据长度

unsignedcharecc;//该字节用于保存校验字节

unsignedchari,tmp;

/*接纳数据长度*/

RI=0;

while(!RI);

len=SBUF;

RI=0;

/*运用len的值为校验字节ecc赋初值*/

ecc=len;

/*接纳数据*/

for(i=0;i{

while(!RI);

*buf=SBUF;//接纳数据

ecc=ecc^(*buf);//进行字节校验

RI=0;

buf++;

}

*buf=0;//表明数据完毕

/*接纳校验字节*/

while(!RI);

tmp=SBUF;

RI=0;

/*进行数据校验*/

ecc=tmp^ecc;

if(ecc!=0)//校验失利

{

*(buf-len)=0;//清空数据缓冲区

TI=0;//发送校验失利信号

SBUF=__ERR_;

while(!TI);

TI=0;

return0xff;//回来0xff表明校验过错

}

TI=0;//校验成功

SBUF=__SUCC_;

while(!TI);

TI=0;

return0;//校验成功,回来0

}

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/345108.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部