单片机 c语言 trd,两个单片机之间数据通信的仿真实现.doc

两个单片机之间数据通信的仿真实现.doc

目 录 一、 课程设计 内容 要求 4 二、方案设计 5 三、电路 原理图 设计 6 3.1 电路原理图 6 3.2 硬件 系统 简介 6 3.3 AT89C51 单片机简介 7 3.4 晶振电路的设计 7 四、 软件的设计 8 4.1 软件流程图 8 4.2 程序 的 设计 10 五、 仿真 与调试 14 六 、结论与心得 18 七 、参考文献 19 2 摘 要 80C51 是最常见的一种 8 位单片机,具有多机通信的功能,可以很好完成基本的数据数据通信的功能。借助 PROTEUS 等仿真软件强大的仿真功能,可以从工程的角度直接能够看到仿真程序的运行电路工作的结果。因此弥补实验和实际单片机之间 数据通信的脱节环节,因而具有一定的研究意义。本次设计在了解一定数据通信有关知识的基础上,利用单片机串口进行多个单片机的数据通信的仿真基本上达到了与实际多个单片机之间的数据通信的相同一致的效 果。 3 一 课程设计内容要求 单片机在工业控制 、 尖端武器 、 通信设备 、 信息处理 、 家用电器等各测控领域的应用非常广泛。单片机之所以能在通信设备的测控领域中广泛应用的一个重要的基础就是它具有数据通信的能力。而串行数据通信又是数据通信中最基本的也是最重要的一种。 80C51 是最常见的一种 8 位单片机 ,具有多机通信的功能,可以很好完成基本的数据数据通信的功能。借助 PROTEUS 等仿真软件强大的仿真功能,可以从工程的角度直接能够看到仿真程序的运行电路工作的结果。因此弥补实验和实际单片机之间数据通信的脱节环节,因而具有一定的研究意义。本次设计在了解一定数据通信有关知识的基础上,利用单片机串口进行多个单片机的数据通信的仿真基本上达到了与实际多个单片机之间的数据通信的相同一致的效果。 具体应完成以下任务 1分析设计任务,搜集参考文献,根据设计任务要求进行分析与论证,认真完成开题报告。 2熟悉了解并掌握 8051 单片机工作原理和结构及接口技术 、 串行通信工作原理 、 熟练掌握 8051 汇编语言或单片机 C 语言的运用 ,熟练掌握 PROTEUS仿真软件的使用 ,了解并掌握串行通信的种类及学会如何利用单片机的来实现相关功能。 3根据要求,完成(仿真)硬件电路的设计,并再理解和掌握一定相关数据串 行通信的与概念的基础上用 8051 单片机汇编语言或 C 语言,完成数据串行通信的数据发送与接受。利用仿真软件完成多个单片机之间数据通信功能的软件设计。 4 通过调试或(仿真)多个单片机之间的通信功能。 5总结设计过程,完成课程设计。 4 二、方案设 计 本设计的题目要求是一个 8951(主)与两个 8951(副)做串行多工发送数据,但是串行通信分同步异步两 种方式。 1 异步通信 ASYNCAsynvhronous Data Communication 在异步通讯中数据或字符是一帧( frame)一帧地传送的。帧定义为一个字符的完整的通讯格式,通常也称为帧格式。最常见德的帧格式一般是先用一个起始位“ 0”表示字符的开始;然后是 5 8 位的数据,规定低位在前,高位在后;其后是奇偶效验位,此位通过对数据奇偶性的检查,可用于判别字符传送的正确性,其有三种可能的选择,即奇,偶,无效验,用户可根据需要选择(在有的格式中这个位可省略);最后是停止位,用以表示字符的结束,停止位可以 是 1 位, 1.5 位, 2 位,不同的计算机规定有所不同。从起始位开始就停止位结束构成完整的一帧。下图是一种 11 位的帧格式。 由于异步通信每传送一帧有固定格式,通讯双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通讯方式简单。此外,他还能利用校验位检测错误,所以这种通信方式应用较广泛。 2 同步通信 SYNCSynchronous Data Communication 在同步通信中,数据或字符开始处是用一同步字符在指示(一般约定为 1 2个字符),以现发送端和接收端同步,一旦检测到约定同步字符,下面就连续按顺序接收数据。同步传送个数如下图 因为同步通信数据块传送时去掉了字符的开始和结束的标志,所以其速度高于异步传送,但这种方式对硬件结构要求较高。 在单片机主要是采用异步通讯方式,我们也采用这种通讯方式。 串行通信制式的确定 在串行通讯中,数据是在两机之间传送的。按照数据传送方向,串行通信可分为半双工( half duplex)制式和全双工( dull duplex)制式。 所以我们的设计采取全双工的制式 为了使仿真效果,一目了然我们设计时用 LED 灯接收信号,用它的亮灭代表信号的传递效果。 5 三、 电路设计 3.1 电路原理图 图 1 两单片机间数据通信原理图 3.2 硬件系统的简介 1. 主 CPU 为 8751-AP1 接指拨开关, P2 接指拨开关。 2. 副 CPU8751 B片接 8 个 LED. 3. 副 CPU8751 C片接 8 个 LED. 4. 当主 CPU8751 A,P1 的指拨开关切换时,此数据会发送给副 CPU8951-B 并控制其 P2 口 8 个 LED 的亮灭。同理,当主 CPU 8951-A, P1 的指拨开关切换时,此数据会发送给 5. 副 CPU8751 C 并控制其 P2 口 8 个 LED 的亮灭。 当副 CPU8951-B, P1 的指拨开关切换时,此数据会发送给主 CPU8751 A并控制其 P0 口低四位的四个 LED 的亮灭。同理,当副 CPU8951-C, P1 的指拨开关切换时 ,则此数据会发送给主 CPU8951-A,并控制其 P0 口高四位的四个 LED 亮灭。 6 3.3 AT89C51 单片机简介 图 2 单片机内部结构图 ( 1) 一个 8 位的 CPU ( 2) 一个片内振荡器及时钟电路 ( 3) 4KB 的 FLAShROM ( 4) 128 的内 部 RAM ( 5) 可扩展 64KB 外部 ROM 和外部 RAM 的控制电路; ( 6) 2 个 16 位的定时 /计数器 ( 7) 26 个特殊功能寄存器 ( 8) 4 个 8 位的并行口 ( 9) 一个全双工的串行口 ( 10) 5 个中断源, 2 个外部中断, 3 内部中断 ( 11) 内部硬件看门狗电路 ( 12) 一个 SPI 串行接口,用于芯片的在系统编程 3.4 晶振电路的设计 设 计原理 8051 片内有一由高增益反相放大器构成的振荡器。反相放大器的输入端为 xTALl,输出端为 xTAL2,两端踌接石英晶体及两个电容形成稳定的自激振荡器。电容通常取 30PF左右。 具体电路设计 这部分在两个方案中是相同的,电路图如下 图 3 晶振电路原理图 振荡器及 定时电路 CPU 4K 字节 ROM 128 字节 RAM SFR26 8 位并行口 串行口 2 个 16 位定时器 /计数器 7 四软件设计 4.1 软件流程图 中断 N N 非法命令 01 00 N N Y N N Y Y 图 4 多机通讯 从机中断服务程序 框图 地址符合否 发回地址 接受下一帧 是命令帧吗 命 令分类 从接受准备就绪否 从接受准备就绪否 RRDY1 送主机 TRDY1 送主机 发送数据帧 接受数据帧 RRDY0 送主机 TRDY0 送主机 接收完否 发送完否 SM21 恢复现场 返回 8 N Y Y N N Y N Y 01 N Y Y 应答地址相符否 命令从机复位 子程序入口 串行口初始化 发送地址帧 从机应答否 发送命令帧 从机应答复否 命令正确否 命令分类 从机接收 准备就绪否 发送数据块 从机发送 准备就绪否 接受数据块 返回 9 4.2 程序的设计 RI 或 TI串行中断请求。当接收 或发送完一串行帧数据时,使内部串行口中断请求标志 RI 或 TI1,并请求中断。当某中断源的中断申请被 CPU 响应后,CPU 将把此中断源的入口地址装入 PC,中断服务程序即从此地址开始执行。中断源串行口中断 入口地址 0023H。 TMOD 为 T0,T1 的工作方式寄存器,当为工作方式 2,功能为自动再装入 8 位计数器 51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON 寄存器。 主机程序 A ORG 00H JMP START ; UART 中断起始地址 ORG 23H JMP UARTI START MOV TMOD,00100000B ; TIMER1 工作在 MODE2 ANL PCON,01111111B ; SMOD0 MOV TH1,0F3H ;波特率为 2400 SETB TR1 ;启动 TIMER1 MOV SCON,11010000B ; UART 工作 MODE3 MOV IE,10010000B ; UART 中断使能 SETB SM2 ; SM21 MOV 30H,0FFH ; P1 指拨开关的初值 MOV 31H,OFFH MOV 32H,0FFH LOOP MOV A,P1 ;读入 P1 指拨开关值 CJNE A,30H,UART1 ;判断有否变化 JMP LOOP1 LOOP1 MOV A,P2 ;读入 P2 指拨开关值 CJNE A,31H,UART2 ;判断有否变化 JMP LOOP UART1 MOV 30H,A ; P1 指拨开关存入新值 SETB TB8 ;设 TB81 MOV SBUF,01H ;发送 8951 b 的地址 WAIT1 JBC TI,L1 ;发送完毕否 JMP WAIT1 L1 CLR TB8 ;清楚 TB80 MOV SBUF,30H ;把 P1 指拨开关值发送给 8951 b WAIT2 JBC TI,LOOP ;发送完毕否 JMP WAIT2 UART2 MOV 31H,A SETB TB8 MOV SBUF,02H WAIT3 JBC TI,L3 10 JMP WAIT3 L3 CLR TB8 MOV SBUF,31H WAIT4 JBC TI,LOOP JMP WAIT4 UARTI PUSH ACC ;压入堆栈 PUSH PSW JBC RI,L5 ;是否接受中断 RI1 JMP RETURN L5 JB SM2,6 ; SM21 接收地址, SM20 接收数据 MOV A,SBUF ; 接收数据载入累加器 MOV 33H,A ;暂存入( 33H) RAM MOV A,32H ; 判断接收 8951-B 或 8951-C 的数据 CJNE A,01H,L8 ; 接到收 8951-B 的数据 MOV A,33H ;是则输出至 P0 显示(低 4 位) MOV P0,A SETB SM2 ;设 SM21,准备接收下一个地址 MOV 32H,0FFH ;清楚地址( 32H) RAM JMP RETURN L8 CJNE A,02H,RETURN MOV A,33H SWAP A MOV P0,A SETB SM2 MOV 32H,0FFH JMP RETURN L6 MOV A,SBUF ; 载入接收到的地址 CJNE A,01H,L7 ;是 8951-B 的地址 MOV 32H,A ;是则此将 8951 B 的地址存入( 32H) RAM CLR SM2 ;设 SM20,准备接收数据 JMP RETURN L7 CJNE A,02H,RETURN MOV 32H,A CLR SM2 RETURN POP PSW ;取回 PSW POP ACC RETI END 从机程序 B ORG 00H JMP START ORG 23H ; UART 中断起始地址 JMP UARTI START MOV TMOD,00100000B ; TIMER1 工作在 MODE2 ANL PCON,01111111B ; SMOD0 MOV TH1,0F3H ;波特率为 2400 11 SETB TR1 ;启动 TIMER1 MOV SCON,11010000B MOV IE,10010000B SETB SM2 MOV 30H,0FFH LOOP MOV A,P1 CJNE A,30H,UART1 JMP LOOP UART1 ORL A,0F0H ;有变化取低 4 位 MOV 30H,A ;存入 P1 指拨开关的新值 SETB TB8 ;设 TB81 MOV SBUF,01 ; 发送本身地址( 01H)给 8951 A WAIT1 JBC TI,L1 ;发送完毕否 JMP WAIT1 L1 CLR TB8 ; 是则清楚 TB80 MOV SBUF,30H ; 将指拨开关的值发送给 8951 A WAIT2 JBC TI,LOOP ; 发送完毕否 JMP WAIT2 UARTI PUSH ACC ;压入堆栈 PUSH PSW JBC RI,L5 ;是否为接收中断 JMP RETURN L5 JB SM2,L6 MOV A,SBUF MOV P2,A SETB SM2 JMP RETURN L6 MOV A,SBUF CJNE A,01H,RETURN CLR SM2 RETURN POP PSW POP ACC RETI END 从机程序 C ORG 00H JMP START ORG 23H JMP UARTI START MOV TMOD,00100000B ANL PCON,01111111B MOV TH1,0F3H SETB TR1 MOV SCON,11010000B MOV IE,10010000B SETB SM2 12 MOV 30H,0FFH LOOP MOV A,P1 CJNE A,30H,UART1 JMP LOOP UART1 ORL A,0FH SWAP A MOV 30H,A SETB TB8 MOV SBUF,02 WAIT1 JBC TI,L1 JMP WAIT1 L1 CLR TB8 MOV SBUF,30H WAIT2 JBC TI,LOOP JMP WAIT2 UARTI PUSH ACC PUSH PSW JBC RI,L5 JMP RETURN L5 JB SM2,L6 ; SM21 接收地址, SM20 接收数据 MOV A,SBUF ; SM0,则接收数据并输出至 P2 MOV P2,A SETB SM2 ;设 SM21,准备接收下一个地址 JMP RETURN L6 MOV A,SBUF ; SM21,载入地址 CJNE A,02H,RETURN ;是否( 02H)地址 CLR SM2 ;是则清除 SM20,准备接收数据 RETURN POP PSW POP ACC RETI END 13 五仿真与调试 单击 仿真运行开始按钮 ,我们能清楚地观察到每一个引脚的电频变化,红色代表高电频,蓝色代表低电频。如图 6.14 所示。 图 5 完整 电路图 点击 DSW1 开关使它指向 ON, U3 的灯将熄灭,如图 6 所示 图 6 运行结果 14 点击 DSW1 开关使它指向 ON, U6 的灯将熄灭,如图 7 所示 图 7 运行结果 点击 DSW4 开关使它指向 ON,灯 A0,A1,A2,A3 将亮起来如图 8 所示 图 8 运行结果 15 点击 DSW3 开关使它指向 ON,灯 A4,A5,A6,A7 将亮起来,如图 9 所示 图 9 运行结果 经测试,该系统性能优越。 16 六 .结论与心得 1、通过这次课程设计,加强了我们动手、思考和解决问题的能力。 2、我沉得做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件 的功能,而且考试内容有限,所以在这次课程设计过程中,对知识使用有了更多的认识。 认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。所以这个课程设计对我们以后找工作的作用是非常大的。 3、两个星期的课程设计,过程曲折可谓一语难尽。在此期间我们也失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。 生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过做课程设计,我才真正领略到“艰苦奋斗”这一词的真正含义。我想说,设计确实 有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的合作,我感觉我和同学们之间的距离更加近了;我想说,确实很累,但当我们看到自己所做的成果时,心中也不免产生兴奋; 正所谓“三百六十行,行行出状元”。我们同样可以为社会作出我们应该做的一切,这有什么不好我们不断的反问自己。也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无 论干什么,只要人生活的有意义就可。社会需要我们,我们也可以为社会而工作。既然如此,那还有什么必要失落呢于是我们决定沿着自己的路,执着的走下去。 同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。做课程设计只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。 对我们而言,知识上的收获重要 ,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这必将成为我人生旅途上一个非常美好的回忆 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 这次课程设计终于顺利完成了,在 设计中遇到了很多问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我们学也到很多实用的知识,在次我们表示感谢同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢 4、此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。 5、在此,衷心的感谢老师的细心指导。 17 七 .参考文献 1 刘焕平 主编。单片机原理及应用 。 北京邮电大学出版社 .2008 2 张瑞玲 主编。 单片机原理与应用 .西北工大 出版社。 2009 3 李荣正 主编。 PIC 单片机原理及应用 。 北京航大 出版社。 2009 4 曹立军 主编。 单片机原理与应用 。 西安电科大 出版社。 2009 5 杨学昭 主编。 单片机原理接口技术及应用 。 西安电科大 出版社。 2009

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值