单片机课程设计基于232协议的串口通信技术.docx
《单片机课程设计基于232协议的串口通信技术.docx》由会员分享,可在线阅读,更多相关《单片机课程设计基于232协议的串口通信技术.docx(25页珍藏版)》请在冰豆网上搜索。
单片机课程设计基于232协议的串口通信技术
目录
0.引言2
1.总体方案设计3
2.硬件电路的设计3
2.1单片机介绍3
2.2时钟控制电路4
2.3电源电路4
2.4复位电路5
2.5电平转换电路设计6
2.6数码管显示电路7
2.7串行口介绍8
2.7.1串行口基本结构8
2.7.2串行通讯的方式8
2.8整体电路设计10
3软件设计10
3.1 串行通信的实现10
3.2 流程框图11
4.联合调试12
4.1硬件调试12
4.2软件调试12
5.实训心得12
参考文献14
附录I原理图15
附录II源程序15
摘要:
随着计算机技术特别是单片机技术的发展,单片机的应用领域越来越广泛,单片机在工业控制、数据采集以及仪器仪表自动化等许多领域都起着十分重要的作用。
但在实际应用中,在要求响应速度快、实时性强、控制量多的应用场合,单个单片机往往难以胜任,这时使用多个单片机接合PC机组成分布式系统是一个比较好的解决方案。
这样,单片机的数据通信技术就变得十分重要。
串口通信是指数据一位一位地按顺序传送。
串口通信通过串口来实现。
在全双工的串口通信中,仅需要一根发送线和一根接收线,串口通信可大大节省传送线路的成本,但数据传送速度慢。
因此,串口通信适合于远距离通信。
关键字:
单片机、PC机、串口、通信
0.引言
在各种单片机应用系统的设计中,如智能仪器仪表、各类手持设备、GPS接收器等,常常遇到计算机与外界的信息交换,即通讯。
通信的基本方式可分为并行通信与串行通信两种。
RS-232是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。
RS-422由RS-232发展而来,它是为弥补RS-232之不足而提出的。
为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。
RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。
因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂家独家使用。
如录像机厂家中的Sony与松下对录像机的RS-422控制协议是有差异的,视频服务器上的控制协议则更多了,如Louth、Odetis协议是公开的,而ProLINK则是基于Profile上的。
目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台,为便于查询和保存数据,还需要数据库的支持,如在测控系统中使用SQLServer数据库。
1.总体方案设计
PC机与单片机之间可以由RS-232C、接口相连,在PC机系统内部装有异步通信适配器,利用它可以实现异步串行通信。
该适配器的核心元件是可编程的Intel8250芯片,它使PC机有能力与其他具有标准的RS-232C接口的计算机或设备进行通信。
而51单片机本身具有一个全双工的串行口,因此只要配以电平换换的驱动电路、隔离电路就可以组成一个简单的通信接口。
同样,PC机和单片机之间的通信也分为双机通行与多机通信。
数据通信的硬件上采用3线制,将单片机和PC串口的3个引脚(TXD、RXD、GND)分别连在一起,即将PC机和单片机的发送数据线TXD与接收数据线RXD交叉连接,两者的地线GND直接相连,而其他信号线如握手信号线均不用,采用软件握手的方式。
这样既可以实现预定的任务又可以简化电路设计。
PC机和单片机最简单的连接时零调制三线经济系。
这是进行全双工通信所必需的最少线路,因为51单片机输入、输出电平为TTL电平,但由于单片机的TTL逻辑电平和RS-232的电气特性完全不同,RS-232的逻辑0电平规定为+5~+15V之间,逻辑1电平为-5~-15V之间,因此在将PC机和单片机的TXD和RXD交叉连接时必须进行电平转换,这里我选用的是MAX232电平转换芯片。
其原理框图为图1
RXD
TXD
GND
RS-232C
TINTOUT
ROUTRIN
GND
TXD
RVD
GND
图1串口通信原理图
2.硬件电路的设计
2.1单片机介绍
标准型89系列单片机是与MCS-51系列单片机兼容的。
在内部含有4KB或8KB可重复编程的Flash存储器,可进行1000次擦写操作。
全静态工作为0-33MHz,有3级程序存储器加密锁定,内含有128-256字节的RAM、32条可编程的I/O端口、2-3个16位定时器/计数器,6-8级中断,此外有通用串行接口、低电压空闲模式及掉电模式。
AT89C51相当于将8051中的4KBROM换成相应数量的Flash存储器,其余结构、供电电压、引脚数量及封装均相同,使用时可直接替换。
AT89C51在内部采用40条引脚的双列直插式封装,引脚排列如图2所示:
图2AT89C51芯片引脚
2.2时钟控制电路
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
AT89C51时钟产生方式通常有两种:
一是内部时钟方式,二是外部时钟方式。
由于外部时钟方式是把外部已有的时钟信号引入到单片机内,此种方式常用于多片89C51单片机同时工作,以便于单片机的同步。
并且高低脉冲电平持续时间应不短于20ns,否则工作不稳定。
因此,我们不选用这种时钟方式。
在本次设计当中我们选用的是:
内部时钟方式,利用单片机的引脚18(XTAL2)和引脚19(XTAL1)外接晶振及电容,与片内可以构成振荡器的反向放大器一起组成工作主频电路,如图3.1所示。
AT89C51的工作频率取决于晶振Y1的频率。
采用晶振的目的是可以提高工作频率的稳定性。
图4—1中的C2、C3的作用是稳定频率和快速起振,电容值一般在5~30pF
图3时钟电路图
典型值为30pF,我们取11.0592MHz。
在设计电路板的时候应使C2、C3和Y1尽量靠近单片机芯片,以减少分布电容所引起对振荡电路的影响。
2.3电源电路
在本次设计当中我们采用双电源供电的方式。
一种是电源电路采用9~12V电压经过稳压三极管LM7805和其外围电路组成稳定5V电压的输出。
二是采用具有USB接口供电。
在我们身边非常容易找到USB接口的充电器。
使电压稳定。
图4电源稳压部分
由于我们在大一的时候焊接凌阳61板,对61板有初步的了解,知道其电源部分的稳压设计较好输出稳定,故我们采用它的电路形式,只需将其中的稳压管换为LM7805即可。
而USB接口供电不需要设计它的输出是一个比较稳定的5V电压,我们只需购买一个USB头和一根USB线即可。
其电路如图3—5所示.具有电源指示灯。
2.4复位电路
当在AT89C51单片机的REST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。
在实际的应用当中复位操作有两种形式:
一种是上电复位,另一种是按键复位电路。
上电复位电路如图5—1所示。
求接通电源后,单片机自动实现复位操作,上电的瞬间REST引脚获得高电平,随着电容的充电,REST引脚的高电平将逐渐下降。
REST引脚的高电平只要维持足够的时间(2个机器周期),单片机就可以进行复位操作。
按键复位电路如下图5—2所示。
按键复位电路可以随时通过按键来发出复位信号。
该电路除具有上电复位功能外,若要复位,只需按图中的K键,此时电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。
这对系统的可控性是很有帮助的。
图5—1上电复位电路图5—2按键复位电路图5—3复位电路
通过比较这两种方式的优缺点我们最后选择上电与按键均有效的复位电路的形式。
其电路结构如上图5—3所示。
其中电容电阻的大小是根据工程经验计算得到的,它们的取值大小随时钟频率的不同而变化,要根据具体情况取得合适的值,否则应用现场干扰极为严重,影响正常的复位工作。
2.5电平转换电路设计
和其他的单片机器件一样,作为单片机的标准外围电路,串口的电平转换也有专用的芯片,但也可以使用三极管自行调整电平匹配。
本次设计我主要采用专用芯片进行电平转换的方法。
目前较为广泛的是使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。
MAX232芯片可完成TTL和RS-232C的双向电平转换。
在这里我采用的芯片是MAX232。
如图6
图6电平转换芯片MAX232
在电气特性上RS-232C采用负逻辑,要求高、低两信号间有较大的幅度,标准规定为:
逻辑‘1’:
-5~-15V,逻辑‘0’:
+5~+15V。
而单片机的信号电平与TTL电平兼容,逻辑1大于+2.4V,逻辑0为0.4V以下。
很显然,RS-232C信号电平与TTL电平不匹配,为了实现两者的连接,必须进行电平转换。
MAX232C为单一+5V供电,内置自升压电平转换电路,一个芯片能同时完成发送转换和接收转换的双重功能。
MAX232的引脚主要为5个部分:
(1)外接电容:
有5个外接电容、进行电压匹配和电源去耦。
(2)TTL的输入:
电路TTL电平的输入引脚——11和10引脚,连接单片机的TXD输出端口。
(3)TTL的输出:
电路TTL电平的输出引脚——12和9引脚,连接单片机的RXD输出端口。
(4)RS-232的输入:
两路RS-232电平的输入引脚——13和8引脚,连接RS-232的TXD的输出端口。
(5)RS-232的输出:
两路RS-232电平的输出引脚——14和7引脚,连接RS-232的RXD的输出端口。
通过MAX232的TTL和RS-232的输入/输出端口,自动地调节了单片机串口的TTL电平信号和RS-232的串行通信信号的电平匹配。
电平转换芯片与单片机的连接电路如下:
地址分配和连接:
只列出和系统相关的、关键部分的单片机与各个模块管脚的连接和相关的地址分配。
MAX232的11引脚:
MAX232的TTL电平输入引脚,连接单片机的TXD,TTL串口输入信号。
MAX232的12引脚:
MAX232的TTL电平输出引脚,连接单片机的RXD、TTL串口输入信号。
MAX232的14引脚:
MAX232的RS-232电平输出引脚,连接RS-232的RXD,RS-232的串口输入信号。
MAX232的13引脚:
MAX232的RS-232电平输入引脚,连接RS-232的TXD,RS-232的串口输出信号。
MAX232和单片机串口连接的电路如图7。
图7MAX232和单片机串口连接电路图
2.6数码管显示电路
2.7串行口介绍
2.7.1串行口基本结构
单片机的串行口的功能是与外部器件进行串行数据通信。
串行口电路也称为通用异步收发器(UART)。
从原理上说,一个UART包括发送器电路、接收器电路和控制电路。
8051单片机的UART已集成在其中,构成一个全双工串口,全双工通信是指同时可以作双向通信,两个即可同时发送、接收,又可同时接收、发送。
其示意图如图3所示。
这个口即可以实现串行异步通信,也可以作为同步移位寄存器使用。
发送
接收
发送
接收
全双工通信
图3全双工通信示意图
8051的串行口通过引脚RXD(P3.0串行口数据接收端)和引脚TXD(P3.1串行口数据发送端)与外部设备进行串行通信。
其中共有两个串口双缓冲寄存器(SBUF),一个是发送寄存器,一个是接收寄存器,以便8051能以全双工方式进行通信。
串行发送时,从片内总线向发送SBUF写入数据;串行接收时,从接收SBUF向片内总线读出数据。
它们都是可寻址的寄存器,但因为发送与接收不能同时进行,所以给这两个寄存器赋一同一地址99H。
在接收方式下,串行数据通过引脚RXD进入,由于在接收寄存器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,以避免在数据接收过程中出现帧重叠错误,即在下一帧数据来时,前一帧数据还没有走。
在发送方式下口,串行数据通过引脚TXD发出。
与接收数据情况不同,发送数据时,由于CPU是主动的,不会发生帧重叠错误,因此发送电路就不需要双缓冲结构,这样可以提高数据发送速度
2.7.2串行通讯的方式
异步通讯:
它用一个起始位表示字符的开始,用停止位表示字符的结束。
同步通讯:
在同步通讯中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。
由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
通讯方向:
在串行通讯中,把通讯接口只能发送或接收的单向传送方法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。
在双工传送方式中又分为半双工传送和全双工传送。
半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。
串行口的工作方式:
8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
方式0:
为移位寄存器输入/输出方式。
可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。
8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
输出串行数据从RXD引脚输出,TXD引脚输出移位脉冲。
CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。
发送完一帧数据后,发送中断标志TI由硬件置位。
输入当串行口以方式0接收时,先置位允许接收控制位REN。
此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。
当(RI)=0和(REN)=1同时满足时,开始接收。
当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。
方式1:
为波特率可变的10位异步通讯接口方式。
发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
输出当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。
串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。
输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。
只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。
所以在方式1接收时,应先用软件清零RI和SM2标志。
方式2:
为固定波特率的11位UART方式。
它比方式1增加了一位可程控为1或0的第9位数据。
输出发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。
它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。
当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。
发送一帧信息后,置位中断标志TI。
输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。
在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。
且不置位RI。
再过一位时间后,不管上述条件是否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
方式3:
为波特率可变的11位UART方式。
除波特率外,其余与方式2相同。
波特率选择:
如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。
在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
2.8整体电路设计
PC机和单片机最简单的连接时零调制三线经济系。
这是进行全双工通信所必需的最少线路,因为51单片机输入、输出电平为TTL电平,但由于单片机的TTL逻辑电平和RS-232的电气特性完全不同,RS-232的逻辑0电平规定为+5~+15V之间,逻辑1电平为-5~-15V之间,因此在将PC机和单片机的TXD和RXD交叉连接时必须进行电平转换,这里我选用的是MAX232电平转换芯片。
将PC机键盘的输入发送给单片机,单片机收到PC机发来的数据后,会送统一数据给PC机。
并在屏幕中显示出来。
只要屏幕中显示出来的字符与所键入的字符相同,说明二者之间的通信正常。
总串行通信图为图6所示
图6串行通信电路图
3软件设计
将PC机键盘的输入发送给单片机,单片机收到PC机发来的数据后,会送统一数据给PC机。
并在屏幕中显示出来。
只要屏幕中显示出来的字符与所键入的字符相同,说明二者之间的通信正常。
3.1 串行通信的实现
(1)串行口工作于方式3;用定时器1产生9600bit/s的波特率,工作于方式2。
(3)通信协议:
PC机首先发送数据,单片机接收到之后返回一个相同数据到PC机表示通信正常。
(4)通信过程使用第九位发送奇偶校验位。
(5)从机接收到一个数据后,立即进行奇偶校验,若数据没有错误,则返回00H,否则返回FFH。
(6)主机发送一个数据后,等待从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。
3.2 流程框图
(1)51单片机通过中断方式接收PC机发送数据,并回送。
其程序流程图,如图7所示:
图7发送端程序流程图
4.联合调试
4.1硬件调试
在制版过程中,出现以下几点问题:
1.电源指示等不亮
分析:
一、是否有漏焊,虚焊原因造成;
二、LED灯接反,导致不亮或LED灯烧坏;
三、电源没有供电;
调试:
首先,对焊接点进行检查,再将LED用万用表测量正负极是否接反,这几项通过检查都没问题,因此我判断是USB供电源有问题,用万用表测量是USB的供电管脚在PCB上VCC与GND接反,导致供电不上LED灯不亮。
2.数码管显示不亮
分析:
一、单片机是否工作,软件设计是否正确;
二、三极管驱动是否按接正确,时候正常驱动;
三、P0口与数码管相连接,是否接有上拉电阻;
调试:
首先我对单片机是否工作进行检查,我通过串口将HEX文件烧入进去,发现能正常烧入,证明单片机工作正常。
然后,我检查三极管的是三个管脚是否接错,发现我E级和C级接反了,所以我们将其更改过来,单数码管还是没亮。
最后,我考虑上拉电阻的问题将P0口接了一个10K的排阻作为上拉电阻,这样使得数码管亮了。
4.2软件调试
1.PC机上显示的字符不是发送的数
分析:
我没有掌握好PC机和单片机的数值关系,没有进行ASCLL码与十六进制之间的转换。
调试:
在软件程序设计中,将单片机发送的数据都将其转换为ASCLL码值再发送给PC机,同理,将PC机传送来的数据都进制十六进制转换再经过查表送给数码管显示。
5.实训心得
单片机与PC机串行通信系统的设计告一段落,该系统的开发是一项非常有价值的项目。
本论文以单片机系统设计方法作为全文的组织线索,开发一个单片机系统是需要按照规范的系统设计方法严谨的进行的。
为了开发通信系统,选择8051单片机,必须掌握单片机控制系统硬件电路的设计,如复位电路和时钟电路等的设计,另外对汇编语言的灵活运用是少不了的,如单片机中断、定时器和串行口的汇编语言编程,而对单片机的串口知识深刻的理解下,确定以定时器T1的工作方式2作为波特率发生器是一个关键的,计算机方面,首先是RS-232C接口,RS-232C接口是最为常用的、应用最为广泛的串行接口标准,大量的集成设备、工业产品都提供了RS-232C接口,因此单片机应用系统的设计中,RS-232C通信设计是十分重要的。
51兼容单片机通常都自带一个标准UART端口,这个端口用过电平转换电路就可以构成一个标准的RS-232C接口,并且与计算机的接口相匹配,运用RS-232C连接的最简单形式:
3线制,将单片机与PC机进行硬件连接。
其中由于单片机系统使用的是TTL电平,单片机中的串口输出的信号也是如此,但是串行通信中使用的RS-232C通信协议,二者的电平并不相同,在和单片机进行通信时,还需要有一定的外围电路的配合,使得单片机的通信电平和标准的串行通信协议相匹配。
这一点用MAX232芯片进行处理。
以上所形成的通信系统的原理方案,便是本系统的硬件电路的设计依据。
接着到了系统软件的设计部分,一个完整的单片机系统只有硬件还不能工作,必须有软件来控制整个系统的运行,PC机部分的串口通信软件开发,采用的是VB的MSComm控件来实现串行通信,这一部分,我编制出了利用文本框接受和发送数据的界面,其中对如何接受单片机发送的16进制代码和向单片机发送数据,是我做的不足的地方,采用的编程方法是正确的,但只形成了基本框架,不足的是不能很好的对收发数据进行代码处理,而这一部分,我认为应该单独作为一个课题进行研究。
开发出强大的串口通信软件,鉴于VB是一种弱字符语言,可以考虑用VC++等语言来开发,目的是使传输的数据不受任何限制,使通信系统更容易实现。
而单片机的汇编程序方面,我一方面编写出了单片机自动发送和按键发送数据的程序,另一方面编写出了单片机查询接受数据和中断接受数据的程序,并在AT89C51单片机试验开发板上进行了测试,都达到了很好的效果,这也是让我满意的一部分。
最后,在硬软件设计完毕后,最重要的一步是对系统的调试,而对于可能出现的问题,需要从软件和硬件两个方面进行考虑,这一阶段需要大量的测试程序对系统等各个部分进行分别的测试,才能找到问题的所在,并进行针对性地修改和完善,而最终目的是使软件和硬件能够很好的配合,完成预定的功能,再在实际的环境中对开发出来的系统进行考验,并随时对产生的问题进行处理,我认为这一步很费工夫,也存在着许多困难,但开发出成功的单片机系统,这一步是必经阶段,只有在这一阶段,多摸索,多探索,才能使自己的能力有所突破与提高。
随着我一步一步做我的论文和设计,我才发现自己能力的不足与知识的贫乏,这是需要在后续的学习中,持续积累与拼搏的。
参考文献
[1]高海生,单片机应用技术大全,1996
[2]张毅刚,刘杰.MCS—51单片机原理及应用.哈尔滨:
哈尔滨工业大学出版社,2004.6
[3]何立民.单片机应用技术选编.北京:
北京航天航空大学出版,2002.5
[4]张军,梅丽凤.单片机原理接口技术.北京交通大学出版社,2006.5
[5]张婧武,周灵彬.单片机系统的PROTEUS设计与仿真.北京:
电工出版社,2007.4
附录
原理图
附录
源程序
ORG0000H
AJMPSTART
ORG0023H
LJMPAGAIN
ORG0030H
START:
MOVDPTR,#TAB
MOVSCON,#0F0H;设定串行方式;9位异步,允许接收,工作在