单片机与pc机的通信原理及电路的设计研究分析报告_单片机与PC机的通信原理及电路的设计研究分析

介绍

本文的课题是基于串行通信的单片机仿真和C语言开发,研究了一种基于串口的温度检测数据收发模块。用DS18B20温度传感器设计一个温度监测模块,精确到0.1,用液晶显示当前温度,然后通过串口调试助手向单片机发送指令。当微控制器接收到十六进制指令01时,每隔1s将当前温度值发回PC机显示,同时PC机显示开机温度;当微控制器接收到十六进制指令02时,停止温度值的返回,PC机显示关机temp当微控制器接收到其他指令时,PC显示错误。

1总体设计

本系统的功能由硬件和软件配合,硬件部分主要完成信息的显示;软件主要完成信号处理和控制功能。

该系统硬件采用模块化设计,以AT89C52单片机为核心,与液晶显示电路、串口通信电路和DS18B20温度检测电路组成控制系统。系统硬件主要包括以下模块:

AT89C52主控模块、液晶显示模块、串口通信模块、DS18B20温度检测模块等。其中,AT89C52主要完成外围硬件的控制和部分操作功能,LCD显示模块完成字符和数字的显示功能,串口通信模块主要完成单片机与PC机的通信功能,DS18B20温度检测模块主要完成环境温度检测功能。系统组成框图如图1.1所示。

图1.1系统硬件组成框图

应用软件采用模块化设计方法。系统软件主要由主程序、串口收发数据中断子程序、液晶显示子程序等模块组成。系统软件结构框图如图1.2所示。

图1.2系统软件设计框图。

2系统工作原理

MCS-51单片机的串口通过两个串行缓冲器SBUF发送/接收数据,这两个缓冲器使用一个地址(98H),但物理上是独立的。其中接收缓冲区只能读不能写,50发送缓冲区只能写不能读。

1.发送过程

当数据写入SBUF寄存器时,单片机自动从起始位开始发送数据。当数据发送到停止位的起始位置时,内部硬件将TI设为1,并向CPU申请中断。然后,它可以在中断服务程序中处理,或者它可以选择不进入中断。

2.接收过程

串口是否接收取决于允许接收位REN的状态。当软件将REN设置为‘1’时,允许接收器接收。串行端口接收器以所选波特率的16倍监控RXD线。当“1”跳到“0”时,检测器连续采样RXD线上的低电平。确定开始位出现在RXD终端,然后接收控制器开始工作。在每个传输时间7、8、9的第三个脉冲状态对RXD线进行采样,并确定接收值为“0”或“1”。当接收到停止位时,控制电路将中断标志R1设置为‘1’。

3.温度检测

温度检测采用美国达拉斯最新的单线数字温度传感器DS18B20。DS18B20是一种新型的‘一线器件’,体积更小,更适用于多种场合,适用电压更广,更经济。达拉斯半导体公司的数字温度传感器DS18B20是世界上第一个支持“一线总线”接口的温度传感器。

温度测量范围为-55~ 125,可编程,转换精度为9-12位。可分辨温度分别为0.5、0.25、0.125和0.0625。在9位分辨率下,温度最多可在93.75ms内转换成数字;在12位分辨率下,温度值最多可以转换成750ms以内的数字。

3温度传感器

3.1温度传感器的特性

达拉斯最新的单线数字温度传感器DS18B20[2]是一种新型的‘一线器件’,体积更小,更适用于多种场合,适用电压更广,更经济。达拉斯半导体公司的数字温度传感器DS18B20是世界上第一个支持“一线总线”接口的温度传感器。温度测量范围为-55~ 125,可编程,转换精度为9-12位。可分辨温度分别为0.5、0.25、0.125和0.0625。在9位分辨率下,温度最多可在93.75ms内转换成数字;在12位分辨率下,温度值最多可以转换成750ms以内的数字。DS18B20的性能特征如下:

1.独特的单线接口,只需要一个端口引脚进行通信;

2.可以在唯一的三线上并联多个DS18B20,实现多点组网功能。

3.不需要外部设备;

4.可通过数据线供电,电压范围3.0 ~ 5.5V

5.零待机功耗;

6.温度在9或12位数;

7.用户可以定义报警设置;

8.警报搜索命令识别并标记超过程序定义的温度(温度警报条件)的设备;

9.负电压特性,当电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

DS18B02可以通过两种方式供电。一个是电源。此时DS18B20的一个管脚接地,两个管脚做信号线,三个管脚接电源。另一种是寄生电源供电方式,单片机端口接在单线总线上。为了确保在有效的DS18B20时钟周期内提供足够的电流,可以使用一个MOSFET管来上拉总线。

DS18B20在进行存储器写操作和温度A/D转换操作时,总线上必须有很强的上拉,上拉开启时间最多10us。当采用寄生电源供电模式时,VDD端子接地。由于单线系统只有一根线,因此发送接口必须是三态的。

图3.1 DS18B20引脚图

3.2工作时序图

1.初始化

图3.2初始化时序图

