新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机串行口的使用与“蓝牙”电测系统

单片机串行口的使用与“蓝牙”电测系统

作者:时间:2011-02-21来源:网络收藏
随着数字化的进一步普及,实验设备数字化也势在必行。本期教程以实验、示教用无线电测系统为例,讲解的串行口的使用及有关设置。

一、系统构成与功能

  本系统由测量发射和接收显示两部分构成。测量发射部分完成对模拟电量的采样和模数转换,并将转换后的数据通过串行口送出,调制无线发射电路将其发射出去。接收部分将无线信息接收下来,经放大整形后将串行数据信号送到接收部分的串行口,按约定的格式将数据信息成功接收后,经显示代码转换送LED显示出来,其测量和显示部分是分离的。

二、电量测量及数据发送原理

  测量发送电原理见图1。被测模拟量自IC1(AT89C2051)的P1.1输入。系统完成测量后将数据存于累加器A中,然后将A中的数据送串行口,通过P3.1(TXD)输出,经过调制无线发射电路,将数据信息发射出去。

  测量过程中的模数转换,我们在上一期已经讲过。无线发射电路及调制原理,我们可以从其他书上或以其他方式学到,这里不再赘述。以下着重讲一下单片机串行口的设置和串行口数据输出格式。

  AT89C51和AT89C2051内部皆设有性能优良的可编程全双工串行通讯接口,简称串行口。利用此串行口发送和接收数据是十分方便的。用于发送和接收数据的寄存器有两个,分别是发送SBUF和接收SBUF。这两个寄存器使用同一个地址99H,但收发并不会冲突,因为收发指令是可以将其区别的。当CPU执行MOV SBUF,A时,累加器A中的数据便写入发送SBUF中;而当执行 MOV A,SBUF时,CPU就将接收SBUF中的数据读入累加器A中。当将需要发送的数据写入SBUF后,串行口发送控制器便自动按一定的格式和波特率将数据从P3.1串行输出。最常用的串行输出格式是11位格式。这种格式规定,串行口输出的完整的数据帧由11位二进制数据构成。帧结构示意图见图2(a)。开始先发送1位数据 “0”作为发送数据的起始符,然后发送8位被发送字节的各个数据位,低位在前。也就是先发送D0,再依次发送D1、D2、D3、D4、D5、D6、D7,然后发送一个可以定义的特殊位,比如奇偶校验位“P”或有其他意义的数据位。这个特殊位是整个数据帧的第10位。第10位发送完毕,接着输出1位数据“1”,作为数据帧的结束符。若以11位串行格式发送值为#87H的数据,P3.1输出的方波见图2(b)。此方波控制VT1的导通与截止,将数据调制到发射电路上。为了大家制作方便,本例将发射数据信息的红外线发射电路接在串行口上,使红外发光管VD1受VT1的调制。这样,P3.1输出的数据信息就被调制到红外线载波上了。VT1集电极波形见图2 (c),调制后的红外光载波序列见图2(d)。

  串行口的工作方式和工作状态是可以通过程序来定义的。决定串行口输出格式及工作状态的寄存器是串行口控制寄存器SCON,其地址是98H。SCON各位定义见附表。

附表

D7 D6 D5 D4 D3 D2 D1 D0

