以AT89C52单片机为核心的单片机与PC机通信原理是什么?

控制/MCU

1890人已加入

描述

随着系统的广泛应用和计算机网络技术的普及,单片机的通信功能愈来愈显得重要。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换,通常单片机与计算机之间的通信用的较多。本文以温度检测数据为基础,研究了单片机与PC机的及威廉希尔官方网站 的设计。

引言

本文研究的是一种基于串口的温度检测数据收发模块。利用DS18B20 温度传感器设计温度监测模块,精确到0.1℃,用液晶显示当前温度,然后通过串口调试助手向单片机发送指令。当单片机收到十六进制指令01时,将当前温度值以1s 为间隔传回PC机显示,同时PC 机显示Turn on temp;当单片机收到十六进制指令02 时,停止温度值的回传,PC 机显示Turn off temp;当单片机收到其它指令时,PC 机显Error。

1 总体设计

本系统功能由硬件和软件两大部份协调完成,硬件部分主要完成信息的显示;软件主要完成信号的处理及控制功能等。

本系统的硬件采用模块化设计,以AT89C52单片机为核心,与LCD 显示威廉希尔官方网站 、串行口通信威廉希尔官方网站 及DS18B20 温度检测威廉希尔官方网站 组成控制系统。该系统硬件主要包括以下几个模块:

AT89C52 主控模块、LCD 显示模块、串行口通信模块、DS18B20 温度检测模块等。其中AT89C52 主要完成外围硬件的控制以及一些运算功能,LCD 显示模块完成字符、数字的显示功能、串行口通信模块主要完成单片机和PC 机之间的通信功能,DS18B20 温度检测模块主要完成环境温度检测功能。系统组成方框图如图1.1 所示。

单片机

图1.1系统硬件组成方框图

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

单片机

图1.2系统软件设计框图

2 系统工作原理

MCS-51 单片机串行口发送/接收数据时,通过2 个串行缓冲器SBUF 进行,这2 个缓冲器采用一个地址(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. 温度检测

温度检测采用DALLAS 最新单线数字温度传感器DS18B20,DS18B20 是一种新型的“一线器件”,其体积更小,更适用于多种场合,且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20 是世界上第一片支持“一线总线”接口的温度传感器。

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

3 温度传感器

3.1 温度传感器特性

DALLAS 最新单线数字温度传感器DS18B20[2]是一种新型的“一线器件”,其体积更小,更适用于多种场合,且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器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的1 脚接地,2 脚作为信号线,3 脚接电源。另一种是寄生电源供电方式,单片机端口接单线总线,为保证在有效的DS18B20 时钟周期内提供足够的电流,可用一个MOSFET 管来完成对总线的上拉。

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

单片机

图 3.1 DS18B20 引脚图

3.2 工作时序图

1. 初始化

单片机

图 3.2 初始化时序图

1)先将数据线置高电平1;2) 延时(该时间要求不是很严格,但是要尽可能短一些);3) 数据线拉到低电平0;4) 延时 750us(该时间范围可以在480~960us);5) 数据线拉到高电平1;6)延时等待。如果初始化成功则在15~60ms内产生一个由DS18B20 返回的低电平0,据该状态可以确定它的存在。但是要注意,不能无限地等待,不然会使程序进入死循环,所以要进行超时判断;7) 若 CPU 读到数据线上的低电平0 后,还要进行延时,其延时时间从发出高电平算起最少要480us;8)将数据线再次拉到高电平后结束。

2. DS18B20 写数据

单片机

图3.3 写数据时序图

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

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

3) 按从低位到高位的顺序发送数据(一次只发送一位);

4) 延时时间为 45us;

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

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

7)最后将数据线拉高到1.

3.3 DS18B20 读数据

单片机

图3.4 读数据时序图

1)将数据线拉高为1;

2) 延时 2us ;

3) 将数据线拉低0 ;

4) 延时 6us ;

5) 将数据线拉高1 ;

6)延时 4us ;

7) 读数据线的状态得到1 个状态位,并且进行数据处理;

8) 延时 30us ;

9) 重复 1)到7)步,知道读取完一个字节。

4 硬件设计

4.1 时钟威廉希尔官方网站 及复位威廉希尔官方网站

1.时钟威廉希尔官方网站

时钟威廉希尔官方网站 可以产生CPU 校准时序,是单片机的控制核心,本次设计是通过外接12MHz的晶振来实现时钟威廉希尔官方网站 的时序控制。在使用片内振荡器时,XTAL1 和XTAL2 分别为反向放大器的输入端和输出端。外接晶体以及电容C3 和C5 构成并联谐振威廉希尔官方网站 ,接在放大器的反馈回路中。当用外部时钟驱动时,XTAL2引脚应悬空,而由XTAL1引脚上的信号驱动,外部振荡器通过一个2 分频的触发器而成为内部时钟信号,故对外部信号的占空比没有什么要求,但最小和最大的高电平持续时间和低电平持续时间应符合技术要求。威廉希尔官方网站 如图4.1 所示。

单片机

图 4.1 晶振威廉希尔官方网站

2.空闲方式

在空闲方式下,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 LCD显示模块

显示威廉希尔官方网站 采用LCD1602 液晶显示屏,P2 作为液晶8 位数据输入端口。P1.0 口作为液晶数据/命令选择端口,P1.1 为液晶使能端口。

单片机

图 4.5 LCD 显示模块

4.4 串行口通信模块设计

51 单片机有一个全双工的串行通信口,使单片机和计算机之间可以方便地进行通信。

电平范围是威廉希尔官方网站 能够安全可靠识别信号的电压范围。

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 针接口的第2 引脚,MAX232 芯片的R1in 引脚连接DB9 针接口的第3 引脚。

单片机

图4.7 电平转换硬件连接图

4.5 系统原理图

由以上模块化设计可得整个系统原理图如图4.8 所示:

单片机

图4.8 系统原理图

5 软件设计

5.1 算法设计

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

1. 设置串口工作方式

此时需对串行控制器SCON 中的SM0、SM1 进行设置。PC 机与单片机的通信中一般选择串口工作在方式1 下。

2. 选择波特率发生器

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

3. 设置定时器工作方式

当选择定时器1 做为波特率发生器时,需设置其方式寄存器TMOD 为计数方式并选择相应的工作方式(一般选择方式2 以避免重装定时器初值);当选择定时器2 做为波特率发生器时,需将T2CON 设置为波特率发生器工作方式。

4. 设置波特率参数

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

5. 允许串行中断

因在程序中我们一般采有中断接收方式,故应设EA=1、ES=1.

6. 允许接收数据

设置 SCON 中的REN 为1.表示允许串行口接收数据。

7. 允许定时/计数器工作

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

当有数据到达串口时,系统将自动执行所编写的中断服务程序。

8. 收/发相应数据

注意的是发送操作完成需将T1清零,接收工作完成后需将R1清零。

5.2 程序设计

5.2.1 主程序设计

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

1. 初始化。

首先调用 LCD 初始化程序,在LCD 上显示数据“RECEIVE:”和“TEMP is: *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 上显示单片机从

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

单片机

图 5.1 主程序流程图

5.2.2 串口中断服务子程序

判断串口发送标志位TI 是否为1,若TI 为1,则把数据从单片机发给PC 机,并把TI清零,中断子程序返回;若TI为0,表明RI=0,则把串口接收标志位RI清零,把串口接收缓冲器SBUF 中的数据写入串口接收数据单元RECDATA,再把该数据送到串口发送缓冲器SBUF 中,传给PC 机,置串口成功接收数据标志位RECOKBIT 为1,表明串口成功接收发送数据,最后中断子程序返回。串口收发数据中断服务子程序设计流程图如图5.2 所示。

单片机

图5.2 串口中断服务子程序

5.2.3 读温子程序

读出温度子程序的主要功能是读出RAM 中的9 字节,在读出时需进行CRC 校验,校验有错时不进行温度数据的改写。其程序流程图如图5.3 示。

单片机

图5.3 读温子程序

5.2.4 温度转换命令子程序

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

单片机

图5.4 温度转换流程图

5.2.5 计算温度子程序

计算温湿度子程序将RAM 中读取值进行BCD 码的转换运算,并进行温度值正负的判定,其程序流程图如图5.5 所示。

单片机

图5.5 计算温度流程图

5.2.6 显示数据刷新子程序

显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。程序流程图如图5.6 所示。

单片机

6 结论

本系统的硬件采用模块化设计,以AT89C52 单片机为核心,与LCD 显示威廉希尔官方网站 、串行口通信威廉希尔官方网站 及DS18B20 温度检测威廉希尔官方网站 组成控制系统。该系统硬件主要包括以下几个模块:

AT89C52 主控模块、LCD 显示模块、串行口通信模块、DS18B20 温度检测模块等。其中AT89C52 主要完成外围硬件的控制以及一些运算功能,LCD 显示模块完成字符、数字的显示功能、串行口通信模块主要完成单片机和PC 机之间的通信功能,DS18B20 温度检测模块主要完成环境温度检测功能。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分