单片机双击串行通信C语言设计报告(含代码).doc_第1页
单片机双击串行通信C语言设计报告(含代码).doc_第2页
单片机双击串行通信C语言设计报告(含代码).doc_第3页
单片机双击串行通信C语言设计报告(含代码).doc_第4页
单片机双击串行通信C语言设计报告(含代码).doc_第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 设计目的 1 掌握单片机实际系统的开发步骤 2 了解串行通信的原理 了解数码管显示的工作原理 了解键盘扫描的 工作原理 对双机串行通信软件编程 调试 相关硬件设备的使用技能等方面 得到真正的实践机会 把软硬件结合 克服其中的种种问题 提高编程能力 第 2 章 设计要求 2 1 设计要求 1 两片单片机利用串行口进行串行通信 串行通信的波特率可从键盘进 行设定 可选的波特率为 1200 2400 4800 和 9600bit s 串行口工作方式为方 式 1 的全双工串行通信 2 两个单片机之间进行通讯波特率的设定 最终归结到对定时计数器 T1 计数初值 TH1 TL1 进行设定 故本题目本质上是通过键盘扫描得到设定的 波特率 从而载入相应的 T1 计数初值 TH1 TL1 实现的 3 要求发送方读入按键值 发送到接收方 接收方接受数据并显示在数 码管上 4 要求做出实物 第 3 章 硬件电路设计 3 1 系统框图 2 按键电路 单片机 1 AT89C5 2 单片机 2 AT89C5 2 显示电路 图 3 1 系统框图 3 2 STC89C52 单片机最小系统 89C52 共有四个八位的并行双向口 即有 32 根输入输出口线 各口的每一 位均由锁存器 输出驱动器和输入缓冲器组成 VCC 40 引脚 电源电压 VSS 20 引脚 接地 图 3 2 STC89C52 引脚图 P0 端口 P0 0 P0 7 39 32 引脚 P0 口是一个漏极开路的 8 位双向 I O 口 作为输出端口 每个引脚能驱动 8 个 TTL 负载 对端口 P0 写入 1 时 可 以作为高阻抗输入 在访问外部程序和数据存储器时 P0 口也可以提供低 8 位 地址和 8 位数据的复用总线 此时 P0 口内部上拉电阻有效 在 Flash ROM 编 程时 P0 端口接收指令字节 而在校验程序时 则输出指令字节 验证时 要 求外接上拉电阻 3 P1 端口 P1 0 P1 7 1 8 引脚 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 按键电路 4 图 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 章 软件程序设计 5 设计思路为 主机通过键盘扫描程序确认是否有键按下 若有键按下则将 按键号对应的显示代码发送给从机 并判断是否是波特率按键 若是则进行波 特率调整 若无键按下 则继续进行键盘扫描 从机主程序动态显示缓冲区内 的数据 中断子程序接收数据并判断是否是波特率按键所对应的显示代码 若 是则进行波特率调整 然后将数据保存到缓冲区 初始波特率都为 9600 4 1 主程序流程图 键盘连接到甲机的 P2 口 通过按键扫描确定键值 从机与主机通过串行输 入口 P3 0 和串行输出口 P3 1 相连接 实现两机之间的串行通信 开始 设置串行口工 作方式及波特 率 检测按键 确定按键号 并发送 波特率按键 调整波特率 Y Y N N 图4 1 主机主程序流程图 4 2 键盘扫描子程序流程图 6 矩阵式键盘扫描的方法常用的有两种 一种是逐列送0 依次读回行 另一 种为反转法 本程序采用前者 程序流程图如下 开始 P2 口列置 0 行 置 1 读回 P2 口 得键号 行值是否变化 调整行 列值 结束 Y N 图4 2 键盘扫描子程序流程图 4 3 从机主程序流程图 从机主程序动态显示缓冲区的4个数据 从机的 P1口经锁存器74HC573连 接数码管位码 P2口经锁存器74HC573连接数码管的段码 从机与主机通过串 行输入口 P3 0和串行输出口 P3 1相连接 利用中断来接收主机发来的数据 并 根据接收的数据来判断是否需要进行波特率调整 从机主程序流程图如下 7 开始 初始化 送段码 送位码 显示完 调整指针 Y N 图 4 3 从机主程序流程图 4 4 从机中断子程序流程图 8 开始 清接收标志位 RI 保存到缓冲区 波特率按键 调整波特率 中断返回 N Y 图 4 3 从机中断子程序流程图 4 5 程序调试 图 4 5 程序调试 9 4 6 双机串行通信源程序 程序调试软件 Keil uVision4 程序仿真软件 ISIS 即 Proteus 7 8sp2 双机串行通信主机程序源代码 程序名称 双机串行通信波特率可调主机程序 C语言 主机功能 通过键盘扫描得到键号并发送 同时判断是否是波特率按键 若是 则调整波特率 简要说明 主机P2口接4 4矩阵式键盘 高4位行 低4位列 其中0 4号按键分别代表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 x 0 x for y 110 y 0 y 按键扫描子函数 void keyscan P2 0 xf0 temp P2 temp if temp 0 xf0 delay 5 延时消抖 P2 0 xf0 二次读回 temp P2 10 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 11 等待按键松开 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 12 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 0 F共阴极数码管显示段码 0为全部熄灭 段码 void delay uint x 延时 uchar t while x for t 0 t 110 t void ser interrupt 4 无返回值 函数名ser 关键字 中断号4 RI 0 va SBUF val i va switch va 判断是否需进行波特率调整 13 case 0 TH1 TL1 0 xe8 val 0 va val 1 val 2 val 3 16 i 3 break case 1 TH1 TL1 0 xf4 val 0 va val 1 val 2 val 3 16 i 3 break case 2 TH1 TL1 0 xfa val 0 va val 1 val 2 val 3 16 i 3 break case 3 TH1 TL1 0 xfd val 0 va val 1 val 2 val 3 16 i 3 break default break i if i 4

温馨提示

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

评论

0/150

提交评论