双机通讯课程设计报告--双机通信的设计.doc

双机通讯课程设计报告--双机通信的设计.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
测控仪器课程设计报告书 题目:双机通信的设计 双机通讯 设计目的 基于单片机实现双机通信 设计要求 单片机要发送信息到另外一个单片机,另外一个单片机要反馈信息给发送者。实现两个单片机的通信。 三、设计器材 STC89C52芯片(2个) LED七段显示数码管(2个) 晶振(2个) 发光二极管(4个) 复位开关(2个) 5V电源(1个) 导线(若干) 四、设计方案及分析 主机发送从机接收方式的主机工作流程: 主机设置数据传送方法控制位DIR位0,以表示主机有数据发送到从机; 主机STB端口产生一个负脉冲,以使从机进入中断,并准备接收数据; 主机将数据送8位数据端口,再设定ACK信号表示数据有效: 主机检查CHK端口,等待从机8位端口取走数据; 数据发送完成返回。 主机接收从机发送方式的主机工作流程: 进入中断服务程序; 检查数据传送的方向 如果DIR为0.。则等待CHK信号有效,再从8位端读取数据,读完后设定ACK信号有效 如果DIR为1,从机将数据送到8位端上,再设定ACK 位有喜爱哦,并等待主机取走数据(即CHK信号有效); 推出中断服务程序。 程序: #include reg52.h #define unchar unsigned char #define unint unsigned int sbit Key = P1^1; sbit Led = P1^0; unchar code SEG7[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x02,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; unchar temp = 0; unchar count = 0; void Uartsend(unchar k) //串口发送子函数 { SBUF = k; while(!TI); //待待发送结束 TI=0; //添加发送中断(仿真时不需要) } void delay(int t){ int n,m; for (n=t;n0;n--){} for (m=t;m0;m--){} } void main() { Led = 1; TMOD = 0x20; //定时器1工作方式2 TH1 = 0xfa; TL1 = 0xfa; //装入定时器初值11.0592M晶振,波特率4800 PCON = 0; //波特率不倍增 ET1 = 0; //定时器1中断允许 EA = 1; //总中断允许 ES = 1; //串口中断允许 TR1 = 1; //定时器0开始计时 SCON = 0x50; //串口工作方工1,准备接收 while(1) //死循环 { if(!Key) //判断是否有键按下 delay(50); while(!Key) { Led = 0; count += 1; //delay(100); Uartsend(count);//用串口发送0xaa while(!Key);//等待键释放 delay(20); while(!Key);//等待键释放 } Led = 1; if(count == 15) count = 0; P0 = SEG7[temp]; } } void uart() interrupt 4 { EA=0; if(RI) //判断是否为接收中断 { temp = SBUF; //读数据 if(temp != count) Uartsend(temp); count = temp; RI = 0; //清除中断标志 } TI = 0; //清除中断标志 EA=1; } 仿真图: 五、问题分析与解决方法 仿真没有问题,但焊好板子后,所实现的功能并非预期的结果。因为仿真正确,所以我们认为应该是板子焊接的问题,但经过再三检测,发现板子焊接完全没有问题。问题究竟在哪,一时我们没有找出来。最后请教别人后,从硬件开始入手,用万用表全部检测了两遍,板子没问题。接着只能推出是软件,是程序的问题。仿真没问题的,可是那只是仿真。我们仔细研究了一下程序,对串口通信,主要从RI,TI串口中断入手,发现程序处理太快,出现了死循环。我们就加了延时进去。但是还是没有解决,延时有了,还是会进入到死区的。请了一位大四的学长,又研究了一下,最后我们把问题归结到串口那两个终端上。最后经过检查,发现在等待

文档评论(0)

li455504605 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档