51单片机与PC机串行异步通信设计.docx
- 文档编号:11057010
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:19
- 大小:127.03KB
51单片机与PC机串行异步通信设计.docx
《51单片机与PC机串行异步通信设计.docx》由会员分享,可在线阅读,更多相关《51单片机与PC机串行异步通信设计.docx(19页珍藏版)》请在冰豆网上搜索。
51单片机与PC机串行异步通信设计
摘要
51单片机是基础入门的一个单片机,还是应用最广泛的一种,它可以独立完成对数字信号的算术运算,逻辑控制,串行通信等功能。
但当需要处理较复杂数据或需要对多个采集数据进行综合处理以及需要进行集散控制时,单片机的算术运算和逻辑运算能力显的不足,往往需要借助计算机系统,此时要求单片机不仅能独立完成单机的控制任务,还要能与其他数据控制设备进行数据交换。
因此,实现单片机与PC机之间的远程通信对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制。
本文系统地介绍了利用程序设计语言C51和KeiluVision3软件实现51单片机与PC之间进行异步通信的设计。
关键字:
单片机;PC机;串行异步
目录
前言2
第1章51单片机与编译语言、软件简介3
1.151单片机简介3
1.2程序设计语言C51简介3
1.3KeiluVision3简介3
第2章通信方式的选取与分析5
2.1通信方式的选择5
2.2串行通信方式简介5
2.2.1串行通信的同步方式5
2.2.2串行通信技术标准6
第3章硬件设计8
3.1硬件连接分析8
3.1151单片机与PC的接口特性8
3.1280C51简介8
3.13MAX232芯片简介9
3.2硬件连接图10
第4章软件设计12
4.1程序基本流程图12
4.2初值的计算方法12
4.2.1定时器/计数器初值的计算12
4.2.2波特率的计算13
4.3C51源程序13
4.4程序运行后的结果16
参考文献18
致谢19
前言
近年来,在自动化控制盒智能仪器仪表中,单片机的应用越来越广泛,由于单片机的运算功能较差,往往要借助计算机辅助系统,因此单片机和PC机进行远程通信具有更实际意义。
通信的关键在于互相传递数据和其他信息。
51系列单片机内部的串行口具有通信的功能,该串行口可以作为通信接口,利用该接口与PC机的串口进行通信,将单片机采集的数据传送到PC机中,由PC机的高级语言或数据库进行整理及统计等复杂处理就能满足实际的应用需求。
51单片机的开发除了硬件支持外,同样离不开软件。
用汇编语言或C语言等高级语言写成的源程序必须转换为机器代码才能被执行。
目前时分流行的是Keil8051C编译器。
它提供了集成开发环境,包括C编译器、宏汇编、连接器、库管理和仿真调试器。
利用KeilCuVision编写的程序可以直接调用编译器编译,连接后可以直接运行。
本次课程设计概括了《单片机原理》等课程的主要知识点,通过该设计能够巩固前期课程的知识并且培养和提高自身的综合设计能力。
第1章51单片机与编译语言、软件简介
1.151单片机简介
由于单片机是把微型计算机的与外部设备都集中在一块芯片上,故可以把单片机看成是一个不带外部设备的微计算机,相当于一个没有显示器、没有键盘、不带监控程序的单板机,主要内部结构主要包括:
CPU、存储器、I/O端口。
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
T89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
本次课程设计编译软件中选择AT89C51,AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.2程序设计语言C51简介
目前单片机应用设计与开发,多使用C51语言来编程。
C51语言是在标准C的基础上,根据单片机存储器硬件结构及内部资源,扩展相应的数据类型和变量,而在语法规定、程序结构与设计方法上,都与标准C相同。
因此在单片机应用的程序设计中,得到非常广泛的使用。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
C51能直接对单片机硬件进行操作,既有高级语言的特点,又有汇编语言的特点。
在开发大型软件时更能体现高级语言的优势。
与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
1.3KeiluVision3简介
单片机的程序设计需要在特定的编译器中进行。
编译器完成对程序的编译、连接等工作,并最终生成可执行文件。
对于单片机程序的开发,一般采用Keil公司的uVision系列的集成开发环境,目前的最高版本是uVision3,支持汇编语言以及C51等的程序设计,用于51单片机的Windows下的集成开发环境,提供对8051内核的各种型号的支持,为51单片机软件开发提供全新的C语言开发环境。
该开发环境下集成了文件编辑处理、编译链接、项目(Project)管理、窗口、工具引用和仿真软件模拟器以及Monitor51硬件目标调试器等多种功能,所有功能均可在KeiluVision3的开发环境中进行操作。
第2章通信方式的选取与分析
2.1通信方式的选择
通信方式分为串行通信和并行通信。
串行传送是指数据在单条1位宽的传输线上,一位一位地按顺序分时传送。
以1字为例,在串行传送中,1字节的数据要通过一条传输线分8次由低位到高位按顺序一位一位地传送。
并行传送是指数据在多条并行1位宽的传输线上同时由源传送到目的。
以1字节的数据为例,在并行传送中,1字节的数据通过8条并行传输线同时由源传送到目的。
串行通信的速度慢,但使用的传输设备成本低,可利用现有的通信手段和通信设备,适合于计算机与计算机、单片机与计算机等之间的远程通信;而并行通信的速度快,但使用的传输设备成本高,适合于近距离的数据传送。
因此,在本次课程设计中选择串行通信。
下面简单介绍串行通信方式。
2.2串行通信方式简介
2.2.1串行通信的同步方式
异步通信是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。
异步串行通信的特点可以概括为:
以字符为单位传送信息;相邻两字符间的间隔是任意长;接收时钟和发送时钟只要相近就可以。
简单的说就是:
字符间异步,字符内部各位同步。
异步串行通信的数据格式为每个字符(每帧信息)由4个部分组成:
1位起始位,规定为低电0、5~8位数据位,即要传送的有效信息,1位奇偶校验位,1~2位停止位,规定为高电平1。
同步通信是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。
同步串行通信的特点可以概括为:
以数据块为单位传送信息;在一个数据块(信息帧)内,字符与字符间无间隔;接收时钟与发送进钟严格同步。
同步串行通信方式中一次连续传输一块数据,开始前使用同步信号作为同步的依据。
由于连续传输一个数据块,故收发双方时钟必须相当一致,否则时钟漂移会造成接收方数据辨认错误。
这种方式下往往是发送方在发送数据的同时也通过一根专门的时钟信号线同时发送时钟信息,接收方使用发送方的时钟来接由数据。
由于异步通信每发送一个字符前先发送起始位,发送完字符后再发送结束位,以此作为双方同步的依据。
这种方式对硬件要求较宽松,电路简单,但传输效率不高。
同步串行通信方式传输效率高,但对硬件要求高,电路结构复杂。
由于51单片机与PC的时钟不一致,时钟漂移会造成接收方数据辨认错误,因此选择异步串行通信方式。
异步串行通信的帧格式如图2.1所示。
图2.1串行异步传输帧格式
2.2.2串行通信技术标准
数据传输率
数据传输率是指单位时间内传输的信息量,可用比特率和波特率来表示。
比特率:
比特率是指每秒传输的二进制位数,用bps(bit/s)表示。
波特率,波特率是指每秒传输的符号数,若每个符号所含的信息量为1比特,则波特率等于比特率。
在计算机中,一个符号的含义为高低电平,它们分别代表逻辑“1”和逻辑“0”,所以每个符号所含的信息量刚好为1比特,因此在计算机通信中,常将比特率称为波特率,即:
1波特(B)=1比特(bit)=1位/秒(1bps)
发送时钟和接收时钟
在串行通信中,二进制数据以数字信号的信号形式出现,不论是发送还是接收,都必须有时钟信号对传送的数据进行定位。
在TTL标准表示的二进制数中,传输线上高电平表示二进制1,低电平表示二进制0,且每一位持续时间是固定的,由发送时钟和接收时钟的频率决定。
发送时钟:
发送数据时,先将要发送的数据送入移位寄存器,然后在发送时钟的控制下,将该并行数据逐位移位输出。
通常是在发送时钟的下降沿将移位寄存器中的数据串行输出,每个数据位的时间间隔由发送时钟的周期来划分。
接收时钟:
在接收串行数据时,接收时钟的上升沿对接收数据采样,进行数据位检测,并将其移入接收器的移位寄存器中,最后组成并行数据输出,如图8.7所示。
接收时钟和发送时钟与波特率有如下关系:
F=n×B这里F是发送时钟或接收时钟的频率;B是数据传输的波特率;n称为波特率因子。
设发送或接收时钟的周期为Tc,频率为F的位传输时间为Td,则:
Tc=1/F,Td=1/B得到:
Tc=Td/n在实际串行通信中,波特率因子可以设定。
在异步传送时,n=1,16,64,实际常采用n=16,即发送或接收时钟的频率要比数据传送的波特率高n倍。
在同步通信中波特率因子必等于1。
首先应掌握串行口的发送过程串行口的发送过程由指令启动,即CPU由一条写发送缓冲器的指令把数据(字符)写入串行口的发送缓冲器SBUF(发)中,再由硬件电路自动在字符的始、末加上起始位(低电平)、停止位(高电平)及其它控制位(如奇偶位等),然后在移位脉冲SHIFT的控制下,低位在前,高位在后,从TXD端(方式0除外)一位位地向外发送。
串行口的接收与否受制于允许接收位REN的状态,当REN被软件置“1”后,允许接收器接收。
接收端RXD一位位地接收数据,直到收到一个完整的字符数据后,控制电路进行最后一次移位,自动去掉启始位,使接收中断标志RI置“1”,并向CPU申请中断。
CPU响应中断,用一条指令把接收缓冲器SBUF(收)的内容读入累加器。
TI和RI是由硬件置位的,但需要用软件复位。
第3章硬件设计
3.1硬件连接分析
3.1151单片机与PC的接口特性
在实现单片机与PC机之间通信或单片机与单片机之间远程距离通信时通常采用标准串行总线通讯接口。
比如RS-232C、RS-422、RS485等。
在这些串行总线接口标准中,是在异步串行通信中应用最广的标准总线,它实用于短距离或带调制解调器的通信场合。
下面以RS-232标准串行总线接口为例,简单介绍单片机与PC机之间串行通信的硬件实现过程。
TTL电平标准:
输出L:
<0.8V;H:
>2.4V。
输入L:
<1.2V;H:
>2.0V
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。
输入,低于1.2V就认为是0,高于2.0就认为是1。
于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。
RS232标准:
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V。
PC的串口是RS232电平的,而单片机的串口是TTL电平的。
两者之间必须有一个电平转换电路,这里采用专用芯片MAX232进行转换。
3.1280C51简介
80C51引脚图如图3.1所示,下面简要介绍各接口。
VCC:
供电电压
GND:
接地。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如微
图3.180C51引脚图
处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.13MAX232芯片简介
MAX232是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片,适用于各种EIA-232C和V.28/V.24的通信接口。
MAX232内部有一个电源电压变换器,
可以把输入的+5V电源电压变换成为RS-232C输出电平所需的±10V电压。
所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。
对于没有±1源的场合,其适应性更强。
图3.1为MAX232芯片的引脚,在实际应用中T1IN和T2IN可直接接TTL/CMOS电平的89C52单片机的串行发送端TXD;R1OUT和R2OUT可直接接TTL/CMOS电平的89C52单片机的的串行接收端;T1OUT和T2OUT可直接接PC的RS-232串口的接收端RXD;R1IN和R2IN直接接PC的RS-232串口的发送端TXD。
这种发送与接收的对应关系不能连错,否则不能正常工作。
图3.2MAX232引脚图
3.2硬件连接图
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。
进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,其常用的方法有两种,一种是采用运算放大器、晶体管、光电隔离器等器件组成的电路来实现,另一种是采用专门集成芯片来实现。
本次课程设计采用了专用芯片MAX232进行转换,更简单可靠。
本次课程设计采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:
第5脚的GND、第2脚的RXD、第3脚的TXD。
这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。
串口通讯的硬件电路如下图所示:
图3.3硬件连接图
第4章软件设计
4.1程序基本流程图
开始
开始
清RI
接收数据
RI=1?
TI=1?
T1初始化,并启动
设定通信方式
设定串行通信方式
发送数据
T1初始化,并启动
清TI
N
Y
N
Y
数据发送完?
数据发送完?
N
N
Y
Y
结束
结束
图2.1查询发送流程图图2.2查询接收流程图
4.2初值的计算方法
4.2.1定时器/计数器初值的计算
定时器/计数器工作时必须给计数器设置计数器初值,这个初值是要送到TH(TH0/TH1)和TL(TL0/TL1)中的时间常数。
定时器/计数器中的脉冲计数器是在计数初值基础上加以加法计数的,并能在计数器从全“1”到全“0”时自动产生定时溢出的中断请求。
因此,把计数器计满为零所需要的计数值设定为C,计数初值设定为TC,由此便得如下的计算式:
TC=MC-C
式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为
,在方式1时为
;在方式2和方式3时为
。
在定时器模式下,计数器由单片机主脉冲经12分频后计数。
因此,定时器定时时间T的计算公式为:
T=(M-TC)
4.2.2波特率的计算
串口方式0为
/12
串口方式1为K*
/(32*12*(256-TH1))
串口方式2为K*
/64
串口方式3为K*
/(32*12*(256-TH1))
4.3C51源程序
假设PC机先向单片机指令,当单片机接收到PC发来的数据,并判断命令为“01H”时,启动定时发送程序,即每隔2S向PC发送15个字节的数据。
具体程序如下:
#include
#defineucharunsignedchar
ucharTxdnum[15]={0,1,2,3,4,5,6,7,8,9,0xa0,0xa1,0xa2,0xa3,0xa4}
uchartimercount,Rxdcount,Numcount;
bitTxdflag;
Voidserial_Txd(uchar*p)
{
uchari;
for(i=0;i<15;i++)
{
SBUF=*p++;
While(!
TI);
TI=0;
}
}
Voidserial_Int()interrupt4
{
uchartemp;
ES=0;
If(RI)
{
Temp=SBUF;
RI=0;
If(temp==0x55)
{
while(!
RI);
temp=SBUF;
RI=0;
if(temp==0xaa)
{
while(!
RI);
temp=SBUF;
RI=0;
if(temp==0x01)
{
P2=~temp;
TR0=1;
}
}
else
ES=1;
}
else
ES=1;
}
}
VoidT0_Interrupt()interrupt1
{
TL0=0x00;
TH0=0xdc;
if(--timercount==0)
{
Timercount==200;
Txdflag=1;
}
}
Voidmain()
{
Txdflag=0;
Rxdcount=0;
Numcount=0;
Timercount=100;
TMOD=0x21;
TL0=0x00;
TH0=0xdc;
TL1=0xfd;
TH1=0xfd;
SCON=0X50;
TR1=1;
ET0=1;
ES=1;
EA=1;
while
(1)
{
if(Txdflag==1)
{
Txdflag=0;
Serial_Txd(Txdnum);
}
}
}
4.4程序运行后的结果
单片机与PC相连,同时运行程序,当PC向单片机传送数据后,如果数据相符,单片机开始每隔2S向PC传送数据,在PC上观察到以下结果:
00010203040506070809A0A1A2A3A400010203040506070809A0A1A2A3A400010203040506070809A0A1A2A3A400010203040506070809A0A1A2A3A4
总结
在前后三个星期的时间里,我把时间都投入到了通信系统综合训练上面,时间有点仓促,题目也有一定的难度,但最后在老师和同学们的共同帮助下,终于完成了。
回顾此次课设,自己有不小的收获。
首先,这次课设我们都要用到KeiluVision3编译软件,这个软件在课程设计之前几乎完全没有接触过。
而这个课设要用到很多新的功能,运用起来有一定的困难,不过最后通过查询一些资料,能较好地运用该软件来编译程序。
主要的困难在后面的程序设计部分。
为了完成此次课设,我再次翻阅了所学的理论知识,对题目有了一定的理解后,开始相关的设计。
由于本次课程设计对硬件的连接没有做太多硬性要求,所以重心还是在于程序的编写上。
在程序运行无误后可以进行在单片机板上的调试,另外需要的是串口调试助手。
首先,对于LCD1602时钟芯片,其初始化设置,均需要熟悉相应的引脚功能和运用相应的函数,学会运用这些函数耗费了我不少时间。
分别写完成LCD1602的相关函数后,我开始了串口编程的工作。
单片机与我们以前学习的微机原理很多知识点相仿,可以类推。
由于学完微机原理有一段时间了,因此还需要对串口知识复习一下。
编写好子函数后,我开始了主函数的编写,由于所用的子函数很多,因此在调用时要非常小心,前几次由于疏忽,以至于编译时出了几次错误。
编译无误后,我将程序复制到KeiluVision3编译软件中,由于个别语法不正确,改了几次后才得到正确结果。
通过此次课设,我对单片机的C语言编程有了进一步的掌握,对KeiluVision3编译软件也有了进一步的掌握。
此次训练提高了动手操作的能力,理论知识也得到巩固。
课程设计做完后,也发现了自己的一些不足,平时很少自己动手设计程序,以至于用的时候有很多困难,在以后的时间里,我会多设计一些程序,提高自己的动手实践能力。
参考文献
[1]张道德.单片机接口技术[M].北京:
中国水利水电出版社,2007:
68-103
[2]张培仁.MCS-51单片机原理与应用[M].北京:
清华大学出版社,2004:
112
[3]周国运.单片机原理及应用(C语言版)[M].北京:
中国水利水电出版社,2001:
128
[4]喻宗泉.单片机原理与应用技术[M].西安:
西安电子科技大学出版社,2006:
123-126
[5]冯育长.单片机系统设计与实例分析[M].西安:
西安电子科技大学出版社,1999:
87
[6]陈涛.单片机应用及C51程序设计[M].北京:
机械工业出版社,2008:
113
[7]黄智伟.全国大学生电子设计竞赛系统设计[M].北京:
北京航空航天大学出版社,2001:
128.
致谢
通过三周的的努力,通信系统综合训练终于完成了,这意味着这一阶段艰苦的热烈的付出即将告一段落。
在整个课程设计中,我在学习上和思想上都受益非浅,这除了自身的努力外,与指导的老师、同学和朋友的关心、支持和鼓励是分不开的。
在课程设计过程中,彭老师倾注了大量的心血,一遍又一遍地指出每次课程设计过程中的具体问题,严格把关,循循善诱,在此我表示衷心感谢。
同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。
在这段时间里我从零开始学习了51系列单片机的基本原理和KeiluVision3编译软件的基本用法,最重要的是学习了程序设计语言C51并运用该语言编写完成51单片机与PC的串行通信。
理论应用到实际是需要一个过程,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 PC 串行 异步 通信 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)