1)首先将数据线设置为高电平1;2)延迟(时间要求不是很严格,但要尽量短);3)数据线拉至低电平0;4)延时750us(时间范围可以是480 ~ 960 us);5)将数据线拉至高电平1;6)延迟等待。如果初始化成功,DS18B20返回的低电平0会在15~60ms内产生,根据这个状态可以确定它的存在。但需要注意的是,不能无限等待,否则程序会进入无限循环,要判断超时;7)如果CPU在数据线上读取到低电平0,需要延迟,延迟时间距离高电平至少要480us8)再次将数据线拉至高电平,然后结束。

2.DS18B20写数据

图3.3写入数据的时序图

1)先将数据线设置为低电平0;

2)确定延迟的时间为15us

3)从低位向高位发送数据(一次只发送一位);

4)延迟时间为45us

5)将数据线拉至高电平1;

6)重复步骤1)到5 ),直到发送了完整的字节;

7)最后把数据线拉到1。

3.DS18B20读取数据

图3.4读取数据的时序图

1)将数据线拉高至1;

2)延时2us

3)将数据线拉低0;

4)延时6us

5)将数据线拉高1;

6)延时4us

7)读取数据线的状态,得到状态位,进行数据处理;

8)延时30us

9)重复步骤1)至7 ),直到读取完一个字节。

4硬件设计

4.1时钟电路和复位电路

1.钟脉冲电路

时钟电路可以产生CPU校准时序,是单片机的控制核心。本设计是通过外部12MHz晶振来实现时钟电路的时序控制。使用片内振荡器时,XTAL1和XTAL2分别是反相放大器的输入和输出端。外部晶体和电容器C3和C5形成并联谐振电路,该电路连接在放大器的反馈回路中。当由外部时钟驱动时,XTAL2引脚应暂停,但由XTAL1引脚上的信号驱动。外部振荡器通过频率为2的触发器变成内部时钟信号,所以对外部信号的占空比没有要求,但最小和最大高电平持续时间和低电平持续时间要满足技术要求。电路如图4.1所示。

数字

在空闲模式下,CPU的内部时钟信号被门电路阻断,CPU进入睡眠状态,但内部时钟信号继续提供给中断系统、定时器和串口。该方法由软件调用。在空闲模式下,片内RAM和所有特殊寄存器的状态仍然保留,并且空闲模式可以通过任何允许的中断或硬件复位来终止。当空闲模式被硬件复位终止时,系统通常在空闲位置恢复程序的执行。硬件复位只需要信号在两个机器周期内有效。当通过复位终止空闲模式时,为了防止意外写入端口引脚的可能性,调用空闲模式指令的下一条指令不应写入端口引脚或外部存储器。

3.断电工作模式

在掉电模式下,片内振荡器停止工作。调用掉电指令是最后执行的指令。片内RAM和特殊寄存器的值保留到掉电模式终止。仅通过硬件复位退出关机模式。复位后,所有特殊寄存器将被重新定义,但RAM的内容不会改变。在VCC恢复到正常工作电压之前,不能开始复位,复位信号要保持很长时间,以保证振荡器开始振动并达到稳定。

为了使微控制器正常工作,需要增加上电复位电路和断电检测电路。上电复位的简要原理:

当系统不需要复位时,RST端子为低;按键,RST终端变为高电平。

图4.2上电复位电路

AT89C51、晶振电路和上电复位电路共同构成单片机的最小系统,如图4.3所示。

图4.3最小系统

4.2温度传感器

图4.4 DS18B20连接图

从图4.4可以看出,DS18B20与单片机的连接非常简单,单片机只需要一个I/O口就可以控制DS18B20。这个图的连接是单片机和一个DS18B20通讯。如果要控制多个DS18B20进行温度采集,只需要将DS18B20的所有I/O口连接在一起即可。

4.3液晶显示模块

显示电路采用LCD1602液晶屏,P2作为LCD的8位数据输入端口。P1.0端口用作LCD数据/命令选择端口,P1.1是LCD使能端口。

图4.5液晶显示模块

4.4串口通信模块的设计

单片机有一个全双工串行通讯口,方便了单片机与计算机之间的通讯。

电平范围是电路能够安全可靠地识别信号的电压范围。

CMOS电路的电平范围一般是从0到电源电压。在CMOS电平下,高电平(3.5~5V)为逻辑‘1’,低电平(0~0.8V)为逻辑‘0’。

RS232接口的电平范围为-15V至15V,RS232电平采用负逻辑,即逻辑‘1’:-3 ~-15V,逻辑‘0’:3 ~ 15V。

单片机的串口是TTL级,计算机的串口是RS232级。为了两者之间的通信,必须有电平转换电路,即单片机的串口要外接一个电平转换电路芯片,将一个兼容TTL的CMOS高电平表示的1转换成RS232的负电压信号,低电平转换成RS-232的正电压信号。典型的转换电路给出-9V和9V。

