资源描述:
《pic单片机与c8051f020单片机的串行通讯》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第15卷第4期广西工学院学报Vol115No142004年12月JOURNALOFGUANGXIUNIVERSITYOFTECHNOLOGYDec12004文章编号100426410(2004)0420040204PIC单片机与C8051F020单片机的串行通讯陈文辉,蔡启仲,郭毅锋,周明(广西工学院电子信息与控制工程系,广西柳州545006)摘要:在仪器仪表和测控系统中,PIC单片机与以MCS51单片机为内核的单片机之间进行异步串行通讯时,由于各系统的晶振和计算波特率的方法都不一样,使得串行通讯过程中常由于存在波特率误差而使通讯失败。为了提高系统中串行通讯的准确性,提出重新调整系统
2、波特率的软件插值方法,以降低波特率的误差,使各系统通讯波特率基本一致,保证了通讯的准确性,并给出了实际应用的例子。关键词:PIC单片机;C8051F020单片机;串行通讯;波特率误差;插值中图分类号:TP202文献标识码:A0前言串行通讯在当今的仪器仪表和测控系统中使用相当广泛,在构成的分布式系统中进行较远距离的通讯时,就要使用串行通讯,它已成为单片机开发应用中不可缺少的部分。随着单片机技术的发展,市场上出现了由不同厂商生产的各种新型单片机,这些单片机的功能特点各不相同。在设计分布式系统时,根据各子系统的功能要求,应选择不同功能特点的单片机;PIC单片机是美国生产的一款高性价比的单片
3、机,独特的内部结构,丰富的外部设备,使PIC具有良好的抗干扰性能;精简的指令系统(RISC),使PIC在仪器仪表和测控系统中也得到较广泛的应用。然而,当今工业控制领域仍以MCS51单片机或是以其为内核的单片机占主导地位,于是出现了PIC单片机与MCS51以及以其为内核的单片机之间进行串行通讯的实际应用;两个系统根据实际要求,在选择晶体振荡器时也各不一样,因此在计算系统异步串行通讯的波特率时,由于存在不同的波特率误差,往往导致通讯失败。下面以PIC单片机与C8051F020单片机异步串行通讯为例,应用软件插值,调整串口波特率,并降低波特率误差,以保证通讯的准确性。1PIC单片机串行通讯
4、原理及波特率设置PIC单片机串行口采用异步通讯方式,即以字为单位来传送数据的,每个字数据由起始位,数据位,停止位组成,称为一帧;起始位为“0”(低电平),用来通知接收端新的数据开始传送,同时还作为接收数据的同步时钟,以保证以后数据的接收正确。数据位有8位数据和9位数据两种,根据两个系统的要求进行相应设置;[1]停止位为“1”(高电平),用来通知接收端数据字传送结束,如图1.图1异步通讯的格式收稿日期:2004209223基金项目:广西工学院青年科学基金(030214).作者简介:陈文辉(19752),男,汉族,湖南益阳人,广西工学院电子信息与控制工程系试验师。第4期陈文辉等:PIC单
5、片机与C8051F020单片机的串行通讯41由于PIC单片机串行口在通讯中不支持奇偶校验,因此PIC单片机与以MCS51位内核的C8051F020单片机进行通讯时,C8051F020单片机在设置所传送的数据字时不能带有奇偶校验位。PIC单片机串行口在异步通讯方式下,串行口的接收器在采样RC7öRX端口的数据时,以16倍的波特率时钟进行传输,并在第7、8、9个时钟处采样接收端口的数据,按照3中取2的原则,当这3个数据中至少有2个数据相同则被确认,反之则认为是误码被舍弃,这样可提高通讯的可靠性。图2为期望波特率接收时的采样时序图,图3为实际波特率接收时的采样时序图。由图3可看出当实际波特
6、率的误差较大时,数据位采样时钟逐渐偏离接收端口上数据位的中央位置,并在最后一位偏离达到最大,这时所采样的结果与接收端口的实际数据不符而形成误码。图2期望波特率接收时的采样时序图图3实际波特率接收时的采样时序图PIC单片机串行口带有一个8位的波特率发生器BRG,用SPBRG寄存器控制一个独立的8位定时器,设置SPBRG的值便可设置串行口的波特率。在异步通讯中设置波特率时,有高速(BRGH=1)和低速(BRGH=0)两种方式,不同的方式其波特率的计算公式不一样。低速方式时,波特率=foscö64(X+1);高速[2]方式时:波特率=foscö16(X+1),其中X为SPBRG寄存器的初值
7、;在多数情况下采用高速方式设置串行口波特率时可以减少误差,即使系统所需的是低波特率,其计算公式:实际波特率-期望波特率波特率误差=×100%(1)期望波特率现在设PIC单片机系统晶振为4MHz,波特率为9600bps,通讯数据格式为一帧数据10位(起始位,数据位8位,停止位)。应用式(1)计算,在低速方式时:X1≈6,这时计算波特率误差约为:26199%;在高速方式下,X2≈25,此时的波特率误差约为:0116%.因此在低速方式下,波特率误差较大,这时串口