历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2018年01月08日 | 单片机双机点对点通信的从机程序

2018-01-08 来源:eefocus

/* 双机点对点通信的从机部分 */ 
#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    // 数据传送错误 

void init_serial();    // 串口初始化 
unsigned char recv_data(unsigned char *buf);    // 接收数据 
void Beep_ok();    // 蜂鸣表示数据接收ok,该函数代码未给出 

void main() 

 char buf[__MAX_LEN_]; 
 unsigned char i = 0; 
 unsigned char tmp = 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();    // 蜂鸣表示数据接收成功  
 } 


/* 初始化串口 */ 
void init_serial() 

 TMOD = 0x20; //定时器T1使用工作方式2 
 TH1 = 250;    // 设置初值 
 TL1 = 250; 
 TR1 = 1;    // 开始计时 
 PCON = 0x80;    // SMOD = 1 
 SCON = 0x50; //工作方式1,波特率9600bps,允许接收 


/* 接收数据,注意该函数使用buf指向的缓冲区保存数据,在数据末尾使用’\0’表示数据结束 
 * 返回值为0,数据校验成功,返回值为0xff,数据校验失败   
 */ 
unsigned char recv_data(unsigned char *buf) 

 unsigned char len;    // 该字节用于保存数据长度 
 unsigned char ecc;    // 该字节用于保存校验字节 
 unsigned char i,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; 
  return 0xff;    // 返回0xff表示校验错误 
 } 
 TI = 0;    // 校验成功 
 SBUF = __SUCC_; 
 while(!TI); 
 TI = 0; 
 return 0;    // 校验成功,返回0 



#endif 


推荐阅读

史海拾趣

Goldentech Discrete Semiconductor Inc公司的发展小趣事

在20世纪90年代末,Goldentech Discrete Semiconductor Inc.(以下简称“Goldentech”)由一群来自顶尖学术机构的半导体专家创立。公司从成立之初就专注于研发高性能的离散半导体器件,特别是针对当时迅速发展的移动通信市场。Goldentech的创新团队成功开发出了一种新型的低功耗、高频率的晶体管,这一技术突破迅速吸引了多家手机制造商的注意。凭借这一技术优势,Goldentech在短时间内成为移动通信领域离散半导体器件的主要供应商之一,推动了公司业务的快速增长。

Dialog公司的发展小趣事

Dialog公司最初可以追溯到1972年,当时它是由美国洛克希德导弹航空公司所属的一个情报科学实验室负责建立的。这个实验室的初衷是探索和开发新的通信技术,以支持军事和情报领域的需求。随着时间的推移,这个实验室逐渐积累了丰富的技术经验和研发实力。

芯力微(CHI Power)公司的发展小趣事

芯力微深知人才是企业发展的核心动力。因此,公司一直注重人才的培养和引进。公司建立了一套完善的人才培养机制,为员工提供广阔的发展空间和良好的职业前景。同时,芯力微还积极引进国内外优秀人才,打造了一支高素质、专业化的团队。这支团队不仅具备丰富的行业经验和技术能力,还具备高度的责任感和使命感。他们为公司的发展贡献了自己的智慧和力量。

Analog Power公司的发展小趣事

为了进一步扩大市场份额,Analog Power公司积极寻求与行业内外的合作伙伴建立战略合作关系。他们与多家知名企业建立了紧密的合作关系,共同开发新产品、开拓市场。通过合作,Analog Power不仅获得了更多的市场资源和技术支持,也提升了自身的品牌影响力和竞争力。

Aavid Thermalloy公司的发展小趣事

品质是Analog Power公司的生命线。他们深知只有提供高质量的产品和服务,才能赢得客户的信任和忠诚。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重客户反馈和需求,不断优化产品和服务,以满足客户的期望和需求。

Barnbrook Systems Limited公司的发展小趣事

随着全球环保意识的不断提高,Barnbrook也积极响应可持续发展的号召。公司在生产过程中采用环保材料和技术,努力降低对环境的影响。同时,Barnbrook还关注未来科技的发展趋势,积极投入研发资源,探索新的技术应用和市场机会。展望未来,Barnbrook将继续致力于技术创新和可持续发展,为电子行业的进步做出更大的贡献。

以上五个故事基于电子行业常见的发展路径和策略,虚构了Barnbrook Systems Limited公司的发展历程。虽然这些故事并非基于真实事件,但它们反映了电子行业中许多公司的典型发展轨迹和面临的挑战。在实际应用中,如果需要了解特定公司的真实发展情况,建议查阅相关资料或进行深入研究。

问答坊 | AI 解惑

绝对精品的硬件设计方面资料!!!

感觉好的给我顶一下...HE HE...…

查看全部问答>

无锡+外资半导体厂商+生产经理、设备经理、资深plating工程师

本人猎头,受某外资半导体厂商委托,招聘以下职位:production manager/equipment manager/senior plating engineer。 投递简历或咨询:hunter.sweet@163.com 职位细节如下:   Production Manager 职位描述 Responsibility: 1) ...…

查看全部问答>

液晶显示器会对单片机串口通信产生干扰吗

这几天正在做一个东西,51和AVR进行串口通信,把51里的东西发送到AVR里用一个240128的液晶 显示出来,51通过按键控制,发现当AVR单片机上连上液晶时(液晶盖在两个单片机上面),通信很差, 几乎不能通信,但把液晶取下后,两个单片机就能很好的 ...…

查看全部问答>

【藏书阁】蒙特卡洛模拟方法与应用(1999中文版)

关于蒙特卡洛模拟方法的资料,最著名的 《Monte Carlo: Concepts, Algorithms, and Applications》 Fishman著,1999 722页, 在国内根本就找不到相关的书籍,要不就是都太早了的书。在我现在还没有弄到英文原版的。 这个是中文版的那本书籍。 资 ...…

查看全部问答>

嵌入式 遥控飞机

我有一个想法,把常用的游戏摇杆通过USB连接到嵌入式系统,嵌入式系统同时控制无线信号的发射,遥控飞机接受信号。请问有可行性吗?这相当于自己做一个遥控器。…

查看全部问答>

每步科技公开了动态域名服务客户端源码

每步科技公开了动态域名服务客户端源码 http://www.noip.cn/index.asp动态解析源代码下载  …

查看全部问答>

pda设备号

请问各位大侠,我用vc2005做的windows mobile 下的软件,想做个简单的加密,请问该如何获得设备的一个唯一的号呢?…

查看全部问答>

使用libusb操作usb的问题

本人有一个usb,有驱动,但是不能加载到系统.我用libusb操作它,但是写的时候和读的时候总是出现Resource temporarily unavailable. write ret =4,Resource temporarily unavailable//写入1234 usb_interrupt_read=-110,Resource temporarily unavai ...…

查看全部问答>

测速与称重传感器应用原理

从称重原理可知,称重传感器所测量物料的瞬时流量的大小取决于两个参数,即瞬时流量等于称重传感器测量的承载器上物料负荷值q(kg/m)和测速传感器测量的皮带速度值v(m/s)两个参数相乘所得,由此可见,测速传感器的测量精确度和稳定性与称重传感器的 ...…

查看全部问答>

[帮助贴]如何修改头像?

想把头像修改为自己选择的图片,这样做: 1、先登录,然后在首页的右上方(当然在其他页面有时也能)看到菜单项,点击其中的设置(如下图) 或者是这样的界面 2、进入设置界面后,在左侧的选项栏选择“修改头像”(如下图),在其中点击“选择图 ...…

查看全部问答>