长治学院学士学位论文
图3.8 DS18B20的读时序
DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15us之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
图3.9 DS18B20的写时序
DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
在本系统中,DS18B20的2引脚DQ与主控器STC90C516RD+ 的P2^3引脚相连,这条I/O线上只挂载了一个DS18B20,所以在操作时不必去理会DS18B20的ROM编码,在单器件的情况下,为了节省时间则可以选择跳跃ROM指令(#define jump_ROM
13
长治学院学士学位论文
0xCC),即向DS18B20写入指令:0xCC。如过多芯片挂载使用此指令将会出现数据冲突,出现错误。
对DS18B20的整体操作如下: 1.复位;
2.写跳跃ROM指令:0xcc; 3.写温度转换指令:0x44; 4.复位;
5.写跳跃ROM指令:0xcc; 6.写数据读取指令:0xbe; 7.读取温度值的低八位; 8.读取温度值的高八位;
最后将读到的温度数据以十进制的表示方法返回给主调函数。
3.3 串口数据发送模块
串口数据发送模块的主要功能是将温度,压力等数据用串口发送给上位机,实现对储油罐的远端检测功能。在本系统中采用的串口数据通信芯片是MAX485。PC机一般接收的RS232电平,不识别RS485的电平信号,所以在接收端需要将RS485电平转换为RS232电平。
利用MAX485的主要原因是它的有效传输距离能达到1500m,而普通RS-232电平信号的有效距离最多也超不过20m。在一个大型的炼油厂,储油罐与上位机的距离不可能在20m之内,RS232电平无法满足长距离传输数据的功能。
操作单片机发送串口数据时,要利用定时器来设置波特率。主要的操作步骤: 选择好工作方式,设置好串口的相应的寄存器,设置好定时器的寄存器,将要发送的数据放入串口缓存区。
串口发送的数据顺序是:
0x00,0xff,油罐编号,温度,底端压力,上端压力;
其中0x00,和0xff是数据校验标志,当上位机收到一个数组后,先判断第一位是0x00,且第二位是0xff后,就知道从第三位开始就是编号,温度,压力这些有效数据了,因为事先知道数据长度,就不用结束标志位了。
14
长治学院学士学位论文
向上位机发送的数据是源源不断的发送上去,每秒钟能发好几次,上位机再选择性的接收数据并做出相应的处理。在windows下使用串口调试工具,收到的数据如图3.10所示。
图3.10 串口调试工具
用串口调试工具查看串口数据时,这些数据是以十六进制显示的,而且是一连串的数据,不知道它们代表的是什么意思。用一定的方法将这些数据解析完毕后,我们就可以很清楚的理解他们的意思了,在linux平台的终端中,显示解析后的数据如图3.11:
图3.11 linux平台的终端数据
15
长治学院学士学位论文
3.4 显示模块
显示模块的功能是:将各传感器检测到的值经其他相应功能模块处理之后,以数值的形式显示在数码管上。相对而言,显示模块在本系统中是一个比较简单的模块,硬件上由一个八位的八段数码管、一个3-8译码器(74H138)和一个锁存器(74H373)构成,如图3.12所示。
256912151619Q0Q1Q2Q3Q4Q5Q6Q7U274LS373OELE1X1C215141312111097Y0Y1Y2Y3Y4Y5Y6Y7123645E1E2E3ABC1nFD0D1D2D3D4D5D6D7U374HC138347813141718CRYSTALP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A123938373635343332212223242526111R1240k 图3.12 显示电路 锁存器的输入端接单片机的P0口,将P0输出的电平保存起来,防止其跳变。输出端接数码显示管的段选信号。 3-8译码器输入端接单片机P2.1 P2.1 P2.2三端,8个输出端分别接8位数码管上的位选信号。位选的电平逻辑可参考3-8译码器的真值表,在此不再赘述。 特别强调的是,在操作单片机给P2.1 P2.1 P2.2三端赋值时,应只给这三个端口赋值,尽量不要采用“P2 = XXX”的形式。这样虽然可以改变这三个端口的值,达到操作3-8译码器的效果,但同时也改变了P2口其他五个端口的值,这就意味着对显示模块的操作可能会导致其他与P2口相连模块的功能产生错误。
可以这样赋值:
P2^0 = X;
16
长治学院学士学位论文
P2^1= X; P2^2= X;
但这种赋值方式在这三个端口值不断变化的情况下,较为繁琐,所以利用C语言按位与,按位或,左右位移等方法较为简便,例如:
P2 &= 0xf8; /*给P2口赋位选值前,先将p2与(1111 1000)
逻辑与,将P2^0,P2^1,P2^2清零,从而不影 响其他位原来的电平*/
/*将位选信号放进P2口的低三位,只改 变P2口低三位的值,不影响其他位*/
P2 |= weitable[w];
显示模块的程序代码中对外提供一个接口:display(d , w)函数。其中d是段选参数,作用是显示什么数字;w是位选信号,作用是在那一位上显示。调用起来相当方便。
显示的方法是动态扫描显示,即每次只能在数码管的某一位上显示一个数字,显示完当前数字之后立即显示下一位数字,当中间间隔小于20m时,由于人体视觉有一定的滞留时间,所以无法察觉闪烁感,视觉效果与多位同时显示一致。
17
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库储油罐实时监测系统的设计与实现 - 图文(4)在线全文阅读。
相关推荐: