- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机接收电脑四个字节,并判断返回一个确认值,两个按键发送给电脑四个字节
/*本程序设计为主程序内循环检测中断标示位TI,如果有接收中断就进入计数式接收,每接收到一位,接收储存在数据shuju[i]里的0到32并将接收到的字节反回发送给电脑,菜母鲎纸冢琲就计数加一,并且每次都判断一次C够了四位,就再次判断第一位是否为0X05,如果是置P0口为0x00,并发送0x00这个字符到电脑,电脑通过串口助手接收后显示,如果接收的第一位不是0x05,就只发送每次接收的字节,P0口不改变,不发送识别用电脑的串口助手发送任意四个16进制数字字符,单片机就可以接收并识别,如果只发送3个以下,单片机接收并发回接收到的3个字符,但不作处理,按K1、K2 健,单片机会发送4个预定的字符,但第一位强行改成了0x01 /0x02,第二、三位是预定的数字加自己的第几个位数的数字,第四位是第2+3位的和,K1只取了和,没有求模,但它如果大于256应该会自己益出,就是自己减去256从新开始显示,K2是直接加入了第2+3位数据的和的求模就是直接除以256只要于数,这个作用相当于数据校验让接收方可以根据同样的方法校验一下接收过来的数据是否正确,*/#include reg51.h#include intrins.hunsigned char j,k;unsigned char shuju[4]={0,0,0,0}; //待发送的数据unsigned char daifa[4]={0,0,0,0}; //待发送的数据unsigned char m,i,tmp; //m、i 为收发数据的位数,tmp为接收数据的时间限制等待时间数sbit K1=P1^0;//定义按键1sbit K2=P1^1;//定义按键2sbit K3=P3^3;//定义按键2void delay(unsigned int a)//延时,省略了一个定时器,定时器用tmp来代替了{while(--a);}void send_char(unsigned char txd)// 传送一个字符的调用子程序{SBUF = txd;// 传送一个字符while(!TI);// 等特数据传送TI = 0;// 清除数据传送标志}main()// 传送一个字符主程序{REN=1;// 定时器1工作于8位自动重载模式, 用于产生波特率 SM0=0;// 波特率9600SM1=1;TMOD=0x20;// 设定串行口工作方式TH1=0xFD;// 波特率不倍增TL1=0xFD;// 启动定时器1 TR1=1; EA=1; ES=1;P0=0xff;while(1){if(RI)// 是否有中断,有就开始准备好收数据了 { RI = 0;//先把串口接收中断标志清0复位,好让它接收下一个字节 m++;//要接收的个数,接收 一位,就加一 tmp=0;// 等待接收时间清0 shuju[m]=SBUF;// 暂存接收到的数据 send_char(shuju[m]);// 回传接收到的数据i if(m==4)//判断是否接收够了四个字节,如果够了四个字节,进入 { m=0;//如果够了四个字节 ,m的任务完成,就可以清0if(shuju[1]==0x05)//然后判断第一个字节是否为0X05 { m=0;//所以就把m清0 P0=0x00;//如果是0X05,Po口显示0x00,点亮8个LED send_char(P0);//同时,通过串口把Po状态0x00发送到电脑,这个相当于 }//给电脑发了一个反馈信号,告诉电脑收到了正常的数据包 else {//判断如果第一个字节不是0X05就执行 P0=0xff;//Po口关闭led,不给电脑上传数据 } }}if(m)//m说明前面只要有一次发生接收中断,就开始进入tmp 计数,没有就不进入可以节省{//cpu的负担,不用时刻都在让tmp计数, tmp++;//执行完上面的循环接收时,不管接收到几个,tmp都做为计数器功能,加一if(tmp==10)//经测试正常接收四个字节,tmp会加到4, {m=0;//所以不管接收了几个,等tmp加到了10,不管接收几位,就把m和tpm强行tmp=0;//给清0.目的是防止接收3个以下数量的字节,少于4个都是错包强行丢弃 }//下次再有数据中断时,重新开始接收四个字节}//发送方也必需从新发送四个完整字节,否则一律丢弃////////////if(K1==0)//如果有健按下{delay(5000);//延时一下 if(K1==0)//确实有按键按下{while(!K1);//等待忪手 j=2;//设定一个将要发送的第一个起始数据为2for(i=0;i4;i++)//循环发送四个字节,i 自动加一, { daifa[i]=j;//待发的数据等于数据位数i 默认从0开始if(i==0)//确认如
您可能关注的文档
- domino新手指南.doc
- 第7章 状态图.ppt
- 作文必备模板一整体框架.doc
- photoshop教你制作飞出照片立体边框.doc
- photoshop打造平面立体边框.doc
- 第一部分 SDK编程.ppt
- delphi消息机制.doc
- 计算机基础操作系统三.ppt
- 第五组系统总体功能框图.doc
- 必修三-Y-高考状元高中历史知识框架体系(单元主干知识图表).doc
- 2025年天津市“新农村”农村生活垃圾资源化处理项目可行性研究报告.docx
- 新解读《GB_T 29854-2013社区基础数据元》最新解读.docx
- 新解读《GB_T 29853.2-2013信息技术 业务操作视图 第2部分:作为业务对象的剧本及其构件的注册》最新解读.docx
- 新解读《GB_T 29836.1 - 2013系统与软件易用性 第1部分:指标体系》最新解读.docx
- 新解读《GB_T 29836.2 - 2013系统与软件易用性 第2部分:度量方法》最新解读.docx
- 2025年上海市蜀锦在城市公共艺术装置创作中的应用研究报告.docx
- 新解读《GB_T 29839 - 2013额定电压1kV(Um = 1.2kV)及以下光纤复合低压电缆》最新解读.docx
- 2025年上海市新能源汽车充电桩电缆应用可行性研究报告.docx
- 新解读《GB_T 29841.1 - 2013卫星定位个人位置信息服务系统 第1部分:功能描述》最新解读.docx
- 新解读《GB_T 29841.2-2013卫星定位个人位置信息服务系统 第2部分:终端与服务中心信息交换协议》最新解读.docx
文档评论(0)