SM0 SM1 SM2 REN TB8 RB8 TI RI

  SM0、SM1是串行口工作模式选择位,对SM0、SM1进行定义,可决定串行口的模式0(00)、模式1 (01)、模式2(10)、模式3(11)等4种工作模式。由于本例采用的是11位串行格式,选择串行口工作于模式2,所以将SM0置“1”、 SM1置“0”即可。程序清单中0000H处的MOV SCON,#80H,就完成了上述设置。在串行口工作于模式2的简单通讯实验中,SM2、TB8和RB8可不必关心。REN和RI分别是接收允许位和接收中断标志位,其功用将在接收部分加以说明。TI为发送中断标志。当发送控制器发送完一帧数据后,自动将TI置“1”。程序发现TI置“1”后,确认数据已经发完,将TI清“0”后,去执行其他程序。见程序清单000AH处。而0005H至 0007H处暂放置3条空操作指令,大家可将调用测量子程序指令放于此,这样,测量发射部分的程序就完整了。从程序中不难看出,0003H处MOV A,#87H,使累加器A中的数据为#87H。0008H处MOV SBUF,A是将A中的数据送入串行口发送寄存器。这样,数据#87H就通过P3.1以11位格式输出,推动VT1,调制VD1将载有数据的红外线载波串发射出去。只是程序清单中省去了真正的测量程序,而采用模拟测量的方式来发送数据。上述程序使串行口的波特率为93.75Kb/s,也就是说每秒可发送93750位二进制数据。此速率是较高的。以这样的速率,调制红外发射管进行数据发送是可靠的,而调制一般的简易高频振荡电路显得太高。所以,若要利用简易高频振荡电路来发送数据,采用P3.2或其他口线以其他的编码规则进行低速发送才可靠。而与“蓝牙”芯片联接,可另通过P3口的其他口线,以I2C总线协议进行通讯。

三、数据的接收及显示原理

  接收显示部分电原理见图3(这里只给出红外线接收的简单电路)。

  红外线被VD1接收,经VT5放大整形后将信号输入至IC2(AT89C51)的P3.0 (RXD)。当未收到红外线信息时,VD1呈高阻态,VT5截止,P3.0呈高电位。当有红外线被VD1接收,VD1呈低阻态,VT5导通,P3.0被拉至低电位。当VD1接收到值为#87H的完整数据帧后,VT5的集电极输出波形见图2(b)。由于IC2串行口具备自动接收的功能,所以,当程序允许串行口接收时,接收控制器就会不间断检测P3.0 的电位,发现P3.0低跳后,立刻按设定的接收格式以一定的波特率进行接收。当接收完毕时,数据存于接收SUBF之中,然后置中断标志,将SCON的RI位置“1”,而当程序发现RI置“1”后,即确认已接收完毕,清掉标志位并关闭接收控制器,将接收寄存器SUBF中的数据取出,调用数据处理和扫描显示子程序,将数据送LED显示出来,这便完成了测量数据的接收和显示任务。由于发送数据采用11位格式,所以,接收也要采用同一种格式,并采用相同的波特率。与发送部分相同的是,在接收程序清单0006H处也安放了一条MOV SCON,#80H指令,使SCON的SM0位置“1”,其他各位皆为“0”,这就使接收端CPUIC2的串行口工作于模式2,也就是11位格式。由于没有进行其他有关波特率的设置,接收部分的串行口的接收速率也是93.75Kb/s。SCON的第5位REN为接收允许位,由于在设置串行口工作模式的指令中已将此位写“0”,所以串行口接收被禁止。而程序清单中0009H处SETB REN,使REN位置“1”,接收被允许,这就使串行口呈自动接收状态,对P3.0监测并自动完成接收。当接收完毕并清除接收中断标志RI后,程序应暂时关闭接收,去进行数据处理和显示的操作。程序清单中0012H处的CLR REN指令,将REN清“0”,串行口的接收功能被禁止。

  当接收被允许时,串行口的接收控制器就能独立工作。程序只关注接收中断标志位即可。程序清单000BH处的JBC RI,0010和AJMP 000B指令,就使系统实现了接收等待和接收确认后,再转去处理数据的功能。在接收程序的0014H处留有3个空操作字节,大家可以在这里安放一条数据处理和扫描显示的子程序调用指令。清单中给出的程序,也能显示出接收的数据。如果正确接收到数据#87H,直接将其送P0口,然后将P2口所有口线置高电位,VT1 至VT4就会全部导通。这样,未经译码的数据#87H就会将LED中的相应字段点亮。

  由于#87H,正是数字“7.”的显示代码,所以,运行上述程序,如正确接收到 #87H时,LED1至LED4就会显示出“7.7.7.7.”字样。采用红外线进行无线发射和接收,便于进行硬件的免调试实验,从而方便大家进行串行口的设置及发送接收数据等方面的编程练习。

  以上,通过简单的无线电测系统,阐述了单片机串行口设置和利用串行口进行通讯的简单方法。实际上,为了实现通讯过程中数据传送的可靠性和准确性,往往需要编制较复杂的程序作保障。而单片机内部也还有一些硬件资源可供开发者使用,如奇偶校验、波特率的进一步设置等等,本文不作详述。

  在实际应用的产品中,无线电测系统的模数转换要采用专门的高精度转换芯片,而无线发射和接收,不管是红外线的还是电磁波的,性能也是比较优良的。如果采用一般的高频振荡电路发射(如图1中给出的高频振荡电路),采用一般的无线电磁波接收,其通讯波特率需低一些才更可靠。这时,我们往往不利用串行口,而是采用一般I/O线按另外一种通讯协议和编码方式来对其进行调制。其原理可参考《无线电》2000年第12期《基于电网的载波数据传送》一文中的有关叙述。而我们研制的无线电测系统,正在进行与“蓝牙”第一代芯片“BlueCore TM01”的联接试验,并正在进行应用“蓝牙”第二代芯片“BlueCoreTM02”和第三代芯片“BlueCore TM03”的设计。掌握了一定的单片机控制技术,尽可能地运用最新的芯片,才能开发出领先的产品。广大电子爱好者,也应该注意这一点。而大家在进行红外线发射数据的试验时,可将图1中虚线框出的部分去掉,整个电路就十分简单了。

