PIC单片机论坛论坛展示区(非讨论区)(这个版块不能发新贴)『 乾龙盛开发板/实验板编程实例 』 → [QL200]DS18B20温度采集程序[PIC16F877A+汇编语言]


  共有60803人关注过本帖树形打印

主题:[QL200]DS18B20温度采集程序[PIC16F877A+汇编语言]

帅哥哟,离线,有人找我吗?
zhongruntian
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 丐帮帮主
等级:老师(版主) 帖子:9899 积分:201298 威望:0 精华:32 注册:2005-3-13 12:01:00
[QL200]DS18B20温度采集程序[PIC16F877A+汇编语言]  发帖心情 Post By:2007-3-13 10:36:00

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:



http://www.cevx.com/bbs/index.php
支持(0中立(1反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
zhongruntian
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 丐帮帮主
等级:老师(版主) 帖子:9899 积分:201298 威望:0 精华:32 注册:2005-3-13 12:01:00
  发帖心情 Post By:2007-3-13 10:37:00

;实验目的:熟悉DS18B20的使用
;六位数码管显示温度结果,其中整数部分2位,小数部分4位
;每次按下RB0键后进行一次温度转换。
;硬件要求:把DS18B20插在18B20插座上
;          拨码开关S10第1位置ON,其他位置OFF
;          拨码开关S5、S6全部置ON,其他拨码开关全部置OFF
;*****************以下是暂存器的定义*****************************
#INCLUDE<P16F877A.INC>
#DEFINE DQ PORTA,0         ;18B20数据口
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;调试模式关闭,写保护,一半ROM可在线改写,EEPROM加密,低压编程关闭,掉电检测关闭,上电延时开,看门狗关,4M晶振HS振荡
 
    CBLOCK 20H
DQ_DELAY1
DQ_DELAY2
TEMP
TEMP1
TEMP2                         ;存放采样到的温度值
TEMP3
COUNT
COUNT1
 ENDC
TMR0_VALUE        EQU  0AH   ;寄存器初值为6,预分频比1:4,中断一次时间为4*(256-6)=1000us
DQ_DELAY_VALUE1   EQU  0FAH
DQ_DELAY_VALUE2   EQU  4H

;**********************以下是程序的开始************************
 ORG    00H             
    NOP  
 GOTO   MAIN             ;入口地址
 ORG    04H
    RETFIE                  ;在中断入口出放置一条中断返回指令,防止干扰产生中断

TABLE
     ADDWF       PCL,1  
     RETLW       0C0H          ;0的编码(公阳极数码管)                            
     RETLW       0F9H          ;1的编码
     RETLW       0A4H          ;2的编码
     RETLW       0B0H          ;3的编码
     RETLW       99H           ;4的编码
     RETLW       92H           ;5的编码
  RETLW       082H         ;6
  RETLW       0F8H         ;7
  RETLW       080H         ;8
  RETLW       090H         ;9

;***************************主程序*******************************
MAIN
    CLRF     PORTA
    CLRF     PORTB
    BANKSEL  TRISA
    CLRF     TRISA              ;A口所有先设置为输出
    CLRF     TRISD
    MOVLW    01H
    MOVWF    TRISB              ;B0口为输入,其他为输出
    MOVLW    06H
    MOVWF    ADCON1             ;关闭所有A/D口
    MOVLW    01H
    MOVWF    OPTION_REG         ;分频比1:4,定时器,内部时钟源
 BCF      STATUS,RP0
   
 CLRF     TEMP
    CLRF     TEMP1
    CLRF     TEMP2              ;清零临时寄存器
    MOVLW    8H
    MOVWF    COUNT
    MOVLW    38H
    MOVWF    FSR
    CLRF     INDF
    INCF     FSR,1
    DECFSZ   COUNT,1
    GOTO     $-3
     



http://www.cevx.com/bbs/index.php
支持(1中立(0反对(2单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
zhongruntian
  3楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 丐帮帮主
等级:老师(版主) 帖子:9899 积分:201298 威望:0 精华:32 注册:2005-3-13 12:01:00
  发帖心情 Post By:2007-3-13 10:37:00

[续2楼]

;****************************循环处理部分************************

;先启动18B20温度转换程序,在判断温度转换是否完成(需750us)
;未完成则调用显示子程序,直到完成温度转换
;完成后读取温度值
;送LCD显示
LOOP
    BTFSC    PORTB,0          ;判断温度转换按键是否按下
    GOTO     LOOP1            ;否,转显示
    CALL     DELAY            ;消抖
    BTFSC    PORTB,0          ;再次判断
    GOTO     LOOP1
    CALL     RESET_18B20      ;调用复位18B20子程序
    MOVLW    0CCH
    MOVWF    TEMP
    CALL     WRITE_18B20      ;SKIP ROM命令
    MOVLW    44H
    MOVWF    TEMP
    CALL     WRITE_18B20      ;温度转换命令  
    CLRF     STATUS
    CALL     DELAY_750MS      ;调用温度转换所需要的750MS延时
    NOP
    CALL     RESET_18B20     
    MOVLW    0CCH
    MOVWF    TEMP
    CALL     WRITE_18B20      ;SKIP ROM命令
    MOVLW    0BEH
    MOVWF    TEMP
    CALL     WRITE_18B20      ;读温度命令
    CALL     READ_18B20       ;调用读温度低字节
    MOVFW    TEMP
    MOVWF    TEMP1            ;保存到TEMP1
    CALL     READ_18B20       ;调用读温度高字节
    MOVFW    TEMP
    MOVWF    TEMP2            ;保存到TMEP2
 CALL     RESET_18B20     
LOOP1
    CALL     TEMP_CHANGE      ;调用温度转换程序
    CALL     DISPLAY          ;调用LCD显示程序
    GOTO     LOOP             ;循环工作

;*********************复位DS18B20子程序**************************
RESET_18B20
;根据DATASHEET介绍,写数据时应遵照如下规定:
;主控制器把总线拉低至少480us,
;18B20等待15-60us后,把总线拉低做为返回给控制器的应答信号   
    BANKSEL  TRISA
    BCF      TRISA,0
    BCF      STATUS,RP0
    BCF      DQ
    MOVLW    0A0H
    MOVWF    COUNT           ;160US
    DECFSZ   COUNT,1
    GOTO     $-1             ;拉低480us
    BSF      DQ              ;释放总线 
    MOVLW    14H
    MOVWF    COUNT
    DECFSZ   COUNT,1
    GOTO     $-1             ;等待60us
    BANKSEL  TRISA
    BSF      TRISA,0         ;DQ设置为输入
    BCF      STATUS,RP0
    BTFSC    DQ              ;数据线是否为低
    GOTO     RESET_18B20     ;否则继续复位
    MOVLW    4H
    MOVWF    COUNT
    DECFSZ   COUNT,1         ;延时一段时间后再次判断
    GOTO     $-1
    BTFSC    DQ
    GOTO     RESET_18B20
    MOVLW    4BH            
    MOVWF    COUNT
    DECFSZ   COUNT,1
    GOTO     $-1
    BANKSEL  TRISA
    BCF      TRISA,0         ;DQ设置为输出
    BCF      STATUS,RP0
    RETURN
;*********************写DS18B20子程序****************************
WRITE_18B20
;根据DATASHEET介绍,写数据时应遵照如下规定:
;写数据0时,主控制器把总线拉低至少60us
;写数据1时,主控制器把总线拉低,但必须在15us内释放   
    MOVLW    8H
    MOVWF    COUNT           ;8位数据
    BANKSEL  TRISA
    BCF      TRISA,0
    BCF      STATUS,RP0
    BCF      STATUS,C
WRITE_18B20_1
    BSF      DQ              ;先保持DQ为高
    MOVLW    5H
    MOVWF    COUNT1
    BCF      DQ              ;拉低DQ15us
    DECFSZ   COUNT1,1
    GOTO     $-1           
    RRF      TEMP,1         
    BTFSS    STATUS,C        ;判断写的数据为0还是1
    GOTO     WRITE_0         
    BSF      DQ              ;为1,立即拉高数据线
    GOTO     WRITE_END
WRITE_0
    BCF      DQ              ;继续保持数据线为低
WRITE_END
    MOVLW    0FH
    MOVWF    COUNT1          ;保持45ms
    DECFSZ   COUNT1,1
    GOTO     $-1
    BSF      DQ              ;释放总线
    DECFSZ   COUNT,1         ;是否写完8位数据
    GOTO     WRITE_18B20_1
    RETURN
;**********************读DS18B20子程序****************************
READ_18B20
;根据DATASHEET介绍,读数据时应遵照如下规定:
;读数据0时,主控制器把总线拉低后,18B20再把总线拉低60us
;读数据1时,主控制器把总线拉低后,保持总线状态不变
;主控制器在数据线拉低后15us内读区数据线上的状态。        
     MOVLW    8H               ;一次读8位数据
     MOVWF    COUNT
READ_18B20_1
     BANKSEL  TRISA
     BCF      TRISA,0          ;数据线先设为输出
     BCF      STATUS,RP0
     BCF      DQ               ;先拉低数据线
     MOVLW    1H
     MOVWF    COUNT1         
     DECFSZ   COUNT1,1         ;拉低总线3us
     GOTO     $-1
     BSF      DQ               ;释放总线
     BANKSEL  TRISA
     BSF      TRISA,0          ;数据线设为输入
     BCF      STATUS,RP0
     MOVLW    2H
     MOVWF    COUNT1
     DECFSZ   COUNT1,1         ;延时6ms
     GOTO     $-1
     BSF      STATUS,C
     BTFSS    DQ               ;判断数据线状态
     BCF      STATUS,C
     RRF      TEMP,1           ;移位到TEMP中
     MOVLW    12H
     MOVWF    COUNT1
     DECFSZ   COUNT1,1
     GOTO     $-1              ;读一位数据至少需要60us
     DECFSZ   COUNT,1          ;是否读完8位
     GOTO     READ_18B20_1
     RETURN



http://www.cevx.com/bbs/index.php
支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
firstzp
  4楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:初中一年级 帖子:44 积分:1373 威望:0 精华:0 注册:2007-7-20 20:44:00
  发帖心情 Post By:2007-9-20 11:53:00

好东西,谢谢分享!


支持(0中立(3反对(2单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
zszwl2004
  5楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小学三年级 帖子:10 积分:356 威望:0 精华:0 注册:2007-12-21 9:34:00
  发帖心情 Post By:2007-12-21 10:18:00

非常感谢楼主!!!!!!!

图片点击可在新窗口打开查看

支持(1中立(1反对(4单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
zszwl2004
  6楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小学三年级 帖子:10 积分:356 威望:0 精华:0 注册:2007-12-21 9:34:00
  发帖心情 Post By:2007-12-21 10:18:00

能加上原理图就好了

支持(2中立(3反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
zhongruntian
  7楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 丐帮帮主
等级:老师(版主) 帖子:9899 积分:201298 威望:0 精华:32 注册:2005-3-13 12:01:00
  发帖心情 Post By:2007-12-23 8:51:00

产品的使用说明书里有原理图


http://www.cevx.com/bbs/index.php
支持(2中立(1反对(2单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
cnlgm
  8楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:大学一年级 帖子:191 积分:4899 威望:0 精华:0 注册:2004-9-5 22:52:00
  发帖心情 Post By:2008-4-23 21:03:00

如何设置高、低报警呢?图片点击可在新窗口打开查看

支持(3中立(3反对(1单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
zhongruntian
  9楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 丐帮帮主
等级:老师(版主) 帖子:9899 积分:201298 威望:0 精华:32 注册:2005-3-13 12:01:00
  发帖心情 Post By:2008-4-23 22:24:00

内部有相关寄存器,把报警值写到里面就可以了.


http://www.cevx.com/bbs/index.php
支持(2中立(4反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
LIUHUA1362000
  10楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小学二年级 帖子:4 积分:296 威望:0 精华:0 注册:2008-11-22 18:44:00
  发帖心情 Post By:2008-11-30 19:48:00

百分百按照操作,没有温度值显示。以为18B20坏了,换2块后,一样没有任何温度值显示。


支持(2中立(1反对(2单帖管理 | 引用 | 回复 回到顶部
总数 13 1 2 下一页

返回版面帖子列表(如果下面的回复窗口不可输入,请点“代码模式”再点“设计模式”)

[QL200]DS18B20温度采集程序[PIC16F877A+汇编语言]








签名    小提示:如果上面的回复窗口不可输入,请先点“代码模式”然后再点“设计模式”,然后就可输入回复内容了
Google 全部 本站