读单总线上并联的多个DS18B20器件的ROM程序(汇编)
### 读单总线上并联的多个DS18B20器件的ROM程序(汇编) #### 概述 本文档介绍了如何通过汇编语言实现读取连接在单总线上的多个DS18B20温度传感器的ROM码。DS18B20是一种常用的数字温度传感器,具有体积小、功耗低、接口简单等特点。每个DS18B20设备都有一个唯一的64位ROM码,使得即使多个设备共用同一总线,也能独立地识别每一个设备。 #### 单总线技术与DS18B20简介 单总线技术允许在一个单一的数据线上连接多个设备,简化了硬件设计并减少了所需的引脚数量。DS18B20是一种基于单总线技术的数字温度传感器,它可以将温度读数直接转换为数字信号输出,而无需额外的模数转换电路。每个DS18B20设备都有一个固定的64位ROM码,用于唯一标识该设备。 #### 程序结构与功能 本程序使用的是Microchip的PIC16F877A微控制器,并通过其RA4端口进行数据通信。程序的目标板使用4MHz的晶振,并且与上位机的通讯采用超级终端方式,波特率为9600bps,数据位为8位,无奇偶校验,停止位为1位。此外,程序还通过RC0端口控制LED灯的状态,以指示程序运行情况。 #### 主要功能点 1. **ROM码读取**: 当用户在超级终端上输入"A"时,程序会启动ROM码的读取过程,读取单总线上所有DS18B20设备的ROM码。 2. **ROM码搜索原理**: 通过搜索算法确定总线上连接的所有DS18B20设备的ROM码。这一过程涉及到一系列步骤,包括初始化总线、发送复位脉冲、发送ROM函数命令以及逐位读取ROM码等。 3. **ROM码解析**: 读取到的ROM码会被解析并显示在超级终端上。ROM码由64位组成,前8位代表设备类型,后56位用于唯一标识具体的DS18B20设备。 4. **错误处理**: 如果用户输入非"A"字符,则程序会直接将其回显到超级终端而不执行任何操作。 5. **LED状态指示**: 通过RC0端口控制LED灯的状态,以0.5秒的周期闪烁,指示程序运行正常。 #### 关键寄存器定义 - **LASTDISCREPANCY (60H)**: 标志位,指示前一次搜索到的已是最后一个器件。 - **ID_BIT_NUMBER (61H)**: 记录当前搜索的是ROM码中的哪一位。 - **DISCREPANCY_MARKER (62H)**: 在搜索过程中标记差异位。 - **ID_BIT_NUMBER_TEMP (63H)**: 在搜索过程中用于临时存储的寄存器。 - **LAST_ZERO (64H)**: 上次被写入0的值差异位的位置。 #### 关键指令与宏定义 - **BANKxMACRO**: 定义了不同的内存体选择宏,如BANK0、BANK1等,用于选择不同的内存体。 - **ORG**: 定义程序或数据的起始地址。 - **BSF/BCF**: 位设置和位清除指令,用于修改特定寄存器中的某一位。 - **GOTO**: 跳转指令,用于改变程序执行流。 - **CALL**: 子程序调用指令,用于调用子程序。 #### 结论 通过上述分析可以看出,此程序利用汇编语言实现了对单总线上并联的多个DS18B20温度传感器ROM码的读取。它不仅提供了一个实际应用案例,还展示了如何利用单总线技术以及DS18B20的特性来构建高效、可靠的温度监测系统。此程序对于学习单总线技术和DS18B20的应用具有较高的参考价值。
剩余14页未读,继续阅读
- YYYY-MM-DD2013-01-13细节不好,源程序不行,无仿真
- 帅冲2015-11-20算法可以借鉴,应用起来需要好的基础,慎重下载
- dangchaoqun062014-10-28汇编的算法可以借鉴
- cgbadsl2011-10-02这个pdf说的是不是很全,如果能有仿真效果会比较好。
- 粉丝: 2
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助