单片机双击串行通信MS51汇编代码_第1页
单片机双击串行通信MS51汇编代码_第2页
单片机双击串行通信MS51汇编代码_第3页
单片机双击串行通信MS51汇编代码_第4页
单片机双击串行通信MS51汇编代码_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、铁道大学四方学院铁道大学四方学院集中实践报告书集中实践报告书课题名称课题名称双机串行通信设计双机串行通信设计姓姓 名名邢志杰邢志杰学学 号号2012701920127019系、系、 部部电气工程系电气工程系专业班级专业班级方方 1210-41210-4指导教师指导教师马丽马丽20152015 年年 7 7 月月 3 3 日日 20122012 级级单片机接口课程设计单片机接口课程设计一、设计任务及要求:一、设计任务及要求:设计任务:设计任务:双机串行通信设计设计要求:设计要求:1、两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为 1200、2400、4800

2、和 9600bit/s。串行口工作方式为方式1 的全双工串行通信。 2、两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器 T1 计数初值 TH1、TL1 进行设定。故本题目本质上是通过键盘扫描得到设定的波特率,从而载入相应的 T1 计数初值 TH1、TL1 实现的。 3、要求发送方读入按键值,发送到接收方,接收方接受数据并显示在数码管上。 4、要求做出实物。二、指导教师评语:二、指导教师评语: 目 录第 1 章 设计目的 1第 2 章 设计要求 1第 3 章 硬件电路设计13.1 系统框图13.2 STC89C52 单片机最小系统23.3 按键电路33.4 主电路设计4第 4 章 软

3、件程序设计44.1 主程序流程图44.2 键盘扫描子程序流程图 54.3 从机主程序流程图 64.4 从机中断子程序流程图 74.5 程序调试84.6 双机串行通信源程序 9第 5 章 结论13参考文献13三、成绩三、成绩 指导教师签名: 年 月 日 第 1 章 设计目的1.1 设计目的(1)掌握单片机实际系统的开发步骤。(2)了解串行通信的原理;了解数码管显示的工作原理;了解键盘扫描的工作原理;对双机串行通信软件编程、调试、相关硬件设备的使用技能等方面得到真正的实践机会,把软硬件结合,克服其中的种种问题,提高编程能力。第 2 章 设计要求2.1 设计要求(1)两片单片机利用串行口进行串行通信

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

5、2 根输入输出口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。 VCC(40 引脚):电源电压VSS(20 引脚):接地 图 3-2 STC89C52 引脚图P0 端口(P0.0P0.7,3932 引脚):P0 口是一个漏极开路的 8 位双向I/O 口。作为输出端口,每个引脚能驱动 8 个 TTL 负载,对端口 P0 写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0 口也可以提供低 8 位地址和 8 位数据的复用总线。此时,P0 口部上拉电阻有效。在按键电路单片机 1AT89C52单片机 2AT89C52显示电路Flash ROM 编程时,P0 端口接收指令字节;

6、而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。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 的

