历史上的今天
返回首页

历史上的今天

今天是:2025年03月01日(星期六)

2018年03月01日 | 单片机与PC 机的通信原理及电路的设计研究

2018-03-01 来源:eefocus

内容摘要:随着单片机系统的广泛应用和计算机网络技术的普及,单片机的通信功能愈来愈显得重要。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换,通常单片机与计算机之间的通信用的较多。本文以温度检测数据为基础,研究了单片机与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系统硬件组成方框图

图1.1系统硬件组成方框图


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

图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.1 DS18B20 引脚图


3.2 工作时序图

1. 初始化

图 3.2 初始化时序图

图 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 写数据时序图

图3.3 写数据时序图

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

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

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

      4) 延时时间为 45us;

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

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

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

      3. DS18B20 读数据

图3.4 读数据时序图

图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 晶振电路

图 4.1 晶振电路


2.空闲方式


在空闲方式下,CPU 的内部时钟信号被门控电路所封锁,CPU 即进入睡眠状态,但内部时钟信号仍继续供给中断系统,定时器和串行口。这种方式由软件调用。在空闲方式期间,片内RAM和所有专用寄存器的状态仍被保留,空闲方式可通过任何允许的中断或硬件复位来终止。当空闲方式由硬件复位终止时,通常系统在空闲处恢复程序的执行。硬件复位只需要信号持续有效两个机器周期。当用复位终止空闲方式时,为防止避免意外写入端口引脚的可能性,调用空闲方式指令的下一条指令不应是写端口引脚或外部存储器。


3.掉电工作方式


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 上显示单片机从串口接收到的数据,同时回传温度值给PC机显示。主程序设计流程图如图5.1 所示。

图 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 串口中断服务子程序


5.2.3 读温子程序


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

图5.3 读温子程序

图5.3 读温子程序


5.2.4 温度转换命令子程序


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

图5.4 温度转换流程图

图5.4 温度转换流程图


5.2.5 计算温度子程序


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

图5.5 计算温度流程图

图5.5 计算温度流程图

5.2.6 显示数据刷新子程序


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

图5.6 显示数据刷新子程序


6 结论


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


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



在掉电方式下,片内振荡器停止工作。调用掉电指令是执行的最后一条指令。片内RAM 和专用寄存器的值被保留,直到掉电方式终止。退出掉电方式只能靠硬件复位。复位后将重新定义所有专用寄存器,但不改变RAM 的内容。在VCC 未恢复到正常工作电压之前,不能启动复位,复位信号应保持足够长的时间,以保证振荡器的起振和达到稳定。


为了使单片机正常工作,还需要加入上电复位电路和掉电检测电路。上电复位简要原理:

在系统不需要复位时,RST端是低电平;按下按键,RST端变为高电平。

图 4.2 上电复位电路

图 4.2 上电复位电路

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

图 4.3 最小系统

图 4.3 最小系统

4.2 温度传感器

图4.4 DS18B20连线图

图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.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 芯片引脚

图 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.7 电平转换硬件连接图


4.5 系统原理图


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

图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. 编写串行中断服务程序。

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

      9. 收/发相应数据

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


推荐阅读

史海拾趣

登丰微(GSTEK)公司的发展小趣事

歌普电子深知技术创新的重要性,因此不断加大在研发方面的投入。公司拥有一支卓越的研发团队,能够设计出先进而成熟的产品方案,并配备了精密模具制造、高速连续冲压等先进生产设备。这些努力使得歌普的产品不仅获得了多项国际安全认证及外观设计专利,还成功与国际品牌连接器相兼容。随着产品的不断优化和升级,歌普的产品远销全球多个工业国家及地区,赢得了良好的国际声誉。

厦门法拉(faratronic)公司的发展小趣事

FMI公司始终坚持以客户为中心的发展理念,致力于为客户提供定制化的频率控制解决方案。公司拥有一支专业的研发团队和完善的生产流程,能够根据客户的具体需求进行产品设计和生产。无论是标准产品还是定制产品,FMI都能确保高质量和快速交付。这种灵活的服务模式使得FMI在客户中树立了良好的口碑,并为公司赢得了更多的商业合作机会。

ADTech公司的发展小趣事

AdTech公司深知人才是企业发展的核心动力。因此,公司一直致力于培养和引进高素质的人才,打造了一支具有丰富经验和专业技能的团队。公司通过提供良好的工作环境和福利待遇,吸引了一批优秀的研发、市场和管理人才。同时,公司还注重员工的培训和成长,为员工的职业发展提供了广阔的空间。这些措施使得公司的团队更加稳定和高效,为公司的持续发展提供了有力保障。

Fillfactory Nv公司的发展小趣事

