




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
石家庄铁道大学四方学院石家庄铁道大学四方学院 集中实践报告书集中实践报告书 课题名称课题名称双机串行通信设计双机串行通信设计 姓姓 名名邢志杰邢志杰 学学 号号20127019 系、系、 部部电气工程系电气工程系 专业班级专业班级方方 1210-4 指导教师指导教师马丽马丽 2015 年年 7 月月 3 日日 20122012 级级 单片机接口课程设计单片机接口课程设计 一、设计任务及要求:一、设计任务及要求: 设计任务:设计任务: 双机串行通信设计 设计要求:设计要求: 1、两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设 定,可选的波特率为 1200、2400、4800 和 9600bit/s。串行口工作方式为方式 1 的 全双工串行通信。 2、两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器 T1 计数 初值 TH1、TL1 进行设定。故本题目本质上是通过键盘扫描得到设定的波特率,从 而载入相应的 T1 计数初值 TH1、TL1 实现的。 3、要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数码管 上。 4、要求做出实物。 二、指导教师评语:二、指导教师评语: 三、成绩三、成绩 指导教师签名: 年 月 日 目 录 第 1 章 设计目的1 第 2 章 设计要求1 第 3 章 硬件电路设计1 3.1 系统框图1 3.2 STC89C52 单片机最小系统2 3.3 按键电路3 3.4 主电路设计4 第 4 章 软件程序设计4 4.1 主程序流程图4 4.2 键盘扫描子程序流程图5 4.3 从机主程序流程图6 4.4 从机中断子程序流程图7 4.5 程序调试8 4.6 双机串行通信源程序9 第 5 章 结论13 参考文献13 第 1 章 设计目的 1.1 设计目的 (1)掌握单片机实际系统的开发步骤。 (2)了解串行通信的原理;了解数码管显示的工作原理;了解键盘扫描的 工作原理;对双机串行通信软件编程、调试、相关硬件设备的使用技能等方面 得到真正的实践机会,把软硬件结合,克服其中的种种问题,提高编程能力。 第 2 章 设计要求 2.1 设计要求 (1)两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进 行设定,可选的波特率为 1200、2400、4800 和 9600bit/s。串行口工作方式为方 式 1 的全双工串行通信。 (2)两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器 T1 计数初值 TH1、TL1 进行设定。故本题目本质上是通过键盘扫描得到设定的 波特率,从而载入相应的 T1 计数初值 TH1、TL1 实现的。 (3)要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数 码管上。 (4)要求做出实物。 第 3 章 硬件电路设计 3.1 系统框图 按键电路 单片机 1 AT89C5 2 单片机 2 AT89C5 2 显示电路 图 3-1 系统框图 3.2 STC89C52 单片机最小系统 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 端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要 求外接上拉电阻。 P1 端口(P1.0P1.7,18 引脚):P1 口是一个带内部上拉电阻的 8 位双向 I/O 口。P1 的输出缓冲器可驱动(吸收或者输出电流方式)4 个 TTL 输入。对 端口写入 1 时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。 P1 口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一 个电流。P1 口特点是输出锁存器,输出时没有条件。输入缓冲,输入时有条件, 即需要先将该口设为输入状态,先输出 1。 此外,P1.0 和 P1.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 引脚):复位输入。当输入连续两个机器周期以上高电平时为有效, 用来完成单片机单片机的复位初始化操作。 ALE(30 引脚):地址锁存控制信号(ALE)是访问外部程序存储器时, 锁存低 8 位地址的输出脉冲。 XTAL1(19 引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18 引脚):振荡器反相放大器的输入端。STC89C52 引脚图如图 3-2 所示。 3.3 按键电路 图 3-3 按键电路图 本设计按键采用矩阵键盘,键盘连接主机的 P2 口,主机从矩阵键盘接收信 息,通过串行输出口输出到从机,从机从串行输入口接收信息并把信息显示在 数码管上。 3.4 主电路设计 a a b b c c d d e e f f g g h h 0 0 1 1 2 2 3 3 5 5 6 6 a b c d e f g 4 4 7 7 P3P3 P3 P3 h P10 P11 P12 P13 4 5 6 7 3 2 1 0 P10 P11 P12 P13 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U4 74HC573 S3S0 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0/T2 1 P1.1/T2EX 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U1 AT89C52 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32 P1.0/T2 1 P1.1/T2EX 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WR 16 P3.5/T1 15 P2.7/A15 28 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 U2 AT89C52 D0 2 D1 3 D2 4 D3 5 D4 6 D5 7 D6 8 D7 9 Q0 19 Q1 18 Q2 17 Q3 16 Q4 15 Q5 14 Q6 13 Q7 12 LE 11 OE 1 U3 74HC573 C1 33pF C2 33pF X1 CRYSTAL R1 10k C4 33pF C5 33pF X2 CRYSTAL R2 10k C6 10uF R3 10k C3 10uF 图 3-4 主电路图 第 4 章 软件程序设计 设计思路为:主机通过键盘扫描程序确认是否有键按下,若有键按下则将 按键号对应的显示代码发送给从机,并判断是否是波特率按键,若是则进行波 特率调整,若无键按下,则继续进行键盘扫描。从机主程序动态显示缓冲区内 的数据。中断子程序接收数据并判断是否是波特率按键所对应的显示代码,若 是则进行波特率调整,然后将数据保存到缓冲区。初始波特率都为 9600。 4.1 主程序流程图 键盘连接到甲机的 P2 口,通过按键扫描确定键值,从机与主机通过串行输 入口 P3.0 和串行输出口 P3.1 相连接,实现两机之间的串行通信。 开始 设置串行口工 作方式及波特 率 检测按键 确定按键号 并发送 波特率按键 调整波特率 Y Y N N 图4-1 主机主程序流程图 4.2 键盘扫描子程序流程图 矩阵式键盘扫描的方法常用的有两种,一种是逐列送0,依次读回行;另一 种为反转法。本程序采用前者,程序流程图如下: 开始 P2 口列置 0,行 置 1 读回 P2 口 得键号 行值是否变化 调整行,列值 结束 Y N 图4-2 键盘扫描子程序流程图 4.3 从机主程序流程图 从机主程序动态显示缓冲区的4个数据。从机的 P1口经锁存器74HC573连 接数码管位码,P2口经锁存器74HC573连接数码管的段码。从机与主机通过串 行输入口 P3.0和串行输出口 P3.1相连接,利用中断来接收主机发来的数据,并 根据接收的数据来判断是否需要进行波特率调整。从机主程序流程图如下: 开始 初始化 送段码,送位码 显示完? 调整指针 Y N 图 4-3 从机主程序流程图 4.4 从机中断子程序流程图 开始 清接收标志位 RI 保存到缓冲区 波特率按键? 调整波特率 中断返回 N Y 图 4-3 从机中断子程序流程图 4.5 程序调试 图 4-5 程序调试 4.6 双机串行通信源程序 /* 程序调试软件:Keil uVision4 程序仿真软件: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 #define uint 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;x0;x-) for(y=110;y0;y-); /*按键扫描子函数*/ void keyscan() P2=0 xf0; temp=P2; temp if(temp!=0 xf0) delay(5); /延时消抖 P2=0 xf0; /二次读回 temp=P2; temp if(temp!=0 xf0) log=1; /有按键 P2=0 xfe; temp=P2; if(temp!=0 xfe) switch(temp) case 0 xee: num=0;bot=1;break;/bot=1表示是波特率按键 case 0 xde: num=4;break; case 0 xbe: num=8;break; case 0 x7e: num=12;break; P2=0 xfd; temp=P2; if(temp!=0 xfd) switch(temp) case 0 xed: num=1;bot=1;break; /bot=1表示是波特率按键 case 0 xdd: num=5;break; case 0 xbd: num=9;break; case 0 x7d: num=13;break; P2=0 xfb; temp=P2; if(temp!=0 xfb) switch(temp) case 0 xeb: num=2;bot=1;break;/bot=1表示是波特率按键 case 0 xdb: num=6;break; case 0 xbb: num=10;break; case 0 x7b: num=14;break; P2=0 xf7; temp=P2; if(temp!=0 xf7) switch(temp) case 0 xe7: num=3;bot=1;break; /bot=1表示是波特率按键 case 0 xd7: num=7;break; case 0 xb7: num=11;break; case 0 x77: num=15;break; /等待按键松开 P2=0 xf0; temp=P2; temp while(temp!=0 xf0) temp=P2; temp /*主函数*/ void main() TMOD=0 x20; /设置定时器 1 为工作方式 2 TH1=0 xfd; /装初值设置波特率 TL1=0 xfd; TR1=1; /打开定时器 1 SCON=0 x40; /8位异步 while(1) keyscan(); if(log=1) /有键按下发送键号 SBUF=num; /发送按键号 while(!TI); TI=0; /清发送标志位 log=0; /清按键标志位 if(bot=1) /是波特率按键进行波特率调整 switch(num) case 0:TH1=TL1=0 xe8;break; case 1:TH1=TL1=0 xf4;break; case 2:TH1=TL1=0 xfa;break; case 3:TH1=TL1=0 xfd;break; bot=0; /清波特率标志位 双机串行通信从机程序源代码: /* 程序名称:双机串行通信波特率可调从机C语言程序 从机功能:主函数显示缓冲区数据。中断子函数接收主机发送的显示代码,同 时判断是否是波特率按键代码,若是则进行调整。 简要说明:P1口接4个数码管位选端,P2口接段选端,数码管采用共阴极接法。 编 写:邢志杰 时 间:2015年07月02日 最后修改:2015年07月03日 */ #include #define uint unsigned int #define uchar unsigned char int i=1; uchar val=3,16,16,16,va; uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f, 0 x6f,0 x77,0 x7c,0 x39, 0 x5e,0 x79,0 x71,0;/0F共阴极数码管显示段码,0为全部熄灭 段码 void delay(uint x) /延时 uchar t; while(x-) for(t=0;t110;t+); void ser() interrupt 4 /无返回值,函数名ser,关键字,中断号4 RI=0; va=SBUF; vali=va; switch(va) /判断是否需进行波特率调整 case 0:TH1=TL1=0 xe8; val0=va; val1=val2=val3=16; i=3; break; case 1:TH1=TL1=0 xf4; val0=va; val1=val2=val3=16; i=3; break; case 2:TH1=TL1=0 xfa; val0=va; val1=val2=val3=16; i=3; break; case 3:TH1=TL1=0 xfd; val0=va; val1=val2=val3=16; i=3; break; default:break; i+; if(i=4) i=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 导游专业知识试题及答案
- 安全经济学考试题及答案
- 有关落叶的作文:又是落叶时(4篇)
- 安徽在线考试题库及答案
- 【完整版】2025年上半年小学资笔试真题+参考答案
- 安徽单招模考试卷及答案
- 2025年高空吊环考试题及答案
- 基层医疗技能竞赛试题及答案
- 房屋租赁示范合同一2篇
- 2025年婴幼儿配方食品营养配方优化与婴幼儿食品行业品牌建设策略
- 2025至2030 中国热成型钢(PHS)行业现状调查与前景策略研究报告
- 时政评析活动方案
- 认识机械教学课件
- 北森心理性格测试题库及答案
- 九年级语文个别差异教学计划
- 轮胎硫化培训课件
- 中国名菜鉴赏课件
- 某局关于2025年度国家安全工作情况及2025年度风险评估的报告
- 建设监理实务教案
- 2025年全国卷一高考数学试题及答案
- 2025-2030中国四轮驱动车行业市场发展趋势与前景展望战略研究报告
评论
0/150
提交评论