单片机双击串行通信C语言设计报告(含代码)_第1页
单片机双击串行通信C语言设计报告(含代码)_第2页
单片机双击串行通信C语言设计报告(含代码)_第3页
单片机双击串行通信C语言设计报告(含代码)_第4页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、下载可编辑 2012级单片机接口课程设计 石家庄铁道大学四方学院集中实践报告书课题名称双机串行通信设计姓名邢志杰学号20127019系、部电气工程系专业班级方 1210-4指导教师马丽2015年7月3日.专业 .整理 .下载可编辑一、设计任务及要求 :设计任务 :双机串行通信设计设计要求 :1 、两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为 1200 、2400 、 4800 和 9600bit/s 。串行口工作方式为方式1 的全双工串行通信 。2、两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器T1 计数初值 TH1、TL1 进行设定 。故本题

2、目本质上是通过键盘扫描得到设定的波特率,从而载入相应的 T1 计数初值 TH1、TL1 实现的 。3 、要求发送方读入按键值,发送到接收方 ,接收方接受数据并显示在数码管上。4、要求做出实物 。二、指导教师评语 :.专业 .整理 .下载可编辑三、成绩指导教师签名:年月日目录第 1 章 设计目的 ·························&#

3、183;····················错误!未定义书签。第 2 章 设计要求 ··························

4、····················错误!未定义书签。第 3 章 硬件电路设计 ··························&#

5、183;·················错误!未定义书签。3.1 系统框图 ·····························&#

6、183;················13.2 STC89C52 单片机最小系统······························

7、;·······23.3 按键电路 ·········································&

8、#183;····33.4 主电路设计···········································

9、83;错误!未定义书签。第 4 章 软件程序设计 ············································4 4.1 主程序流程

10、图 ···········································4.专业 .整理 .下载可编辑4.2 键盘扫描子程序流程图··

11、;·····································54.3 从机主程序流程图··········

12、3;······························64.4 从机中断子程序流程图·················&

13、#183;·····················74.5 程序调试 ··························

14、83;···················84.6 双机串行通信源程序····························&

15、#183;···········9第 5 章 结论 ····································

16、83;···········13参考文献 ·····································&#

17、183;············13.专业 .整理 .下载可编辑第1章设计目的1.1 设计目的(1)掌握单片机实际系统的开发步骤。(2)了解串行通信的原理 ;了解数码管显示的工作原理 ;了解键盘扫描的工作原理 ;对双机串行通信软件编程 、调试、相关硬件设备的使用技能等方面得到真正的实践机会 ,把软硬件结合 ,克服其中的种种问题 ,提高编程能力 。第2章设计要求2.1 设计要求(1)两片单片机利用串行口进行串行通信 :串行通信的波特率可从键盘进行设定,可选的波特率为 1200

18、、2400 、4800 和 9600bit/s 。串行口工作方式为方式 1 的全双工串行通信 。(2 )两个单片机之间进行通讯波特率的设定 ,最终归结到对定时计数器 T1 计数初值 TH1、 TL1 进行设定 。 故本题目本质上是通过键盘扫描得到设定的波特率,从而载入相应的 T1 计数初值 TH1、TL1 实现的 。(3)要求发送方读入按键值 ,发送到接收方 ,接收方接受数据并显示在数码管上。(4)要求做出实物 。第 3 章 硬件电路设计3.1系统框图.专业 .整理 .下载可编辑单片机 1单片机 2按键电路显示电路AT89C52AT89C52图 3-1系统框图3.2STC89C52 单片机最小

19、系统89C52 共有四个八位的并行双向口 ,即有 32 根输入输出口线 。各口的每一位均由锁存器 、输出驱动器和输入缓冲器组成 。VCC( 40 引脚):电源电压VSS(20 引脚):接地图 3-2 STC89C52 引脚图P0 端口( P0.0P0.7, 3932 引脚): P0 口是一个漏极开路的 8 位双向 I/O 口 。作为输出端口 ,每个引脚能驱动 8 个 TTL 负载,对端口 P0 写入 “1时”,可以作为高阻抗输入 。在访问外部程序和数据存储器时 ,P0 口也可以提供低 8 位地址和 8 位数据的复用总线 。此时 ,P0 口内部上拉电阻有效 。在 Flash ROM 编程时,P0

20、 端口接收指令字节 ;而在校验程序时 ,则输出指令字节 。验证时 ,要求外接上拉电阻 。.专业 .整理 .下载可编辑P1 端口( P1.0P1.7 ,18 引脚): P1 口是一个带内部上拉电阻的8 位双向 I/O 口 。P1 的输出缓冲器可驱动 (吸收或者输出电流方式 )4 个 TTL 输入 。对端口写入 1 时,通过内部的上拉电阻把端口拉到高电位 ,这是可用作输入口 。P1 口作输入口使用时 ,因为有内部上拉电阻 ,那些被外部拉低的引脚会输出一个电流 。P1 口特点是输出锁存器 ,输出时没有条件 。输入缓冲 ,输入时有条件,即需要先将该口设为输入状态 ,先输出 1。此外,P1.0 和 P1