7、触发输入(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 位地

8、址的输出脉冲。XTAL1(19 引脚):振荡器反相放大器和部时钟发生电路的输入端。XTAL2(18 引脚):振荡器反相放大器的输入端。STC89C52 引脚图如图 3-2 所示。3.3 按键电路图 3-3 按键电路图本设计按键采用矩阵键盘,键盘连接主机的 P2 口,主机从矩阵键盘接收信息,通过串行输出口输出到从机,从机从串行输入口接收信息并把信息显示在数码管上。3.4 主电路设计aabbccddeeffgghh001122335566abcdefg4477P3P3P3P3hP10P11P12P1345673210P10P11P12P13D02D13D24D35D46D57D68D79Q019Q

9、118Q217Q316Q415Q514Q613Q712LE11OE1U474HC573S3S0XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0

10、/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/W

11、R16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C52D02D13D24D35D46D57D68D79Q019Q118Q217Q316Q415Q514Q613Q712LE11OE1U374HC573C133pFC233pFX1CRYSTALR110kC433pFC533pFX2CRYSTALR210kC610uFR310kC310uF图 3-4 主电路图第 4 章 软件程序设计设计思路为:主机通过键盘扫描程序确认是否有键按下,若有键按下则将按键号对应的

12、显示代码发送给从机,并判断是否是波特率按键,若是则进行波特率调整,若无键按下,则继续进行键盘扫描。从机主程序动态显示缓冲区的数据。中断子程序接收数据并判断是否是波特率按键所对应的显示代码,若是则进行波特率调整,然后将数据保存到缓冲区。初始波特率都为 9600。 4.1 主程序流程图 键盘连接到甲机的 P2 口,通过按键扫描确定键值,从机与主机通过串行输入口 P3.0 和串行输出口 P3.1 相连接,实现两机之间的串行通信。图4-1 主机主程序流程图4.2 键盘扫描子程序流程图开始设置串行口工作方式及波特率检测按键确定按键号并发送波特率按键调整波特率YYNN矩阵式键盘扫描的方法常用的有两种,一种

13、是逐列送0,依次读回行;另一种为反转法。本程序采用前者,程序流程图如下:图4-2 键盘扫描子程序流程图4.3 从机主程序流程图从机主程序动态显示缓冲区的4个数据。从机的 P1口经锁存器74HC573连接数码管位码,P2口经锁存器74HC573连接数码管的段码。从机与主机通过串行输入口 P3.0和串行输出口 P3.1相连接,利用中断来接收主机发来的数据,并根据接收的数据来判断是否需要进行波特率调整。从机主程序流程图如下:开始P2 口列置 0,行置 1读回 P2 口得键号行值是否变化调整行,列值结束YN图 4-3 从机主程序流程图4.4 从机中断子程序流程图 开始初始化送段码,送位码显示完?调整指

14、针YN图 4-3 从机中断子程序流程图4.5 程序调试图 4-5 程序调试开始清接收标志位RI保存到缓冲区波特率按键?调整波特率中断返回NY4.6 双机串行通信源程序/*程序调试软件:Keil uVision4程序仿真软件:ISIS 即 Proteus-7.8sp2/*双机串行通信主机程序源代码:/*双机串行通信波特率可改变主机程序代码(汇编)主机功能:通过键盘扫描得到键号,并发送对应键号的显示代码,同时判断是否是波特率按键。简要说明:甲机P2口接4*4矩阵式键盘,高4位行,低4位列。其中04号按键分别代表4种不同波特率(1200、2400、4800、9600) 。初始波特率9600。编 写:

15、邢志杰(QQ824997141)时 间:2015年07月02日最后修改:2015年07月03日*/ORG 00HAJMP MAINORG 30HMAIN:MOV SP,#60HMOV TMOD,#20H ;定时器T1,方式2MOV TH1,#0FDH ;初始波特率9600MOV TL1,#0FDHSETB TR1MOV SCON,#40H ;串口方式1;主程序从这里开始LOP1:MOV P2,#0F0H ;列置0,行置1MOV A,P2 ;读回P2口ANL A,#0F0H ;屏蔽列,保留行MOV B,A ;暂存A,用于二次读回时判断XRL A,#0F0H ;相异或判断是否有键按下JZ LOP1

16、 ;无键按下返回LCALL Delay ;有按键,延时消抖MOV A,P2 ;二次读回ANL A,#0F0H ;屏蔽列,保留行CJNE A,B,LOP1 ;判断两次读数是否相等, (其实没多大用) 。LCALL SCAN ;掉键盘扫描LCALL LOOSE ;等待按键松开LCALL GET_KEY ;得键号并发送,同时根据是否是波特率按键来改变波特率AJMP LOP1 ;主程序到此结束,返回开始处不断循环;键盘扫描函数SCAN:MOV R3,#0 ;列号初值0MOV R2,#0FEH ;R2用于扫描时行置1,逐列送0SCAN2:MOV A,R2MOV P2,A ;行置1,逐列送0MOV A,P

17、2 ;逐列送0,依次读回行 ACC.4,LOOP1 ;判断第0行是否为0,若为0则该列,该行有按键MOV R4,#0 ;第0行的行号0送R4RETLOOP1: ACC.5,LOOP2MOV R4,#04H ;第1行的行号4送R4RETLOOP2: ACC.6,LOOP3MOV R4,#08H ;第2行的行号8送R4RETLOOP3: ACC.7,SCAN1MOV R4,#0CH ;第3行的行号12送R4RETSCAN1:INC R3 ;该列无按键则列号加1MOV A,R2RL AMOV R2,A ACC.4,SCAN2 ;4列未扫描完,扫描下一列RET;等待按键松开子函数LOOSE:MOV P

18、2,#0F0HMOV A,P2ANL A,#0F0HXRL A,#0F0HJNZ LOOSERET;得键号并发送GET_KEY: MOV A,R4ADD A,R3 ;得偏移量A即键号MOV B,A ;暂存键号MOV DPTR,#TAB ;查表得对应键号的显示代码MOVC A,A+DPTRMOV SBUF,A ;发送显示代码JNB TI,$ ;未发完等待CLR TI ;清发送标志位MOV A,B ;取出键号,判断是否是波特率按键并调整波特率CJNE A,#0,GET1 ;键号0对应波特率1200MOV TL1,#0E8HMOV TH1,#0E8HAJMP GET4GET1:CJNE A,#1,G

19、ET2 ;键号1对应波特率2400MOV TL1,#0F4HMOV TH1,#0F4HAJMP GET4GET2:CJNE A,#2,GET3 ;键号2对应波特率4800MOV TL1,#0FAHMOV TH1,#0FAHAJMP GET4GET3:CJNE A,#3,GET4 ;键号3对应波特率9600MOV TL1,#0FDHMOV TH1,#0FDHGET4:RET;延时子涵数(10ms)Delay:MOV R2,#20DEY1:MOV R3,#248NOP DJNZ R3,$DJNZ R2,DEY1RETSJMP $;共阴极数码管显示代码TAB:DB 3FH,06H,5BH,4FH,6

20、6H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00HEND双机串行通信从机程序源代码/*双机串行通信波特率可改变从机程序代码(汇编)从机功能:主函数显示缓冲区数据。中断子函数接收主机发送的显示代码,同时判断是否是波特率按键代码。简要说明:P1口接4个数码管位码,P2口接段码。缓冲区30H33H用于存放要显示的数据代码。其中30H存放波特率的显示代码初值为:4FH即显示3 (波特率9600) 。编 写:邢志杰时 间:2015年07月02日最后修改:2015年07月03日*/ORG 00HAJMP MAINORG 23HAJMP Rece ;中断子程

21、序ORG 30HMAIN:MOV SP,#60HMOV TMOD,#20H ;T1方式1MOV TH1,#0FDH ;波特率9600 MOV TL1,#0FDHMOV SCON,#50H ;串口方式1,允许接收SETB TR1SETB ESSETB EAMOV R6,#3 ;动态显示三个非波特率数据MOV 30H,#4FH ;保存接收的数据(波特率代码)初值为3所对应的代码,代表初始波特率9600MOV R1,#31H ;保存接收的数据(非波特率代码) ;主函数一直在显示缓冲区DISP:MOV P1,#0FEH ;送位码MOV P2,30H ;送段码LCALL Delay ;调延时函数MOV

22、P1,#0FDH MOV P2,31HLCALL Delay MOV P1,#0FBH MOV P2,32HLCALL Delay MOV P1,#0F7H MOV P2,33HLCALL DelayAJMP DISP ;返回主函数开始处,循环显示 ;接收中断子函数Rece:CLR RI ;清接收标志位MOV A,SBUF LCALL Option ;调波特率选择子函数MOV R1,A ;存入缓冲区INC R1 DJNZ R6,Rec1 ;三个数未显示完跳转MOV R1,#31H ;三个数显已示完,从31H从新开始MOV R6,#3Rec1:RETI;延时子函数Delay:MOV R2,#20DEY1:MOV R3,#248NOP DJNZ R3,$DJNZ R2,DEY1RET;波特率判断选择Option:CJNE A,#3FH,Opt1 ;判断是否是波特率1200所对应的按键代码MOV TL1,#0E8HMOV TH1,#0E8HACALL Rest ;是波特率按键则初始化缓冲区,重新显示AJMP Opt4Opt1:CJNE A,#06H,Opt2MOV

温馨提示

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

评论

0/150

提交评论