已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于AT89C2051单片机的多路分布式温度遥测系统一、功能分型本次课程设计主要是基于AT89C2051 单片机的多路分布式测温系统,通过其与数字温度传感器DS18B20和PC 机相结合组成传感器测温网络,实现多路温度检测系统的硬件和软件设计。该系统由DS18B20与单片机AT89C2051 的接口电路,串口通信电路组成,通过软件编程发送到上位机(PC 机),并在PC 机上用VB 界面远程控制和显示测的温度值。该系统结构简单,抗干扰能力强,稳定可靠,适合于恶劣环境下进行现场温度测量,可应用于仓库测温、楼宇空调控和生产过程监控等领域。关键词:AT89C2051单片机;DS18B20;多路分布式;测温系统。二、选型部件2.1 AT89C2051单片机简介2.1.1 AT89C2051特性 与MCS51产品兼容 2K字节可重编程闪存 耐久性:1,000次读/写周期 工作电压2.7V至V 全静态运行:0Hz至24MHz 两级程序锁存 1288位内部RAM 15个可编程I/O口 两个16位定时器/计数器 六个中断源 可编程串行UART( = Universal Asynchronous Receiver Transmitter,通用异步收发器)通道 可直接驱动LED的输出 芯片级模拟比较器 低功耗空闲模式和微功耗模式(Power-down mode) 2.1.2 AT89C2051相关说明 AT89C2051是一种低电压、高性能的8位CMOS微型计算机。带2K字节的闪存和可擦可编程只读存储器(EPROM)。该器件应用爱特美尔(Atmel)的高密度非易失性技术生产,与工业级MCS51架构组相兼容。将一片通用的8位CPU与闪存集成在单块芯片上,爱特美尔AT89C2051是一种功能强大的微型计算机。它为许多嵌入式控制提供了高灵活性低成本的解决方案。 AT89C2051的标准特性如下:2K字节闪存,128字节RAM,15个I/O口,两个16位定时器/计数器,一个五失量两级中断结构,一个全双工串行通信口,一个精准模拟比较器,芯片级振荡器和时钟电路。另外,AT89C2051用静态逻辑设计,可在低至零频下工作,支持两种软件可选节能模式。空闲模式下CPU不工作,而RAM,定时器/计数器,串口和中断系统继续工作。微功耗模式(power-down mode)下保存RAM的内容,但冻结振荡器,禁止其它所有的芯片功能直到下一个硬件复位到来。AT89C2051是爱特美尔微控制器家族中经济划算的一款产品。它包含2K字节的闪速程度存储器。它与MCS-51架构完全兼容,并且可以使用MCS-51指令组来编程。但是当使用有些特定指令编程的时候,有几点必须注意:与跳转和分支相关的所有指令应该被限制,使得目标地址落在该单片机的物理内存范围之内,对AT89C2051来说是2K。程序员应对此负责。例如,对AT89C2051(带2K内存)来说,LJMP 7E0H是一个正确的指令,而LJMP 900H却是错误的。1.分支程序指令:LCALL,LJMP,ACALL,AJMP,SJMP,JMP A+DPTR只要编程者注意使这些指令的目标地址落在程序存储器大小(对89C2051来说是00H到7FFH)的物理界限内,这些无条件分支指令将正确执行。超出物理空间界限会导致未知的程度行为。CJNE,DJNZ,JB, JNB, JC, JNC, JBC, JN, JNZ这些条件分支指令也适合上面的规则。同样,超出内存界限,会导致不正确的执行结果。对于包括中断的应用,80C51家族架构的正常中断服务线程地址位置已被保留。2. MOVX相关指令,数据内存:AT89C2051包含128字节的内部数据存储器。于是,AT89C2051的堆栈深度被限制为128字节,可用RAM的大小。该单片机不支持外部数据存储器的存取,也不支持外部程序存储器的执行。所以,在程度中不应该包含MOVX指令。典型的80C51汇编程度仍可用于汇编指令,即便它们违反了上面提到的限制条件。了解所用单片机的物理特性和限制,并对指令做相应的调整是控制器使用者的责任。2.1.3 AT89C2051的几种模式(1)程序存储器加密芯片上有两个锁位(加密位),可以不对它们编程(U),也可以对它们编程(P)来获得如下表所列的附加特性:表1-6 锁存位保护模式:程序锁存位加密模式LB1-LB2加密类型1U-U无程序加密特性2P-U禁止再对闪存编程3P-P同模式2,同时禁止检验闪存注意:1.加密位只能用芯片擦除操作来清除。(2)空闲模式在空闲模式下,CPU自己转入睡眠状态,而芯片上其余所有的外围单元保持活动状态。该模式由软件调用。在该模式中,芯片级RAM和所有特殊功能寄存器的内容保持不变。空闲模式可以由任意有效的中断或硬件复位来终止。如果未使用外部上拉电阻,P1.0和P1.1应该被置为“0”,而如果用了外部上拉电阻,它们应该被置为“1”。应该注意,当空闲模式被硬件复位终止时,单片机从它转入睡眠前的状态恢复到正常的程序执行状态,比内部复位算法获得控制权提前两个机器周期。在这种场合,芯片内的硬件禁止访问内部RAM,但访问端口引线是允许的。为了消除当空闲模式被复位终止时可能往端口作不希望发生的写入操作,调用空闲模式指令后面紧跟的那条指令不应该是写端口或写外部内存的指令。(3)低功耗模式在低功耗模式下,振荡器被停止,调用低功耗模式的指令是被执行的最后一条指令。芯片级RAM和特殊功能寄存器保持它们的值,直到低功耗模式终止。终止低功耗模式的唯一方法硬件复位。复位操作重定义SFR,但是不会改变芯片级RAM。复位动作应在Vcc恢复到正常工作电平时进行,而且必须保持足够长的时间,以使振荡器重启动并趋于稳定。如果未使用外部上拉电阻,P1.0和P1.1应该被置为“0”,而如果用了外部上拉电阻,它们应该被置为“1”VCC 电源电压GND 接地端口1(Port 1)端口1是一个8位双向I/O口。端口引线P1.2到P1.7提供内部上拉电阻。P1.0和P1.1需要外接上拉电阻。P1.0和P1.1也分别作为芯片级精准模拟比较器的正输入(AIN0)和负输入(AIN1)。端口1输出缓冲器可吸收20mA的电流,可以直接驱动LED显示器。当向端口1写入1的时候,它们可以作为输入。当引线P1.2到P1.7用作输入并被外部拉低时,由于内部上拉电阻,它们将输出电流(IIL)。当对闪存编程和检验时,端口1也接收代码数据。端口(Port 3)端口3引线P3.0至P3.5,P3.7是7个双向I/O口,带内部上拉电阻。P3.6是一个硬接线的输入,它接到芯片级比较器的输出端,不能当作通用的I/O口使用。端口3的输出缓冲器能吸收20mA的电流。当端口3的引线被写入1时,它们由内部上拉电阻拉为高电平,可以用作输入。作为输入时,如果端口3的引线被外部拉低,由于内部上拉电阻的作用,它们将输出电流(IIL)。端口3也为AT89C2051的许多特殊功能服务,如下表:表1-7 端口号替代功能P3.0RXD串行输入口P3.1TXD串行输出口P3.2INT0外部中断0P3.3INT1外部中断1P3.4T0定时器0外部输入P3.5T1定时器1外部输入当对闪存编程和检验时,端口3也接收一些控制信号。RST:复位输入。当RST引线被置为高电平时,所有的I/O口复位为1。当振荡器工作的时候,保持RST引线的高电平两个机器周期,将使单片机复位。每个机器周期为12个振荡器或时钟周期。XTA1:反向振荡放大器和内部时钟工作电路的输入。XTA2:内部反向振荡放大器的输出。振荡器的特性:XTAL1和XTAL2分别是反向放大器的输入和输出,该放大器可设置用作芯片级的振荡器,如图1所示。石英晶振和陶瓷谐振器均可使用。要使用外部时钟源来驱动单片机,XTAL2应该被留空,而从XTA1接入时钟信号,如图2所示。由于通过一个两分频触发器输入到内部时钟电路,所以对外部时钟的占空比不作要求,但是必须注意最小和最大电压的高低时间规格。2.2 DS18B20温度传感器2.2.1 DS18B20的特点DALLAS 最新单线数字温度传感器DS18B20 简介新的“一线器件”体积更小、适用电压更宽、更经济Dallas 半导体公司的数字化温度传感器DS1820 是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、DS1822“一线总线”数字化温度传感器同DS1820 一样,DS18B20 也支持“一线总线”接口,测量温度范围为-55+125,在-10+85范围内,精度为0.5。DS1822 的精度较差为2 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V 的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。DS18B20、DS1822 的特性DS18B20 可以程序设定912 位的分辨率,精度为0.5。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。DS18B20 的性能是新一代产品中最好的!性能价格比也非常出色!DS1822 与DS18B20 软件兼容,是DS18B20 的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为2,适用于对性能要求不高,成本控制严格的应用,是经济型产品。继“一线总线”的早期产品后,DS18B20 开辟了温度传感器技术的新概念。DS18B20和DS1822 使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。2.2.2 DS18B20的内部结构DS18B20 内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。DS18B20 的管脚排列如下:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。图 2-1表2-1 二进制补码光刻ROM 中的64 位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64 位光刻ROM 的排列是:开始8 位(28H)是产品类型标号,接着的48 位是该DS18B20 自身的序列号,最后8 位是前面56 位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM 的作用是使每一个DS18B20 都各不相同,这样就可以实现一根总线上挂接多个DS18B20 的目的。DS18B20 中的温度传感器可完成对温度的测量,以12 位转化为例:用16 位符号扩展的二进制补码读数形式提供,以0.0625/LSB 形式表达,其中S 为符号位。这是12 位转化后得到的12 位数据,存储在DS18B20 的两个8 比特的RAM 中,二进制中的前面5 位是符号位,如果测得的温度大于0,这5 位为0,只要将测到的数值乘于0.0625 即可得到实际温度;如果温度小于0,这5 位为1,测到的数值需要取反加1 再乘于0.0625 即可得到实际温度。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。表2-2 DS18B20 暂寸寄存器分布表2-3DS18B20 温度传感器的存储:DS18B20 温度传感器的内部存储器包括一个高速暂存RAM 和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL 和结构寄存器。暂存存储器包含了8 个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL 的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。该字节各位的意义:“TM R1 R0 1 1 1 1 1”,低五位一直都是1,TM 是测试模式位,用于设置DS18B20 在工作模式还是在测试模式。在DS18B20 出厂时该位被设置为0,用户不要去改动。R1 和R0 用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12 位)分辨率设置表:表2-4 分辨率设置表据DS18B20 的通讯协议,主机控制DS18B20 完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20 进行复位,复位成功后发送一条ROM 指令,最后发送RAM 指令,这样才能对DS18B20 进行预定的操作。复位要求主CPU 将数据线下拉500 微秒,然后释放,DS18B20 收到信号后等待1660 微秒左右,后发出60240 微秒的存在低脉冲,主CPU 收到此信号表示复位成功。表2-5 指令代码和功能2.2.3 DS18B20的使用注意事项DS18B20 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20 与微处理器间采用串行数据传送,因此,在对DS18B20 进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C 等高级语言进行系统程序设计时,对DS18B20 操作部分最好采用汇编语言实现。(2)在DS18B20 的有关资料中均未提及单总线上所挂DS18B20 数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。当单总线上所挂DS18B20 超过8 个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。(3)连接DS18B20 的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m 时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS18B20 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。(4)在DS18B20 发出温度转换命令后,程序总要等待DS18B20 的返回信号,一旦某个DS18B20 接触不好或断线,当程序读该DS18B20 时,将没有返回信号,程序进入死循环。这一点在进行DS18B20 硬件连接和软件设计时也要给予一定的重视。测温电缆线建议采用屏蔽4 芯双绞线,其中一对线接地线与信号线,另一组接VCC 和地线,屏蔽层在源端单点接地。2.2.4 DS18B20的工作原理图2-2 DS18B20 的工作原理图DS18B20 的测温原理如图1-2 所示,图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2 的脉冲输入。计数器1 和温度寄存器被预置在-55所对应的一个基数值。计数器1 对低温度系数晶振产生的脉冲信号进行减法计数当计数器1 的预置值减到0 时,温度寄存器的值将加1计数器1 的预置将重新被装入,计数器1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2 计数到0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1 的预置值。2.3 MAX232串口通信电路MAX232是TTL-RS232电平转换的典型芯片,按照芯片的推荐电路,取振荡电容为uF的时候,若输入为5V,输出可以达到-14V左右,输入为0V ,输出可以达到14V,在扇出电流为20mA的时候,处处电压可以稳定在 12V和-12V.因此,在功耗不是很大的情况下,可以将MAX232的输出信号经稳压块后作电源使用。2.3.1 MAX232主要特点1、单5V电源工作2、LinBiCMOSTM工艺技术3、两个驱动器及两个接收器4、30V输入电平5、低电源电流:典型值是8mA6、符合甚至优于ANSI标准 EIA/TIA-232-E及ITU推荐标准V.287、ESD保护大于MIL-STD-883(方 法3015)标准的2000V2.3.2 MAX232内部结构图2-3 max232引脚图232是电荷泵芯片,可以完成两路TTL/RS-232电平的转换,它的的9、10、11、12引脚是TTL电平端,用来连接单片机的。2.3.2 RS232串口通信电路图2-4 RS232串口通信电路串口通信电路采用MAX232电平转换芯片,一可方便电路的调试,减少单片机的损坏,并且应用其串口通信功能还可以实现与计算机间的数据传输。在下载程序时,MAX232的14脚接DB9的第二脚,13脚接DB9的第三脚;在无线通讯时,MAX232的13、14脚通过排线分别连接CC2430DB9的2、3脚。三、总体电路设计3.1电路硬件设计图3-1 电路原理图在单片机AT89C2051 的P1.4 至P1.7 上分别接一个数字温度传感器DS18B20,DS18B20 的1 脚接地,3 脚接+5V 电源并上拉4.7K 电阻。DS18B20 处于写存储器操作和温度A/D 变换操作时,总线上必须有强的上拉,上拉开启时间最大为10As。主机控DS18B20 完成温度转换必须经过3 个步骤: 初始化、ROM 操作指令、存储器操作指令。单片机系统所用的晶振频率为11.0592MHZ,根据DS18B20 的初始化时序、写时序和读时序,分别编写3 个子程序:INIT 为初始化子程序,WRITE 为写(命令或数据)子程序,READ 为读数据子程序,所有的数据读写均由最低位开始。我的设计原理是P1 口四路接受温度信号,然后发送到串口送入上位机,在上位机上完成对温度的显示和控制。3.2 电路软件设计3.2.1 DS18B20 的工作流程在对DS18B20 进行操作的整个工作过程中,主要包括三个关键过程:搜索DS18B20 序列号子程序; 启动在线DS18B20 作温度转换子程序: 读取在线DS18B20 的温度值子程序。在DS18B20 接入系统之前,应分别从激光ROM 中读出其序号,然后分别赋予在系统中的编号12N。单片机首先发出一复位脉冲,使信号线上所有的DS18B20芯片都被复位,然后从器件DS18B20 回送一存在脉冲,告知主机已准备就绪。主机检测到存在脉冲就发出一个ROM 操作命令,使序列号编码匹配的DS18B20被激活,准备接收下面的内存访问命令,其中包括读ROM,符合ROM,跳过ROM,告警搜索等。内存访问命令控制DS18B20 的工作状态,完成温度转换、存储、读取等一系列工作。图3-2 为同步启动单片机某位线上DS18B20 进行温度转换,然后从某指定的DS1820 中读出转换温度结果,完成一个DS18B20 的操作后,又转向另一个DS18B20 的操作,如此反复,直至所有在线DS18B20 的操作完成工作。图3-2 DS18B20 的工作流程图3.2.2 DS18B20 温度采样程序本系统采用P1 口四路分别接四个数字传感器DS18B20,在DS18B20 初始化后采集P1.4 至P1.7 四路温度,然后把采集的温度发送到串口送入PC 机(上位机),并在上位机用VB 远程控制和显示。图3-3 温度采样程序流程图3.2.3 串口通信PC 机与单片机的接口如图3-4 所示。AT89C2051 单片机通过串行口直接接收PC 机传送来的串行数据,然后把接收到的数据存入数据存储器。由于PC 机的串行口都是RS-232C 标准的接口,所以,其输入输出在电平上和采用TTL 电平的AT89C2051 在接口时会产生电平不同的问题。为了解决这个问题,在PC 机和单片机的串行通信电路中加入了MAX232 芯片,以实现TTL 电平和RS-232C 接口电平之间的转换。这样PC 机和AT89C2051 单片机进行串行通信时就可以顺利进行了。除了电路结构之外,要实现PC 机和AT89C2051 之间的通信,还需要有合适的通信软件。图3-4 串口通信原理图为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS 软件进行观察,这里我们利用一个免费的电脑串口调试软件。图3-5 电脑串口调试界面软件界面如图3-5 所示,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51 单片机实验板的串口也要和电脑的COM1 连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51 单片机实验板的电源,这时只要按下K1 一次,在串口调试助手软件的接收区界面中就会增加一个“AF”字符,表示单片机向电脑发送“AF”字符成功。串口实验的源程序如下所示:;这是一个AT89C2051 单片机实验开发板向PC 机的串口单向发送数据AF的演示程序;采用MAX232 专用芯片作RS232/TTL 电平转换。;通讯波特率为4800KBPS,只要按下一次K1(就是P3.6 引脚变成低电平);就发送一个16 进制的AF 字符ORG 0000HMOV SCON,#50H;设置成串口1 方式MOV TMOD,#20H;波特率发生器T1 工作在模式2 上MOV PCON,#80H;波特率翻倍为2400x2=4800BPSMOV TH1,#0F3H;预置初值(按照波特率2400BPS 预置初值)MOV TL1,#0F3H;预置初值(按照波特率2400BPS 预置初值)SETB TR1;启动定时器T1;以上完成通讯初始化设置WRIT:JB P3.6,$;判断K1 是否按下,如果没有按下就等待ACALL DELAY10;延时10 毫秒消触点抖动JB P3.6,WRIT;去除干扰信号JNB P3.6,$;等待按键松开MOV A,#0AFH;将16 进制的字符AF 发送到串口去MOV SBUF,A;将AF 通过串口发送出去AJMP WRIT;10 毫秒延时子程序DELAY10:MOV R4,#20D2:MOV R5,#248DJNZ R5,$DJNZ R4,D2RETEND这是上面程序汇编以后获得的编程器烧写文件:88.hex。3.2.4 VB 显示程序设计在上位机做好VB 显示界面,接受下位机发送的数据,做到正确显示。如单击串口开关就能显示测的P1.4 至P1.7 口上测得的温度。图3-6 VB 显示界面四、程序单片机AT89C2051 程序:#include #include #include #include /此文件中有_nop_()空操作函数#define uchar unsigned char#define uint unsigned intuchar ddt11; /发送的数据/*1820 脚定义*/sbit b1820_0 = P14;sbit b1820_1 = P15;sbit b1820_2 = P16;sbit b1820_3 = P17;bit ok_1820_0;/复位后,若存在置1,不在置0bit ok_1820_1;bit ok_1820_2;bit ok_1820_3;uchar wd_h,wd_l;/温度高8 位温度低8 位/*函数定义*/void ret1820_0(void);void ret1820_1(void);void ret1820_2(void);void ret1820_3(void);void write1820_0(uchar dda);void write1820_1(uchar dda);void write1820_2(uchar dda);void write1820_3(uchar dda);void read1820_0(void);void read1820_1(void);void read1820_2(void);void read1820_3(void);void qd1820_0(void);void qd1820_1(void);void qd1820_2(void);void qd1820_3(void);void zhuanhuan_0();void zhuanhuan_1();void zhuanhuan_2();void zhuanhuan_3();/*延时程序*/void delay(uint k) while(k) k-; /*1820_0 复位*/void ret1820_0(void) uchar i;b1820_0=1;_nop_();b1820_0=0;delay(68); /主机发出延时550 微秒的复位低脉冲b1820_0=1;for(i=30;i0;i-) /延时60us 等待DS18B20 回应 if(b1820_0) ok_1820_0=0; /1820 不存在else ok_1820_0=1; i=1;/1820 存在,及退出判断if(ok_1820_0) /1820 存在则延时 for(i=200;i0;i-) /延时240usb1820_0=1;/*1820_1 复位*/void ret1820_1(void) uchar i;b1820_1=1;_nop_();b1820_1=0;delay(68); /主机发出延时550 微秒的复位低脉冲b1820_1=1;for(i=30;i0;i-) /延时60us 等待DS18B20 回应 if(b1820_1) ok_1820_1=0; /1820 不存在else ok_1820_1=1; i=1;/1820 存在,及退出判断if(ok_1820_1) /1820 存在则延时 for(i=200;i0;i-) /延时240usb1820_1=1;/*1820_2 复位*/void ret1820_2(void) uchar i;b1820_2=1;_nop_();b1820_2=0;delay(68); /主机发出延时550 微秒的复位低脉冲b1820_2=1;for(i=30;i0;i-) /延时60us 等待DS18B20 回应 if(b1820_2) ok_1820_2=0; /1820 不存在else ok_1820_2=1; i=1;/1820 存在,及退出判断if(ok_1820_2) /1820 存在则延时 for(i=200;i0;i-) /延时240usb1820_2=1;/*1820 复位*/void ret1820_3(void) uchar i;b1820_3=1;_nop_();b1820_3=0;delay(68); /主机发出延时550 微秒的复位低脉冲b1820_3=1;for(i=30;i0;i-) /延时60us 等待DS18B20 回应 if(b1820_3) ok_1820_3=0; /1820 不存在else ok_1820_3=1; i=1;/1820 存在,及退出判断if(ok_1820_3) /1820 存在则延时 for(i=200;i0;i-) /延时240usb1820_3=1;/*b1820_0*/void write1820_0(uchar dda) uchar j;for(j=8;j0;j-) /先写低字节 b1820_0=1;_nop_();_nop_();b1820_0=0;_nop_(); /5uS delay_nop_();_nop_();_nop_();_nop_();if(dda&0x01) b1820_0=1; else b1820_0=0; dda=dda1;delay(7); /66uS delayb1820_0=1;void read1820_0(void) uchar i;for(i=8;i0;i-) /读低八位 wd_l=wd_l1;b1820_0=1;_nop_();_nop_();b1820_0=0;_nop_();_nop_();_nop_();_nop_();b1820_0=1;_nop_();_nop_();_nop_();_nop_();if(b1820_0) wd_l=wd_l|0x80; delay(7);/延时66uSfor(i=8;i0;i-) /读高八位 wd_h=wd_h1;b1820_0=1;_nop_();_nop_();b1820_0=0;_nop_();_nop_();_nop_();_nop_();b1820_0=1;_nop_();_nop_();_nop_();_nop_();if(b1820_0) wd_h=wd_h|0x80;delay(7);/延时66uS/*b1820_1*/void write1820_1(uchar dda) uchar j;for(j=8;j0;j-) /先写低字节 b1820_1=1;_nop_();_nop_();b1820_1=0;_nop_(); /5uS delay_nop_();_nop_();_nop_();_nop_();if(dda&0x01) b1820_1=1;else b1820_1=0;dda=dda1;delay(7); /66uS delayb1820_1=1;void read1820_1(void) uchar i;for(i=8;i0;i-) /读低八位 wd_l=wd_l1;b1820_1=1;_nop_();_nop_();b1820_1=0;_nop_();_nop_();_nop_();_nop_();b1820_1=1;_nop_();_nop_();_nop_();_nop_();if(b1820_1) wd_l=wd_l|0x80; delay(7);/延时66uSfor(i=8;i0;i-) /读高八位 wd_h=wd_h1;b1820_1=1;_nop_();_nop_();b1820_1=0;_nop_();_nop_();_nop_();_nop_();b1820_1=1;_nop_();_nop_();_nop_();_nop_();if(b1820_1) wd_h=wd_h|0x80; delay(7);/延时66uS/*b1820_2*/void write1820_2(uchar dda) uchar j;for(j=8;j0;j-) /先写低字节 b1820_2=1;_nop_();_nop_();b1820_2=0;_nop_(); /5uS delay_nop_();_nop_();_nop_();_nop_();if(dda&0x01) b1820_2=1;else b1820_2=0;dda=dda1;delay(7); /66uS delayb1820_2=1;void read1820_2(void) uchar i;for(i=8;i0;i-) /读低八位 wd_l=wd_l1;b1820_2=1;_nop_();_nop_();b1820_2=0;_nop_();_nop_();_nop_();_nop_();b1820_2=1;_nop_();_nop_();_nop_();_nop_();if(b1820_2) wd_l=wd_l|0x80;delay(7);/延时66uSfor(i=8;i0;i-) /读高八位 wd_h=wd_h1;b1820_2=1;_nop_();_nop_();b1820_2=0;_nop_();_nop_();_nop_();_nop_();b1820_2=1;_nop_();_nop_();_nop_();_nop_();if(b1820_2) wd_h=wd_h|0x80;delay(7);/延时66uS/*b1820_3*/void write1820_3(uchar dda) uchar j;for(j=8;j0;j-) /先写低字节 b1820_3=1;_nop_();_nop_();b1820_3=0;_nop_(); /5uS delay_nop_();_nop_();_nop_();_nop_();if(dda&0x01) b1820_3=1;else b1820_3=0;dda=dda1;delay(7); /66uS delayb1820_3=1;void read1820_3(void) uchar i;for(i=8;i0;i-) /读低八位 wd_l=wd_l1;b1820_3=1;_nop_();_nop_();b1820_3=0;_nop_();_nop_();_nop_();_nop_();b1820_3=1;_nop_();_nop_();_nop_();_nop_();if(b1820_3) wd_l=wd_l|0x80;delay(7);/延时66uSfor(i=8;i0;i-) /读高八位 wd_h=wd_h1;b1820_3=1;_nop_();_nop_();b1820_3=0;_nop_();_nop_();_nop_();_nop_();b1820_3=1;_nop_();_nop_();_nop_();_nop_();if(b1820_3) wd_h=wd_h|0x80;delay(7);/延时66uS/*启动1820*/void qd1820_0(void) ret1820_0();/复位,while(!b1820_0)/应答write1820_0(0xcc); /发skip rom 命令write1820_0(0x44); /发转换命令delay(60000);/750mS 等待转换delay(30000);ret1820_0();/复位,write1820_0(0xcc); /发skip rom 命令write1820_0(0xbe); /发读命令read1820_0();/*启动1820*/void qd1820_1(void) ret1820_1();/复位,while(!b1820_1)/应答write1820_1(0xcc); /发skip rom 命令write1820_1(0x44); /发转换命令delay(60000);/750mS 等待转换delay(30000);ret1820_1();/复位,write1820_1(0xcc); /发skip rom 命令write1820_1(0xbe); /发读命令read1820_1();/*启动1820*/void qd1820_2(void) ret1820_2();/复位,while(!b1820_2)/应答write1820_2(0xcc); /发skip rom 命令write1820_2(0x44); /发转换命令delay(60000);/750mS 等待转换delay(30000);ret1820_2();/复位,write1820_2(0xcc); /发skip rom 命令write1820_2(0xbe); /发读命令read1820_2();/*启动1820*/void qd1820_3(void) ret1820_3();/复位,while(!b1820_3)/应答write1820_3(0xcc); /发skip rom 命令write1820_3(0x44); /发转换命令delay(60000);/750mS 等待转换delay(30000);ret1820_3();/复位,write1820_3(0xcc); /发skip rom 命令write1820_3(0xbe); /发读命令read1820_3();/*zhuanhuan_0*/void zhuanhuan_0() /温度转换 uchar wd_zs,wd_xs,wd_fh; /温度整数部分,温度小数部分uint temp;/算温度小数部分时的中间变量int wd_bm;qd1820_0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大梦杯福建省初中数学竞赛试题
- 2025年企业培训项目与企业文化建设关联性研究报告
- 建筑材料检验员岗位招聘考试试卷及答案
- 2026年大学运动康复(运动康复学)试题及答案
- 2026年洋县公务员招聘笔试备考题库及答案解析
- 宜春市人力资源服务有限责任公司(南昌海关技术中心)招聘考试备考题库及答案详解
- 2026年汤旺县事业单位人员招聘笔试备考题库及答案解析
- 2026年南漳县事业单位人员招聘考试参考题库及答案解析
- 2026中航集团(国航股份)数字化转型办公室市场化人才招聘2人考试参考题库及答案详解
- 2026年庆安县公务员招聘笔试备考试题及答案解析
- 民宿员工聘用合同范本
- 企业级BOM培训课件
- 主井提升培训课件
- 浙江金石亚药医药科技有限公司迁扩建项目环评报告
- 酒店安全巡查日常检查记录表
- 招商岗位测试题及答案
- 医院后勤管理与设备职责
- 《左传》完整版本
- 周三多-管理学:原理与方法(第七版),第三章
- 无人机遥感图像融合
- 高考英语复习读后续写练习 善举篇 改变家乡为无法使用操场的孩子们带来福音 课件
评论
0/150
提交评论