FIDELIX公司成立于1990年,是一家专注于存储芯片研发与销售的韩国企业。在公司成立初期,FIDELIX凭借对技术的深入研究和对市场的敏锐洞察,成功推出了多款性能优越的NAND FLASH(闪存)和SDR/DDR(单/双数率同步动态存储器)等存储芯片产品。这些产品不仅在韩国市场上获得了良好的口碑,同时也开始逐步进入国际市场。

随着技术的不断进步和市场的不断扩大,FIDELIX逐渐在韩国存储芯片领域崭露头角。公司不断投入研发资金,加强技术创新,努力提升产品的性能和品质。同时,FIDELIX也积极拓展销售渠道,与多家国内外知名厂商建立了合作关系,为公司的持续发展奠定了坚实的基础。

Dalian Dlicap Corporation公司的发展小趣事

为了满足市场不断增长的需求,达利凯普在大连市金普新区投资建设了高端电子元器件产业化项目。该项目总用地面积4万平方米,总建筑面积5.6万平方米。项目建成后,将实现年产射频微波瓷介电容器30亿只的产能规模,进一步巩固了公司在行业内的领先地位。同时,该项目的实施也为当地经济发展注入了新的活力。

Gravitech公司的发展小趣事

大连达利凯普科技股份公司自成立以来,始终坚持自主创新和技术研发。公司拥有一支专业的研发团队,致力于射频微波磁介电容器(射频微波MLCC)的研发和生产。通过不懈努力,公司成功掌握了射频微波MLCC的关键核心技术,并获得了全部自主知识产权。这一技术突破不仅使达利凯普在行业内树立了技术领先地位,也为公司赢得了广泛的市场认可。

问答坊 | AI 解惑

供应电路板PCB

本公司是专业生产线路板的,单(FR-4,CEM-1),双,多层(4-18层),铝基板,LED超长板,牙签板,小批量大批 量都做,帮客户抄板,改板,开模等一条龙服务!         1:双面板加急24-48小时,一般3-4天出货。   &nbs ...…

查看全部问答>

数控直流电压源设计

设计任务:采用AT89S52单片机、DAC0832、键盘及显示电路设计一数控直流电压源。…

查看全部问答>

请问用单片机如何读手机LCD数据?

请问用单片机如何读手机LCD数据? AT命令我找了一下,好象只有AT+CKPD控制按钮写屏幕的,有没有读LCD的命令呢?…

查看全部问答>

请教在windows mobile中如何改变分辩率?

我的程序是以分辩率320*240做的,现在PDA换了,是640*480的,界面全乱了,我想改一下分辩率,这是最简单的了,希望大家帮我!…

查看全部问答>

关于ARM屏驱动的问题

   哪位朋友在ARM下调试过DE模式的屏的驱动呀,LCD一般是SYNC模式的,但我现在拿到一个屏是DE MODE ONLY的,没有HSYNC和VSYNC请问怎么调呀!…

查看全部问答>

关于硬件中输入输出范围的问题!

请问电脑中\"内存范围\"和\"输入输出范围\"是指? 请问在“系统属性”->“设备管理器”看硬件资源选项中的“内存范围”和“输入输出范围”是指什么意思?如网卡内存范围:EA000000-EA0000FF   COM口输入输出:范围:03F8-03FF,到底是 ...…

查看全部问答>

要写两个程序,一个运行在PC机上,一个在PDA上,两个机器通过usb连接,要他们之间传递信息,请问如何实现

我的本意是像socket编程那样,一个server,一个client两个互相传递信息,唯一的区别是通过usb线而不是网线,请高手指教…

查看全部问答>

全球最完整不用写驱动的USB HOST

Vinculum系列新一代USB Host桥接器单芯片解决方案,主要用于实现语音、MP3、数据、图像和文本等数据的高速上传和下载,它能够自动辨识并支持FAT文件格式,支持4线串行UART、4线串行SPI和12线并行FIFO接口来和Vinculum沟通。而系统设计师仅需了解简 ...…

查看全部问答>

CODE SPACE MEMORY OVERLAP问题,马上给分!

编译汇编程序时总出现三个warning 第一个:CODE SPACE MEMORY OVERLAP 第二个:unresolved external symbol 第三个:reference made to unresolved external 由于不管编译什么汇编程序 都出现这样的warning 所以是不是 keil 设置的问题。请大家 ...…

查看全部问答>

2812会明显发热吗?

之前没有留意过2812发热的问题 现在手头上的这块板子,当2812跑到150M的时候 无意中碰到了芯片,发现还挺烫的 我想问问,是不是2812正常运行的时候不会明显发热 如果明显发热就说明这个片子坏了?…

查看全部问答>