四、程序清单

1. 模拟测量发射部分程序清单:

地址 机器码 指令

0000 759880 MOV SCON,#80H ;

0003 7487 MOV A,#87H ;

0005 00 NOP ;

0006 00 NOP ;

0007 00 NOP ;

0008 F599 MOV SBUF, A ;

000A 109902 JBC TI,000F ;

000D 80FB AJMP 000A ;

000F 20B5FD JB P3.5,000F ;

0012 80EF AJMP 0003 ;

2. 模拟接收显示部分程序清单:

地址 机器码 指令

0000 75A000 MOV P2, #00H ;

0003 758000 MOV P0,#00H ;

0006 759880 MOV SCON,#80H ;

0009 D29C SETB REN ;

000B 109802 JBC RI,0010 ;

000E 80FB AJMP 000B ;

0010 E599 MOV A, SBUF ;

0012 C29C CLR REN ;

0014 00 NOP ;

0015 00 NOP ;

0016 00 NOP ;

0017 F580 MOV P0,A ;

0019 75A0FF MOV P2, # FFH ;

001C 7A18 MOV R2,# 18H ;

001E 7BFF MOV R3,# FFH ;

0020 7CFF MOV R4,# FFH ;

0022 DCFE DJNZ R4,0022 ;

0024 DBFA DJNZ R3,0020 ;

0026 DAF6 DJNZ R2 , 001E ;

0028 75A000 MOV P2 , #00H ;

002B 80DC AJMP 0009 ;

  至此,我们用了6讲,结合实例由表及里地阐述了单片机的基本构造和基本原理,讲解了部分常用指令。大家可以自己设计一些简单的控制电路,编制一些简单的控制程序进行实验和进一步学习。掌握了电路设计和编程的基本方法之后,再参考一些有关的书籍,进行一些较复杂电路的制作,就能够较为熟练地完成一些可靠的控制电路的设计,直至开发出实用的智能产品来,达到应用单片机为社会创造效益的目的。

  编者按:从下一期开始,我刊将开始PIC 系列单片机基础知识、应用实例等文章的刊载。如大家对单片机的相关文章有什么建议或意见,欢迎来电来函与我编辑部联系。



评论


相关推荐

技术专区

关闭