单片机课程设计实验单片机间串行通信.docx
- 文档编号:4517333
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:18
- 大小:477.32KB
单片机课程设计实验单片机间串行通信.docx
《单片机课程设计实验单片机间串行通信.docx》由会员分享,可在线阅读,更多相关《单片机课程设计实验单片机间串行通信.docx(18页珍藏版)》请在冰豆网上搜索。
单片机课程设计实验单片机间串行通信
《单片机原理及应用》
课程设计报告
课程设计题目:
单片机间串行通信原理
专业班级:
2012级电子信息科学与技术
学生:
罗滨志
学号:
1
成绩:
2014年12月27日
4实验步骤14
4.1实验程序调试14
4.1.1发送端程序调试14
4.1.2接收端程序调试15
4.2实验仿真16
摘要
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
而AT89C51单片机是各单片机中最为典型和最有代表性的一种,本设计是基于MCS51系列单片机中AT89C51所设计的一种具有一个全双工的串行通信口,可以实现单片机与单片机之间点对点串行通信,主从通信以及上,下位机互相通信等。
本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,由单片机与键盘控制数码管的显示,修改设置LED显示由按键开关控制,通过硬件电路制作以及软件程序的编制,设计制作一个简单的单片机间串行通信。
关键词:
单片机AT89C51串行通信
1设计任务
单片机间串行通信,是工业自动化、智能终端、通信管理等领域传统且重要的通讯手段。
此次设计单片机串行通信,就是为了了解单片机的工作原理,从而学会制作数字钟。
本次课程设计通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机原理与应用及C51程序设计》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
1.1功能要求
设计一个单片机与单片机之间点对点串行通信的应用电路,要求按下发送端单片机键盘上的按钮,该键的键号通过串行异步通信传送到接收端单片机中,并在LED上显示出来,其晶振频率为6MHZ。
1.2总体方案及工作原理
本设计2个相同单片机之间通过串口进行通信,通过按键输入要发送的数据,该数据为数字,并可在数码管上显示出来,设置完后通过串口通信发送给另一个单片机,另一个单片机接收到后在数码管上显示出来,2个单片机可以互相发送数据,通过2个单片机系统的数码管显示的数字可以判断串口通信发送的数据的正确性。
系统设计框图如图2-1所示。
本设计主要由按键输入电路、单片机控制电路和数码管显示电路组成,2个单片机的电路图完全相同,实现的功能也相同,所以本文只介绍其中一块单片机电路的设计方法和串口通信的原理。
整个串行通信的工作原理是:
在正常的供电状态下,首先利用发送端单片机读入键盘输入的数据,在将读入的数据传送到接收端,由单片机将所需要显示的数据送到LED显示器的输入口,当有键按下时则进入相应的按键调整状态,进行按键调整。
2系统硬件设计
2.1器件选择
2.1.1主要器件的型号
元件名称
数量
AT89C51芯片
2
7SEG-MPX2-CA数码管
1
6MHZ晶振(CRYSTAL)
1
10uF电解电容(CAP-ELEC)
1
30pF普通电容(CAP)
2
74LS06六驱动器
2
200R电阻(RES)
2
10K电阻(RES)
1
5.1K电阻(RES)
4
按钮(BUTTON)
16
BUS
2
2.1.2AT89C51
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-FALSHPROGRAMMABLEANDERASABLEREADONLYMEORY)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的单片机,单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,
AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
其基本结构如图1
图1AT89C51单片机的基本结构
AT89C51是一个低电压,高性能CMOS8位单片机,片含8kB的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片置有通用8位中央处理器(CPU)和Flash存储单元。
图2AT89C51单片机的引脚
VCC/GND:
供电电源。
P0口:
可以被定义为数据/地址的低八位,能够用于外部程序/数据存储器。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
标准输入输出I/O口,P1口管脚写入1后,被部上拉为高,可用作输入。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
既可用于标准输入输出I/O,也可用于外部程序存储器或数据存储器访问时的高八位地址。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
既可以作标准输入输出I/O,也可作为AT89C51的一些特殊功能口,管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有部程序存储器。
注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.1.3键盘输入电路
键盘输入电路由发送端单片机接口“P0.0/P0.1/P0.2/P0.3/P0.4/P0.5/P0.6/P0.7/四个按键—组串联”构成,按下S1按键,LED显示器显示相应键盘值,
同理其余15个按键如此。
图3键盘输入原理图
2.1.4晶振电路方案
晶振电路的功能在于给单片机提供振荡时钟信号,使单片机正常工作。
本设计中采用了常用的晶振电路组成方案,具体如下图所示。
图4晶振电路
2.1.5数码管显示
引脚
接口
A
P1.0
B
P1.1
C
P1.2
D
P1.3
E
P1.4
F
P1.5
G
P1.6
DP
P1.7
1
R8
2
R9
2.1.6复位电路方案
复位电路的功能在于对单片机进行复位从而达到对整个电路复位的功能。
要达到目的则要求在复位按键按下后在RST引脚上要出现一个维持2个机器周期高电平[4]。
考虑到可以利用电容的电压不能突变(需要一定的充放电时间),于是采用如下复位电路。
图5复位电路
2.2硬件原理图
3系统软件设计
3.1基本原理
它是利用单片机的全双工的串行通信口,实现单片机与单片机之间点对点串行通信,主从通信以及上,下位互相通信。
然后数码管把他们的容在相应的位置显示出来。
在具体的设计时按键采用中断方式工作,对LED显示的在中断程序中实现,在发送端程序只是对键盘输入数据的定义初始化,调用显示程序和控制程序的初始化。
本设计的软件程序包括发送端程序、接收端程序、中断子程序、时钟显示子程序等等。
另外电路中有按键控制程序。
3.2系统软件设计流程图
本系统软件设计分为发送机和接收机,发送机程序设计流程图如图6所示,接收机程序设计流程图如图7所示。
图6发送端流程图
图7接收端流程图
3.3按键程序设计
单片机读取按键值的方法有两种:
查询方式和中断方式。
查询方式是利用键盘程序不断查询是否有按键按下,有按下则进入相应按键的子程序进行数据处理,没有则一直循环查询;中断方式是将按键动作与单片机的中断系统联系起来,有按键按下时,就引起单片机中断,使系统进入中断处理程序。
本设计中有16个按键,且主要程序就是按键的处理,所以采用查询方式来处理读取按键值程序。
设计按键程序时,首先应注意的是按键的机械触点效应,原理上,按键按下时,单片机端口为低电平,但是由于按键的机械触点效应,按键在断开和闭合瞬间会有抖动过程,这个过程会出现一系列的负脉冲,这样会让单片机引起误判,因次,必须采取措施去掉按键抖动的影响。
去按键抖动常用的有两种方法:
硬件方法和软件方法。
硬件方法一般是并接电容,或者加R-S触发器;软件去抖动一般采用延时的方法,按键抖动的过程一般持续5-10ms的时间,在判断按键状态时,只要加一个5-10ms的延时程序,再次判断按键是否状态不变,即可实现去抖动的作用。
本设计中选用软件延时的方法去按键抖动。
3.3.1串口通信程序设计:
AT89C51的串行口是一个全双工的异步串行通信口,可以同时进行接收数据和发送数据,因为口的接受缓冲器和发送缓冲器在物理上是隔离的,即是完全独立的。
可以通过访问特殊功能寄存器SBUF,来访问接收缓冲器和发送缓冲器。
接收缓冲器还具有双缓冲的功能,即它在接收第一个数据字节后,能接受第二个数据字节,但是,在它完成接收第二个数据字节之后,若第一个字节仍未取走,那么该字节数据将丢失。
对串行口的控制主要包括对状态控制寄存器SCON、控制寄存器PCON、和串行数据寄存器SBUF的设置。
3.3.2显示程序设计:
根据数码管的驱动方式不同,数码管送显方式有两种:
静态送显和动态送显。
静态显示驱动:
静态驱动也称直流驱动,在静态显示驱动方式下,数码管的共阴极或共阳极共同接地或接电源,每个数码管的段选线与8位的单片机并口连接。
静态显示驱动方式占用的单片机I/O端口比较多,一般在实用中不采用。
动态显示驱动:
数码管动态显示方式是将所有的段选线并联在一起,由一个8位I/O口来控制,再利用单片机的其他I/O口来作为数码管的位选线。
当单片机输出显示数字的译码时,哪个数码管显示由单片机对位选通电路的控制来选择,所以将欲显示的数码管的位选通端选通,该数码管就会显示,其它数码管均不会亮。
通过轮流控制各个数码管的选通端使数码管轮流显示。
在显示过程中,每个数码管的显示时间为1-2ms,由于人们的视觉暂留现象及发光二极管的余晖效应,只要扫描的速度够快,给人的印象就是同时点亮的,而且不会有闪烁感。
3.4软件清单
3.4.1发送端程序
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#50H设置堆栈区为:
50H---7FH
CLREA关中断
MOVTMOD,#20HT1方式2
MOVTH1,#0E7H波特率设置为:
625bps
MOVTL1,#0E7H
MOVPCON,#0
SETBTR1
MOVSCON,#40H设串口为方式1
LOOP:
NOP
ACALLKEYSCAN调用键盘扫描程序KEYSCAN
MOVA,R7
CJNEA,#0FFH,EXIT1有按键按下,转EXIT1执行
SJMPLOOP主程序循环
EXIT1:
MOVSBUF,A发送键号
JNBTI,$
CLRTI
SJMPLOOP主程序循环
NOP
KEYSCAN:
MOVP0,#0F0H键盘扫描程序KEYSCAN,返回值存R7中
MOVA,P0有键按下返回相应键号,无键按下返回FFH,应键号
CPLA
ANLA,#0F0H
JZNOKEY无按键按下,转NOKEY执行
ACALLDEL10MS调用延时10ms程序,软件去抖动
MOVA,P0
CPLA
ANLA,#0F0H
JZNOKEY
MOVR3,A闭合键列线状态送R3
MOVR4,#11111110B从P0.0=0开始扫描
MOVR0,#4循环扫描4次
KLOOP1:
MOVP0,R4
ACALLDEL1MS
MOVA,P0
CPLA
ANLA,#0F0H
JNZKEYNUM
MOVA,R4
RLA
MOVR4,A闭合键行线状态送R4
DJNZR0,KLOOP1
SJMPNOKEY
KEYNUM:
MOVA,R3计算列号,结果存在R3中
SWAPA
MOVR3,#0
MOVR0,#4
KLOOP2:
RRCA
JCCOL
INCR3
DJNZR0,KLOOP2
SJMPNOKEY
COL:
MOVA,R4计算列号,结果存在R4中
MOVR4,#0
MOVR0,#4
KLOOP3:
RRCA
JNCADDKEY
INCR4
DJNZR0,KLOOP3
SJMPNOKEY
ADDKEY:
MOVA,R4计算键号,键号=行号*4+列号
RLA
RLA
ADDA,R3
MOVR7,A键号存R7中
KLOOP4:
MOVP0,#0F0H等待按键释放
MOVA,P0
CPLA
ANLA,#0F0H
JNZKLOOP4
RET
NOKEY:
MOVR7,#0FFH无键按下,FFH存R7中
RET返回
NOP
DEL1MS:
MOVR6,#125延时1ms子程序
DEL:
NOP
NOP
DJNZR6,DEL
RET
DEL10MS:
MOVR6,#5延时10ms子程序
DEL2:
MOVR5,#125
DEL1:
NOP
NOP
DJNZR5,DEL1
DJNZR6,DEL2
RET
END
3.4.2接收端程序
ORG0000H
AJMPSTART
ORG0023H
AJMPSIO调转到串行口中断执行
ORG0030H
START:
MOVSP,#50H设置堆栈区为:
50H---7FH
MOVA,#10设置显示初始字符为P
MOV30H,A
INCA
MOV31H,A
MOVTMOD,#20HT1工作方式2
MOVTH1,#0E7H波特率设置625bps
MOVTL1,#0E7H
MOVPCON,#0
SETBTR1
MOVIP,#10H设置串行口中断为高优先级
MOVIE,#90H开串行口中断
MOVSCON,#50H设串口为方式1
LOOP:
NOP
ACALLDISP调用显示子程序DISP
SJMPLOOP主程序循环
DISP:
MOVDPTR,#DISPTAB显示子程序DISP
MOVA,30H
MOVCA,A+DPTR
MOVP1,A
CLRP3.4
ACALLDEL1MS
MOVA,#0FFH
MOVP1,A
SETBP3.4
MOVA,31H
MOVCA,A+DPTR
MOVP1,A
CLRP3.5
ACALLDEL1MS
MOVA,#0FFH
MOVP1,A
SETBP3.5
RET
SIO:
PUSHPSW串行口中断服务程序SIO
PUSHACC
JNBRI,EXIT
CLRRI
MOVA,SBUF接收发送端传送来的数据
MOVB,#10将键号分解成两位存于31H和30H中
DIVAB
JNZEXIT2
MOVA,#11
EXIT2:
MOV31H,A
MOVA,B
MOV30H,A
EXIT:
NOP
CLRTI
POPACC
POPPSW
RETI中断返回
DEL1MS:
MOVR6,#125延时1ms子程序
DEL:
NOP
NOP
DJNZR6,DEL
RET
DISPTAB:
DB0C0H,0F9H,0A4H显示段码表,0,1,2
DB0B0H,99H,92H3,4,5
DB82H,0F8H,80H6,7,8
DB90H,8CH,0FFH9,P,熄灭
END
4实验步骤
4.1实验程序调试
4.1.1发送端程序调试
在Keil软件中输入实验发送端参考程序,调试如图8所示:
图8发送端程序调试图
如图8发送端程序调试图可以看出程序调试无错误,所以将调试无错误的发送端程序转换为HEX文件;
4.1.2接收端程序调试
在Keil软件中输入实验接收端参考程序,调试如图9所示:
图9接收端程序调试图
如图9接收端程序调试图可以看出程序调试无错误,所以将调试无错误的接收端程序转换为HEX文件;
4.2实验仿真
按照单片机间串行通信实验原理图在Proteus软件中连接相应源器件如图10
图10实验原理图
将首先转换好的发送端与接收端的HEX文件下载到相应的芯片中,在Proteus中仿真图形如图11
图11电路仿真图
5设计总结
本设计介绍了一种单片机与单片机之间串行通信的设计方法,论文首先介绍了单片机与单片机之间串行通信的工作原理、软件与硬件的实现、研究现状、串行通信的概念以及键盘输入。
主要是单片机与单片机之间串行通信的方式和重要的数据位说明,接着提出了可行的设计方案,并从硬件电路设计及软件程序设计两个方面详细介绍了整个设计的工作原理及设计过程,同时验证了方案的可行性。
通过本次单片机间串行通信实验设计,使我对单片机有更加深刻的了解,明白了软件与硬件的配合使用,懂得怎样去分析电路及调试程序,虽然在设计过程中遇到很多困难,但是经过进一步查阅相关资料,问题才得以解决,尽管最后设计不是那么完美,不是那么理想,但总体上来说实现了单片机间串行通信,基本上完成了实验原理所需要求,通过本次设计也使得自己明白软件与硬件相结合的重要性,二者缺一不可,所以在实现硬件连接的同时也要读懂软件所实现的功能。
6参考文献:
[1]蔡骏编著.单片机实验指导教程.:
大学,2008.7
[2]郭天祥编著.新概念51单片机C语言教程.:
电子工业,2009.1
[3]万松、晓龙.微型计算机原理及应用实验教程.:
西南交通大学,2013.8
[4]全利编著.单片机原理与接口技术.第2版.:
高等教育,2009.1
[5]江思敏、明.Protel电路设计教程.第2版.:
清华大学,2006.12
[6]朱清慧,Proteus教程:
电子线路设计、制版与仿真,清华大学,2008.9
[7]郭文川,单片机原理与接口技术,中国农业,2007.1
[8]加国.单片机原理与应用及C51程序设计.清华大学,2009
(2)
[9]光飞、楼然苗、胡佳文、象佐.单片机课程设计实例教程.:
航空航天大学,2004.9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 实验 串行 通信
![提示](https://static.bdocx.com/images/bang_tan.gif)