在本设计中,可以利用MAX232芯片的转换接口实现逻辑电平转换:MAX232由MAXIM公司生产,包含驱动器和接收器两个RS-232转换芯片。MAX232芯片内部有一个电压转换器,可以将输入的5V电压转换成RS-232接口所需的10V电压,特别适用于没有12V的单电源系统。同样原理的芯片还有MAX202、AD公司的ADDt101和SIL公司的IC1232。

图4.6 MAX232芯片引脚

由于protues仿真不需要电平转换,所以仿真中不使用MAX232芯片电路,但在实物中需要电平转换,其硬件连接图如图4.7所示。MAX232芯片的T1in引脚连接到AT89C51微控制器的P3.1(TXD)引脚,MAX232芯片的R1out引脚连接到AT89C51微控制器的P3.0(RXD)引脚;MAX232芯片的T1out引脚连接到DB9引脚接口的第二引脚,MAX232芯片的R1in引脚连接到DB9引脚接口的第三引脚。

图4.7电平转换器硬件连接图

4.5系统示意图

5软件设计

5.1算法设计

编写单片机异步通信程序的步骤如下:

1.设置串口工作模式

此时,有必要在串行控制器SCON中设置SM0和SM1。在PC机与单片机的通信中,一般选择串口工作在模式1。

串行控制器SCON(98H)的格式如表1所示:

表1串行控制器的格式

2.选择波特率发生器

选择定时器1或定时器2作为波特率发生器。

3.设置定时器工作模式

当选择定时器1作为波特率发生器时,应将模式寄存器TMOD设置为计数模式,并选择相应的工作模式(一般情况下,应选择模式2,以避免重新加载定时器的初始值)。当定时器2被选作波特率发生器时,T2CON应被设置为波特率发生器的工作模式。

4.设置波特率参数

有两个参数影响波特率,一个是专用寄存器PCON的SMOD位,另一个是相应定时器的初始值。

5.允许串行中断

因为我们在程序中通常采用中断接收方式,所以要设置EA=1、ES=1。

6.允许接收数据

将SCON中的REN设置为1意味着允许串行端口接收数据。

7.让计时器/计数器工作

此时,启动定时器/计数器产生波特率。8.编写串行中断服务程序。

当数据到达串口时,系统会自动执行中断服务程序。

9.接收/发送相应的数据

注意,T1需要在发送操作完成后清零,R1需要在接收操作完成后清零。

5.2编程

主程序设计

主程序主要完成硬件初始化、子程序调用等功能。

1.初始化。

首先,调用LCD初始化程序,并在LCD上显示数据“接收:”和“温度是:*C”。

然后调用中断和串口初始化子程序来清除串口接收数据单元RECDATA。设置寄存器SCON的SM0和SM1位,定义串口工作模式,选择波特率发生器作为定时器T1;将定时器T1工作模式设置为模式2;将波特率参数设置为9600bps允许串行中断和总中断;允许串口接收数据,定义REN=1;启动定时器/计数器T1,并定义TR1=1。

2.发送和接收数据的串行端口。

判断串口成功接收数据标志位flag_uart是否为0,如果flag_uart为0,则表示串口没有接收到数据,继续等待串口接收数据;如果flag_uart为1,表示串口成功接收或发送数据,进入串口中断服务子程序。单片机接收数据,将串口成功接收数据的标志位flag_uart清零,调用LCD显示接收数据子程序,将单片机从串口接收的数据显示在LCD上,并将温度值返回给PC机显示。主程序设计流程图如图5.1所示。

图5.1主程序流程图

5.2.2串行中断服务子程序

判断串口发送标志位TI是否为1,如果为1,单片机向PC机发送数据,清除TI,中断子程序返回;如果TI为0,表示RI=0,则串口接收标志位RI清零,将串口接收缓冲区SBUF中的数据写入串口接收数据单元RECDATA,然后将数据发送到串口发送缓冲区SBUF,发送到PC,串口成功接收数据标志位RECOKBIT置1,表示串口成功接收和发送数据,最后子程序返回。串行数据接收和发送中断服务子程序的设计流程如图5.2所示。

图5.2串行中断服务子程序

温度读取子程序

读取温度子程序的主要作用是读取RAM中的9个字节,读取时需要进行CRC校验,校验有错误时不会重写温度数据。程序流程图如图5.3所示。

图5.3温度读数子程序

温度转换命令子程序

温度转换命令子程序主要发送温度转换的开始命令,采用12位分辨率时转换时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换完成。温度转换命令子程序流程如上图所示。

显示数据刷新子程序主要刷新分离的温度显示数据,当标志位为1时,将符号显示移动到第一个位置。程序流程图如图5.6所示。

图5.6显示了数据刷新子程序。

6结论

该系统硬件采用模块化设计,以AT89C52单片机为核心,与液晶显示电路、串口通信电路和DS18B20温度检测电路组成控制系统。系统硬件主要包括以下模块:

AT89C52主控模块、液晶显示模块、串口通信模块、DS18B20温度检测模块等。其中,AT89C52主要完成外围硬件的控制和部分操作功能,LCD显示模块完成字符和数字的显示功能,串口通信模块主要完成单片机与PC机的通信功能,DS18B20温度检测模块主要完成环境温度检测功能。