单片机双击串行通信MS51汇编代码.doc_第1页
单片机双击串行通信MS51汇编代码.doc_第2页
单片机双击串行通信MS51汇编代码.doc_第3页
单片机双击串行通信MS51汇编代码.doc_第4页
单片机双击串行通信MS51汇编代码.doc_第5页
已阅读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 双机串行通信主机程序源代码 双机串行通信波特率可改变主机程序代码 汇编 主机功能 通过键盘扫描得到键号 并发送对应键号的显示代码 同时判断是否是波特率按键 简要说明 甲机P2口接4 4矩阵式键盘 高4位行 低4位列 其中0 4号按键分别代表4种不同波特率 1200 2400 4800 9600 初始波特率9600 编 写 邢志杰 QQ824997141 时 间 2015年07月02日 最后修改 2015年07月03日 ORG 00H AJMP MAIN ORG 30H MAIN MOV SP 60H MOV TMOD 20H 定时器T1 方式2 MOV TH1 0FDH 初始波特率9600 MOV TL1 0FDH SETB TR1 MOV SCON 40H 串口方式1 主程序从这里开始 LOP1 MOV P2 0F0H 列置0 行置1 MOV A P2 读回P2口 ANL A 0F0H 屏蔽列 保留行 MOV B A 暂存A 用于二次读回时判断 XRL A 0F0H 相异或判断是否有键按下 JZ LOP1 无键按下返回 LCALL Delay 有按键 延时消抖 MOV A P2 二次读回 ANL A 0F0H 屏蔽列 保留行 CJNE A B LOP1 判断两次读数是否相等 其实没多大用 LCALL SCAN 掉键盘扫描 LCALL LOOSE 等待按键松开 LCALL GET KEY 得键号并发送 同时根据是否是波特率按键来改变波特率 AJMP LOP1 主程序到此结束 返回开始处不断循环 键盘扫描函数 10 SCAN MOV R3 0 列号初值0 MOV R2 0FEH R2用于扫描时行置1 逐列送0 SCAN2 MOV A R2 MOV P2 A 行置1 逐列送0 MOV A P2 逐列送0 依次读回行 JB ACC 4 LOOP1 判断第0行是否为0 若为0则该列 该行有按键 MOV R4 0 第0行的行号0送R4 RET LOOP1 JB ACC 5 LOOP2 MOV R4 04H 第1行的行号4送R4 RET LOOP2 JB ACC 6 LOOP3 MOV R4 08H 第2行的行号8送R4 RET LOOP3 JB ACC 7 SCAN1 MOV R4 0CH 第3行的行号12送R4 RET SCAN1 INC R3 该列无按键则列号加1 MOV A R2 RL A MOV R2 A JB ACC 4 SCAN2 4列未扫描完 扫描下一列 RET 等待按键松开子函数 LOOSE MOV P2 0F0H MOV A P2 ANL A 0F0H XRL A 0F0H JNZ LOOSE RET 得键号并发送 GET KEY MOV A R4 ADD A R3 得偏移量A即键号 MOV B A 暂存键号 MOV DPTR TAB 查表得对应键号的显示代码 MOVC A A DPTR MOV SBUF A 发送显示代码 JNB TI 未发完等待 CLR TI 清发送标志位 MOV A B 取出键号 判断是否是波特率按键并调整波特率 CJNE A 0 GET1 键号0对应波特率1200 MOV TL1 0E8H MOV TH1 0E8H AJMP GET4 11 GET1 CJNE A 1 GET2 键号1对应波特率2400 MOV TL1 0F4H MOV TH1 0F4H AJMP GET4 GET2 CJNE A 2 GET3 键号2对应波特率4800 MOV TL1 0FAH MOV TH1 0FAH AJMP GET4 GET3 CJNE A 3 GET4 键号3对应波特率9600 MOV TL1 0FDH MOV TH1 0FDH GET4 RET 延时子涵数 10ms Delay MOV R2 20 DEY1 MOV R3 248 NOP DJNZ R3 DJNZ R2 DEY1 RET SJMP 共阴极数码管显示代码 TAB DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77H 7CH 39H 5EH 79H 71H 00H END 双机串行通信从机程序源代码 双机串行通信波特率可改变从机程序代码 汇编 从机功能 主函数显示缓冲区数据 中断子函数接收主机发送的显示代码 同时判断是否是波特率按键代码 简要说明 P1口接4个数码管位码 P2口接段码 缓冲区30H 33H用于存放要显示的数据代码 其中30H存放波特率的显示代码初值为 4FH即显示 3 波特率9600 编 写 邢志杰 时 间 2015年07月02日 最后修改 2015年07月03日 ORG 00H AJMP MAIN ORG 23H AJMP Rece 中断子程序 ORG 30H MAIN MOV SP 60H MOV TMOD 20H T1方式1 MOV TH1 0FDH 波特率9600 12 MOV TL1 0FDH MOV SCON 50H 串口方式1 允许接收 SETB TR1 SETB ES SETB EA MOV R6 3 动态显示三个非波特率数据 MOV 30H 4FH 保存接收的数据 波特率代码 初值为3所对应的代码 代表初始波特率9600 MOV R1 31H 保存接收的数据 非波特率代码 主函数一直在显示缓冲区 DISP MOV P1 0FEH 送位码 MOV P2 30H 送段码 LCALL Delay 调延时函数 MOV P1 0FDH MOV P2 31H LCALL Delay MOV P1 0FBH MOV P2 32H LCALL Delay MOV P1 0F7H MOV P2 33H LCALL Delay AJMP DISP 返回主函数开始处 循环显示 接收中断子函数 Rece CLR RI 清接收标志位 MOV A SBUF LCALL Option 调波特率选择子函数 MOV R1 A 存入缓冲区 INC R1 DJNZ R6 Rec1 三个数未显示完跳转 MOV R1 31H 三个数显已示完 从31H从新开始 MOV R6 3 Rec1 RETI 延时子函数 Delay MOV R2 20 DEY1 MOV R3 248 NOP DJNZ R3 DJNZ R2 DEY1 RET 波特率判断选择 13 Option CJNE A 3FH Opt1 判断是否是波特率1200所对应的按键代码 MOV TL1 0E8H MOV TH1 0E8H ACALL Rest 是波特率按键则初始化缓冲区 重新显示 AJMP Opt4 Opt1 CJNE A

温馨提示

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

评论

0/150

提交评论