单片机接收电脑四个字节,并判断返回一个确认值,+两个按键发送给电脑四个字节.docx_第1页
单片机接收电脑四个字节,并判断返回一个确认值,+两个按键发送给电脑四个字节.docx_第2页
单片机接收电脑四个字节,并判断返回一个确认值,+两个按键发送给电脑四个字节.docx_第3页
单片机接收电脑四个字节,并判断返回一个确认值,+两个按键发送给电脑四个字节.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*本程序设计为主程序内循环检测中断标示位TI,如果有接收中断就进入计数式接收,每接收到一位,接收储存在数据shujui里的0到3并将接收到的字节反回发送给电脑,菜母鲎纸冢琲就计数加一,并且每次都判断一次够了四位,就再次判断第一位是否为0X05,如果是置P0口为0x00,并发送0x00这个字符到电脑,电脑通过串口助手接收后显示,如果接收的第一位不是0x05,就只发送每次接收的字节,P0口不改变,不发送识别用电脑的串口助手发送任意四个16进制数字字符,单片机就可以接收并识别,如果只发送3个以下,单片机接收并发回接收到的3个字符,但不作处理,按K1、K2 健,单片机会发送4个预定的字符,但第一位强行改成了0x01 /0x02,第二、三位是预定的数字加自己的第几个位数的数字,第四位是第2+3位的和,K1只取了和,没有求模,但它如果大于256应该会自己益出,就是自己减去256从新开始显示,K2是直接加入了第2+3位数据的和的求模就是直接除以256只要于数,这个作用相当于数据校验让接收方可以根据同样的方法校验一下接收过来的数据是否正确,*/#include #include unsigned char j,k;unsigned char shuju4=0,0,0,0; /待发送的数据unsigned char daifa4=0,0,0,0; /待发送的数据unsigned char m,i,tmp; /m、i 为收发数据的位数,tmp为接收数据的时间限制等待时间数sbit K1=P10;/定义按键1sbit K2=P11;/定义按键2sbit K3=P33;/定义按键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 shujum=SBUF;/ 暂存接收到的数据 send_char(shujum);/ 回传接收到的数据i if(m=4)/判断是否接收够了四个字节,如果够了四个字节,进入 m=0;/如果够了四个字节 ,m的任务完成,就可以清0if(shuju1=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 自动加一, daifai=j;/待发的数据等于数据位数i 默认从0开始if(i=0)/确认如果是第一个将要发送的字节 daifai=0x01;/把第一个字节强行改成0x01,用第一位当作数据包识别位if(i=3)/确认如果是第四个字节,强行把它用第二个和第三个字节的相加daifa3=daifa1+daifa2;/之和的值附给将要发送的第四个/字节 daifa3send_char(daifai);j+; / 正常先发第一个字节 ,这是第二、三个字节,最后发第四个字节delay(1000);/ 等特数据传送 / 清除数据传送标志 / 代表发送位数的j自动加一位,/ 延时一会,等待接收方有足够的时间来处理/if(K2=0)/这个上面的定法基本上是相同的,按k1发送的第一个字节 是0x01/k2 按下发送的第一个字节是0x02, 两个第四个字节的delay(5000); if(K2=0)/校验位,一个求模了,一个没有,但结果是一样的,while(!K2);/本人也是在观察之中,中是给大家演示一下, j=128;/设定一个将要发送的第一个起始数据为128 for(i=0;i4;i+) daifai=j;if(i=0)daifai=0x02;if(i=3)/确认如果是第四个字节,强行把它用第二个和第三个字节的相加/之和然后再除以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论