单片机课程设计实验---单片机间串行通信

时间:2024.3.31

《单片机原理及应用》

课程设计报告

        课程设计题目:单片机间串行通信原理

专业班级 :2012级电子信息科学与技术

学生姓名 :   罗滨志  

学    号 :120802010051

成    绩 :            

2014 年12 月 27日

目    录

摘  要······························· 1

1 设计任务····························· 1

1.1  功能要求·························· 2

1.2  总体方案及工作原理····················· 2

2 系统硬件设计··························· 2

2.1 器件选择·························· 2

2.1.1主要器件的型号····················· 2

2.1.2  AT89C51························ 3

2.1.3键盘输入电路······················ 5

2.1.4晶振电路方案······················ 6

2.1.5数码管显示······················· 6

2.1.6复位电路方案······················ 6

2.2 硬件原理图·························· 7

3 系统软件设计··························· 8

3.1基本原理··························· 8

3.2系统软件设计流程图······················ 8

3.3 按键程序设计························· 9

3.3.1串口通信程序设计:··················· 10

3.3.2 显示程序设计:···················· 10

3.4软件清单·························· 10

3.4.1发送端程序······················ 10

3.4.2接收端程序······················ 13

4实验步骤····························· 14

4.1实验程序调试························· 14

4.1.1发送端程序调试····················· 14

4.1.2接收端程序调试····················· 15

4.2实验仿真··························· 16

5设计总结····························· 17

6参考文献:···························· 17


摘  要

单片机自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主要器件的型号

2.1.2  AT89C51

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-FALSH PROGRAMMABLE AND ERASABLE READ ONLY MEORY)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的单片机,单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,

AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。其基本结构如图1

                         图 1 AT89C51单片机的基本结构

AT89C51 是一个低电压,高性能CMOS 8 位单片机,片内含8kB 的可反复擦写的Flash 只读程序存储器和256B 的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51 指令系统及8052 产品引脚兼容,片内置有通用8 位中央处理器(CPU)和Flash 存储单元。                 

                      图2  AT 89C51单片机的引脚

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.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复位输入。当振荡器复位器件时,要保持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数码管显示

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发送端程序

ORG 0000H     

AJMP START

ORG 0030H

START:   MOV SP,#50H       设置堆栈区为:50H---7FH

CLR EA            关中断

 MOV TMOD,#20H   T1方式2

 MOV TH1,#0E7H    波特率设置为:625bps

 MOV TL1,#0E7H

          MOV PCON,#0

          SETB TR1

          MOV SCON,#40H    设串口为方式1

LOOP:   NOP

ACALL KEYSCAN    调用键盘扫描程序KEYSCAN

MOV A,R7

CJNE A,#0FFH,EXIT1  有按键按下,转EXIT1 执行

SJMP LOOP           主程序循环

EXIT1:  MOV SBUF,A         发送键号

JNB TI,$

CLR TI

SJMP LOOP           主程序循环

NOP

KEYSCAN: MOV P0,#0F0H      键盘扫描程序KEYSCAN,返回值存R7中

MOV A,P0             有键按下返回相应键号,无键按下返回FFH,应键号

CPL  A 

ANL A,#0F0H

JZ NOKEY             无按键按下,转NOKEY执行

ACALL DEL10MS      调用延时10ms程序,软件去抖动

MOV A,P0

CPL A

ANL A,#0F0H

JZ NOKEY

MOV R3,A             闭合键列线状态送R3

MOV R4,#11111110B    从P0.0=0开始扫描

MOV R0,#4            循环扫描4次

KLOOP1:  MOV P0,R4

ACALL DEL1MS

MOV A,P0

CPL A

ANL A,#0F0H

JNZ KEYNUM

               MOV A,R4

               RL A

               MOV R4,A           闭合键行线状态送R4

               DJNZ R0,KLOOP1

               SJMP NOKEY

KEYNUM:  MOV A,R3        计算列号,结果存在R3中

         SWAP A

               MOV R3,#0

               MOV R0,#4

KLOOP2:  RRC A

         JC COL

               INC R3

               DJNZ R0,KLOOP2

               SJMP NOKEY

COL:     MOV A,R4          计算列号,结果存在R4中

         MOV R4,#0

               MOV R0,#4

KLOOP3:  RRC A

         JNC ADDKEY

               INC R4

               DJNZ R0,KLOOP3

               SJMP NOKEY

ADDKEY:  MOV A,R4         计算键号,键号=行号*4+列号

         RL A

               RL A

               ADD A,R3

               MOV R7,A           键号存R7中

KLOOP4:  MOV P0,#0F0H      等待按键释放

         MOV A,P0

               CPL A

               ANL A,#0F0H

               JNZ KLOOP4

               RET

NOKEY:   MOV R7,#0FFH      无键按下,FFH存R7中

         RET                 返回

               NOP

DEL1MS:  MOV R6,#125       延时1ms子程序

DEL:     NOP

         NOP

               DJNZ R6,DEL

               RET

DEL10MS: MOV R6,#5         延时10ms子程序

DEL2:    MOV R5,#125

DEL1:    NOP

         NOP

               DJNZ R5,DEL1

               DJNZ R6,DEL2

               RET

               END

3.4.2接收端程序

ORG 0000H

                AJMP START

                ORG 0023H

                AJMP SIO        调转到串行口中断执行

                ORG 0030H