21、.1 还可以作为定时器/计数器 2 的外部技术输入( P1.0/T2)和定时器 / 计数器 2 的触发输入 (P1.1/T2EX)。P3 口为准双向口 。可以字节访问 ,也可以位访问 。P3.0-RXD, 串行输入口 。P3.1-TXD, 串行输出口 。P3.2-INT0 ,外部中断 0 的请求 。P3.3-INT1 ,外部中断 1 的请求 。P3.4-T0 ,定时器 / 计数器 0 外部计数脉冲 。P3.5-T1 ,定时器 / 计数器 ,1 外部计数脉冲 。P3.6-WR, 外部数据存储器写选通 。P3.7-RD, 外部数据存储器读选通 。RST( 9 引脚):复位输入 。当输入连续两个机器

22、周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作 。ALE(30 引脚):地址锁存控制信号 (ALE)是访问外部程序存储器时 ,锁存低 8 位地址的输出脉冲 。XTAL1(19 引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2( 18 引脚):振荡器反相放大器的输入端 。 STC89C52 引脚图如图 3-2 所示 。3.3按键电路.专业 .整理 .下载可编辑图 3-3 按键电路图本设计按键采用矩阵键盘 ,键盘连接主机的 P2 口,主机从矩阵键盘接收信息,通过串行输出口输出到从机 ,从机从串行输入口接收信息并把信息显示在数码管上 。3.4主电路设计C1033pFX11

23、9U1391XTAL1P0.0/AD0C2CRYSTALP0.1/AD13823718P0.2/AD236XTAL2P0.3/AD3335S3S0P0.4/AD433pF34P0.5/AD5C333P0.6/AD64932RSTP0.7/AD710uFP2.0/A82100R3R12211P2.1/A9523210k10kP2.2/A10229PSENP2.3/A11243330254ALEP2.4/A12431265EAP2.5/A1356276P2.6/A146287P2.7/A1571P1.0/T2P3.0/RXD107211P3P3P1.1/T2EXP3.1/TXD312P1.2P3.

24、2/INT0413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WR817P1.7P3.7/RDAT89C52C433pFX219U239XTAL1P0.0/AD0C5CRYSTALP0.1/AD138P0.2/AD23718XTAL2P0.3/AD33635P0.4/AD433pF34C6P0.5/AD533U49P0.6/AD632RSTP0.7/AD7a219aD0Q010uF21b318P2.0/A8abD1Q1R222c417P2.1/A9bcD2Q210kP2.2/A1023cdd5D3Q3162924e615PSENP2

25、.3/A11deD4Q43025f 714ALEP2.4/A12efD5Q53126g813EAP2.5/A13fgD6Q627h912P2.6/A14ghD7Q7P2.7/A1528h11LEP10110P3P31P1.0/T2P3.0/RXDOEP11211P1.1/T2EXP3.1/TXDP1231274HC573P1.2P3.2/INT0P13413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1U3716P1.6P3.6/WR817P10219P1.7P3.7/RDD0Q0P11318D1Q1AT89C52P12417D2Q2P13516D3Q361

26、5D4Q4714D5Q5813D6Q6912D7Q711LE1OE74HC573图 3-4主电路图.专业 .整理 .下载可编辑第 4 章 软件程序设计设计思路为 :主机通过键盘扫描程序确认是否有键按下 ,若有键按下则将按键号对应的显示代码发送给从机 ,并判断是否是波特率按键 ,若是则进行波特率调整 ,若无键按下 ,则继续进行键盘扫描 。 从机主程序动态显示缓冲区内的数据 。 中断子程序接收数据并判断是否是波特率按键所对应的显示代码,若是则进行波特率调整 ,然后将数据保存到缓冲区。初始波特率都为9600 。4.1主程序流程图键盘连接到甲机的 P2 口,通过按键扫描确定键值 ,从机与主机通过串行输

27、入口 P3.0 和串行输出口 P3.1 相连接,实现两机之间的串行通信 。开始设置串行口工作方式及波特N检测按键Y确定按键号并发送N波特率按键Y调整波特率图 4-1主机主程序流程图.专业 .整理 .下载可编辑4.2键盘扫描子程序流程图矩阵式键盘扫描的方法常用的有两种 ,一种是逐列送 0,依次读回行 ;另一种为反转法 。本程序采用前者 ,程序流程图如下 :开始P2 口列置 0,行置 1读回 P2口行值是否变化N调整行,列值Y得键号结束图4-2键盘扫描子程序流程图4.3从机主程序流程图从机主程序动态显示缓冲区的4个数据 。 从机的 P1口经锁存器 74HC573 连接数码管位码 , P2口经锁存器

28、 74HC573 连接数码管的段码 。 从机与主机通过串行输入口 P3.0和串行输出口P3.1相连接,利用中断来接收主机发来的数据,并根据接收的数据来判断是否需要进行波特率调整。从机主程序流程图如下 :.专业 .整理 .下载可编辑开始初始化送段码,送位码显示完?N调整指针Y图 4-3从机主程序流程图4.4从机中断子程序流程图.专业 .整理 .下载可编辑开始清接收标志位RI保存到缓冲区波特率按键?Y调整波特率N中断返回图 4-3 从机中断子程序流程图4.5 程序调试.专业 .整理 .下载可编辑图 4-5程序调试4.6 双机串行通信源程序/*程序调试软件 : Keil uVision4程序仿真软件

29、 : ISIS即 Proteus-7.8sp2/*双机串行通信主机程序源代码:/*程序名称 :双机串行通信波特率可调主机程序(C语言)主机功能 :通过键盘扫描得到键号并发送,同时判断是否是波特率按键,若是则调整波特率 。简要说明 :主机 P2口接 4*4 矩阵式键盘 ,高 4位行,低 4位列 。其中 04 号按键分别代表 4种不同波特率 (1200 、 2400、 4800 、9600 )。初始波特率 9600 。编写:邢志杰 (QQ824997141)时间:2015年07月02日最后修改 :2015 年07月 03日*/#include <AT89x52.h>#define ui

30、nt unsigned int#define uchar unsigned char.专业 .整理 .下载可编辑int log=0,bot=0;/log,bot分别是按键标志位和波特率调整标志位uchar temp, num;void delay(uint z)/ 延时函数uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/* 按键扫描子函数 */void keyscan()P2=0xf0;temp=P2;temp&=0xf0;if(temp!=0xf0)delay(5);/ 延时消抖P2=0xf0;/ 二次读回temp=P2;temp&a

31、mp;=0xf0;if(temp!=0xf0).专业 .整理 .下载可编辑log=1;/ 有按键P2=0xfe;temp=P2;if(temp!=0xfe)switch(temp)case 0xee: num=0;bot=1;break;/bot=1表示是波特率按键case 0xde: num=4;break;case 0xbe: num=8;break;case 0x7e: num=12;break;P2=0xfd;temp=P2;if(temp!=0xfd)switch(temp)case 0xed: num=1;bot=1;break;/bot=1表示是波特率按键case 0xdd: n

32、um=5;break;case 0xbd: num=9;break;case 0x7d: num=13;break;P2=0xfb;.专业 .整理 .下载可编辑temp=P2;if(temp!=0xfb)switch(temp)case 0xeb: num=2;bot=1;break;/bot=1表示是波特率按键case 0xdb: num=6;break;case 0xbb: num=10;break;case 0x7b: num=14;break;P2=0xf7;temp=P2;if(temp!=0xf7)switch(temp)case 0xe7: num=3;bot=1;break;/

33、bot=1表示是波特率按键case 0xd7: num=7;break;case 0xb7: num=11;break;case 0x77: num=15;break;/ 等待按键松开P2=0xf0;temp=P2;.专业 .整理 .下载可编辑temp&=0xf0;while(temp!=0xf0)temp=P2;temp&=0xf0;/* 主函数 */void main()TMOD=0x20;/ 设置定时器 1 为工作方式 2TH1=0xfd;/ 装初值设置波特率TL1=0xfd;TR1=1;/ 打开定时器 1SCON=0x40;/8 位异步while(1)keyscan()

34、;if(log=1)/ 有键按下发送键号.专业 .整理 .下载可编辑SBUF=num;/ 发送按键号while(!TI);TI=0;log=0;/ 清发送标志位/ 清按键标志位if(bot=1)/ 是波特率按键进行波特率调整switch(num)case 0:TH1=TL1=0xe8;break;case 1:TH1=TL1=0xf4;break;case 2:TH1=TL1=0xfa;break;case 3:TH1=TL1=0xfd;break;bot=0;/ 清波特率标志位双机串行通信从机程序源代码:/*程序名称 :双机串行通信波特率可调从机C语言程序从机功能 :主函数显示缓冲区数据 。

35、中断子函数接收主机发送的显示代码,同.专业 .整理 .下载可编辑时判断是否是波特率按键代码,若是则进行调整 。简要说明 :P1口接 4个数码管位选端 ,P2口接段选端 ,数码管采用共阴极接法。编写:邢志杰时间:2015年07月02日最后修改 :2015 年07月 03日*/#include <AT89x52.h>#define uint unsigned int#define uchar unsigned charint i=1;uchar val=3,16,16,16,va;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0; /0F 共阴极数码管显示段码,0为全部熄灭段码void delay(uint x)/ 延时uchar t;while(x-)for(t=0;t<110;t+)

温馨提示

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

评论

0/150

提交评论