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

引言
本论文题目为基于串口通信的单片机仿真和c 语言开发,研究的是一种基于串口的温度检测数据收发模块。利用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. 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 下。
串行控制器 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 程序设计
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.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 所示。
图5.6 显示数据刷新子程序
6 结论
本系统的硬件采用模块化设计,以at89c52 单片机为核心,与lcd 显示电路、串行口通信电路及ds18b20 温度检测电路组成控制系统。该系统硬件主要包括以下几个模块:
at89c52 主控模块、lcd 显示模块、串行口通信模块、ds18b20 温度检测模块等。其中at89c52 主要完成外围硬件的控制以及一些运算功能,lcd 显示模块完成字符、数字的显示功能、串行口通信模块主要完成单片机和pc 机之间的通信功能,ds18b20 温度检测模块主要完成环境温度检测功能。

浅谈激光焊接设备在新能源汽车领域中的应用
2017年中国手机AP销售增长 联发科首季发力市占回升
如何让电脑焕发生机:台式电脑性能优化,换CPU 性能直升49%
PowerVR Series2NX神经网络加速器设计
我们应该怎样加快智慧交通建设
单片机与PC机的通信原理及电路的设计研究分析
魅族白老:MX6的拍照分分钟超越三星S7edge!
阿里正寻求约50亿美元贷款 这些上市公司靠共享单车崛起
新小型力传感器在各领域的应用
用AI预测地震、洪水、飓风和火山喷发 现在已经成为了可能
B4系列电化学传感器对气体氮氧化物中的检测
矿井人员安全虹膜识别系统的功能和应用设计
物联网产业其发展的战略意义巨大
将5000mAh的电池做进毫米级,硅碳负极拯救了折叠屏的厚度
Liquid Network侧链可以为比特币做些什么?
PID控制器的工作过程
谐波平衡法仿真原理和基本概念介绍
部署物联网的诀窍在哪里
微软为OpenAI打造了世界一流的超级计算机
远翔FP7130:80V10A降压恒流PWM调光IC