START:    MOV SP,#50H    设置堆栈区为:50H---7FH

          MOV A,#10       设置显示初始字符为P

                MOV 30H,A

                INC A

                MOV 31H,A

                MOV TMOD,#20H  T1工作方式2

                MOV TH1,#0E7H   波特率设置625bps

                MOV TL1,#0E7H

                MOV PCON,#0

                SETB TR1

                MOV IP,#10H       设置串行口中断为高优先级

                MOV IE,#90H     开串行口中断

                MOV SCON,#50H  设串口为方式1

LOOP:     NOP

          ACALL DISP      调用显示子程序DISP

                SJMP LOOP       主程序循环

DISP:     MOV DPTR,#DISPTAB  显示子程序DISP

          MOV A,30H

                MOVC A,@A+DPTR

                MOV P1,A

                CLR P3.4

                ACALL DEL1MS

                MOV A,#0FFH

                MOV P1,A

                SETB P3.4

                MOV A,31H

                MOVC A,@A+DPTR

                MOV P1,A

                CLR P3.5

                ACALL DEL1MS

                MOV A,#0FFH

                MOV P1,A

                SETB P3.5

                RET

SIO:      PUSH PSW       串行口中断服务程序SIO

          PUSH ACC

                JNB RI,EXIT

                CLR RI

                MOV A,SBUF    接收发送端传送来的数据

                MOV B,#10      将键号分解成两位存于31H和30H中

                DIV AB

                JNZ EXIT2

                MOV A,#11

EXIT2:    MOV 31H,A

          MOV A,B

                MOV 30H,A

EXIT:     NOP

          CLR TI

                POP ACC

                POP PSW

                RETI              中断返回

DEL1MS:   MOV R6,#125      延时1ms子程序

DEL:      NOP

          NOP

                DJNZ R6,DEL

                RET

DISPTAB:  DB 0C0H,0F9H,0A4H  显示段码表,0,1,2

          DB 0B0H,99H,92H      3,4,5

                DB 82H,0F8H,80H      6,7,8

                DB 90H,8CH,0FFH      9,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

更多相关推荐:
单片机课程设计实验报告

中国民航大学单片机课程设计报告数字温度计姓名白杨学号专业班级指导老师常美华赵淑舫所在学院航空自动化学院20xx年12月18日1概述11课程设计的意义本次课程设计是在我们学过单片机后的一次实习可增加我们的动手能力...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机课程设计数字钟实验报告

单片机课程设计电子钟一实现功能1能够实现准确计时以数字形式显示时分秒的时间2小时以24小时计时形式分秒计时为60进位能够调节时钟时间3闹钟功能一旦走时到该时间能以声或光的形式告警提示4能够实现按键启动与停止功能...

单片机课程设计实验报告封面

单片机课程设计姓名学号年级专业所在院系电气工程与自动化学院指导教师徐敏关键生提交日期1目录一课程设计任务书二设计项目简介三电路原理图及其简介四系统功能描述五程序框图六程序清单七收获与体会2单片机原理及应用课程设...

单片机课程设计实验报告

单片机原理与接口技术直流电机测速系统课程设计报告学院专业学生姓名学号指导教师时间一前言课程设计是培养学生综合运用所学知识发现提出分析和解决实际问题锻炼实践能力的重要环节是对学生实际工作能力的具体训练和考察过程随...

单片机课程设计实验报告

单片机课程设计实验报告组员20xx0109题目分析本小车是由一块8位单片机AT89S52开发板作为小车的控制器用两个360舵机作为小车的动力前轮用一个单向滚动小球构成后轮单片机开发板上前端留有一块面包板做为小车...

流水灯单片机课程设计报告

井冈山大学机电工程学院单片机课程设计报告课程名称单片机设计题目流水灯姓名覃家应陈东阳专业生物医学工程班级10级医工本一班学号100615062指导教师王佑湖20xx年11月10日目录1引言211设计任务212设...

可控流水灯单片机课程设计报告(c语言)

EDA课程设计报告流水灯专业电子信息工程学号0909054126姓名张新利20xx6271目录1引言12课题综述121课题的来源122课题的意义123预期的目标124面对的问题125课题的技术23系统分析231...

单片机课程设计报告解程翔

莱芜职业技术学院课程论文目录一引言本课程设计的目的2二八路LED跑马灯实验221设计内容222电路图223上机程序324调试结果及结论4三二位数码管循环显示0099的实验431设计内容432电路图433上机程序...

单片机课程设计实验报告

单片机应用实践课程设计任务书学生姓名专业班级指导教师陈德军工作单位武汉理工大学题目单片机应用实践设计并实现步进电机控制器初始条件1KeilProteus78STC等软件2课程设计辅导书单片机微型计算机与接口技术...

单片机电子时钟课程设计实验报告

单片机实践报告题目电子时钟设计专业学生姓名王健吉准考证号指导教师20xx年10月一课程设计的目的和意义课程设计的目的与意义在于让我们将理论与实践相结合培养我们综合运用电子课程中的理论知识解决实际性问题的能力让我...

单片机课程设计实验报告+基于单片机的数字时钟+含完整实验代码

单片机课程设计报告基于单片机的数字时钟姓名班级学号一前言利用实验板上的4个LED数码管设计带有闹铃秒表功能的数字时钟功能要求a计时并显示LED由于实验板上只有4位数码管可设计成显示时分和显示分秒并可切换b时间调...

单片机课程设计实验报告(35篇)