欢迎大家来到PIC单片机学习网,如果您用http://www.pic16.com/无法顺利的访问本站,请改用镜像站点http://www.cxqmcu.com/试试.

基于MCD-DEMO板的DS18B20通信程序(由网友安步当车提供)

适合初学者的1BUS总线-DS18B20的小例子

;非常感谢陈老板提供给本人的MCD2及DEMO实验板,最近本人用DEMO及DS18B20完成了1BUS的数据传递
;       以下是用该设备完成的1BUS的简单练习。
       #INCLUDE    P16F877A.INC
       DAT_D       EQU       PORTA
       DAT_T       EQU       TRISA
       TMP0        EQU       30H
       PDBYTE      EQU       TMP0+1
       COUNT       EQU       TMP0+2
       IOBYTE      EQU       TMP0+3
       WENDUH      EQU       TMP0+4
       WENDUL      EQU       TMP0+5
       DQ          EQU       2
       ORG         00H
       NOP
       NOP
SETUP:
       BCF         STATUS,RP0
       BCF         STATUS,GIE
       CLRF        PORTC
       CLRF        PORTA
       BSF         STATUS,RP0
       MOVLW       H'07'
       MOVWF       ADCON1  
       CLRF        TRISC
       MOVLW       H'0FF'
       MOVWF       TRISA
       BCF         STATUS,RP0
       GOTO        START
START:
       BTFSS       PORTA,DQ
       GOTO        START
       CALL        OW_RESET     ;初始化DS18B20
       BTFSS       PDBYTE,0
       GOTO        ERROR_1
       MOVLW       H'0CC'       ;直访ROM指令
       CALL        DSTXBYTE
       MOVLW       H'44'        ;转换温度指令
       CALL        DSTXBYTE
WAIT1:
       CALL        DELAY
       CALL        DELAY
       CALL        OW_RESET     ;初始化DS18B20
       MOVLW       H'0CC'
       CALL        DSTXBYTE     ;直访ROM指令
       MOVLW       H'0BE'
       CALL        DSTXBYTE     ;读取温度命令
       CALL        DSRXBYTE
       NOP
       MOVF        IOBYTE,W
       MOVWF       PORTC        ;显示温度低字节(二进制)
       GOTO        START
ERROR_1:
       NOP
       GOTO        START

;************************************************************************************
OW_HIZ MACRO
;强制DQ变为高组态
       BSF     STATUS,RP0     ;选择数据存储器BANK1
       BSF     DAT_T,DQ       ;使DQ引脚变为高阻态
       BCF     STATUS,RP0     ;选择数据存储器的BANK0
       ENDM
;--------------------------------------------------------------------
OW_LO  MACRO
;强制DQ变为逻辑低电平
       BCF     STATUS,RP0     ;选择数据存储器的BANK0
       BCF     DAT_D,DQ       ;清除DQ位
       BSF     STATUS,RP0     ;选择数据存储器的BANK1
       BCF     DAT_T,DQ       ;把DQ引脚作为输出
       BCF     STATUS,RP0     ;选择数据存储器的BANK0
       ENDM
;--------------------------------------------------------------------
WAIT   MACRO   TIME
;延时TIMEUS
;时间必须是5US的整数
       MOVLW   (TIME/5)-1     ;处理时间:1US
       MOVWF   TMP0           ;处理时间:1US
       CALL    WAIT5U         ;处理时间:2US
       ENDM  
;************************************************************************************
WAIT5U:
;需要5US来完成
       NOP                    ;处理时间为1US
       NOP                    ;处理时间为1US
       DECFSZ   TMP0,F        ;如果不为零,处理时间为1US,如果为零,处理时间为2US
       GOTO     WAIT5U        ;处理时间为2US
       RETLW    0             ;处理时间为2US
;************************************************************************************
OW_RESET:
       OW_HIZ                 ;以口线为高电平开始
       CLRF     PDBYTE        ;清除PD字节
       OW_LO                  ;
       WAIT     D'500'        ;驱动器输出低电平500US
       OW_HIZ                 ;
       WAIT     D'70'         ;释放口线,等待PD脉冲70US
       BTFSS    DAT_D,DQ      ;读PD脉冲
       INCF     PDBYTE,F      ;如果检测到了PD脉冲,就把PDBYTE置位1
       WAIT     D'430'        ;在PD脉冲后等待430US
       RETLW    0             ;
;--------------------------------------------------------------------
DSTXBYTE:
       MOVWF    IOBYTE        ;要发送的字节从W开始
       MOVLW    D'8'          ;从IOBYTE开始发送
       MOVWF    COUNT         ;置COUNT为8,表示要发送的比特数
DSTXLP:
       OW_LO                  ;
       NOP                    ;
       NOP
       NOP                    ;口线变低电平5US
       NOP
       NOP
       RRF      IOBYTE,F      ;数据字节
       BTFSC    STATUS,C      ;检查IOBYTE的LSB是1还是0
       BSF      DAT_D,DQ      ;如果LSB是1,线路为高电平
       WAIT     D'60'         ;连续驱动线路60US
       OW_HIZ                 ;为了上拉,释放口线
       NOP
       NOP                    ;2US的恢复时间
       DECFSZ   COUNT,F       ;位计数器减1
       GOTO     DSTXLP        ;
       RETLW    0             ;          
;--------------------------------------------------------------------
DSRXBYTE:
       MOVLW    D'8'          ;读入的字节保存入IOBYTE
       MOVWF    COUNT         ;把COUNT设为8,来进行位数计数
DSRXLP:
       OW_LO                  ;
       NOP
       NOP
       NOP                    ;把DQ变低6US
       NOP
       NOP
       NOP                    ;
       OW_HIZ                 ;变为HIZ,等待4US
       NOP
       NOP
       NOP
       NOP                    ;
       MOVF      DAT_D,W      ;读DQ
       ANDLW     B'00000100'  ;屏蔽DQ位
       ADDLW     D'255'       ;如果DQ=1,则C=1;如果DQ=0则C=0
       RRF       IOBYTE,F     ;把C移位至IOBYTE
       WAIT      D'50'        ;等50US直到时隙末
       DECFSZ    COUNT,F      ;位计数器减1
       GOTO      DSRXLP       ;
       RETLW     0
;************************************************************************************
DELAY                      
                             ;子程序名,也是子程序入口地址
       movlw   0Ffh          ;将外层循环参数值FFH经过W
       movwf   H'20'          ;送入用作外循环变量的20H单元
lp0    movlw   0Ffh          ;将内层循环参数值FFH经过W
       movwf   21h           ;送入用作内循环变量的21H单元
lp1    decfsz   21h,F         ;变量21H内容递减,若为0跳跃
       goto     lp1           ;跳转到LP1处
       decfsz    20h,F         ;变量20H内容递减,若为0跳跃
       goto     lp0           ;跳跃到LP0处
       return                 ;返回主程序
       END




----------------------------------------------
QQ:315716395 岁月
E-MAIL:wzr12@163.com
点击查看用户来源及管理,发贴IP:60.176.207.251 2005-4-3 18:42:21
手机短信     编辑这个贴子    
  陈学乾 帅哥哟,离线,有人找我吗?
  
  
  等级:管理员
  文章:2608
  积分:17496
  注册:2004-8-17
手机订阅该主题,当有人回复的时候,您可以第一时间得到此信息  给陈学乾发送一个手机短消息 给陈学乾发送一个短消息  把陈学乾加入好友  查看陈学乾的个人资料  搜索陈学乾在『 PIC单片机初学论坛 』  的所有贴子  点击这里发送电邮给陈学乾  引用回复这个贴子  回复这个贴子 2
发贴心情 
安步当车就是好人啊,感谢你!!!!!

----------------------------------------------
愿我们大家一起努力,把PIC单片机学习网打造成全国最大的单片机交流平台. http://www.pic16.com
点击查看用户来源及管理,发贴IP:218.18.180.27 2005-4-3 19:21:30
手机短信     编辑这个贴子     
  rainxrx 帅哥哟,在线,有人找我吗?
  
  
  等级:版主
  文章:233
  积分:1017
  注册:2004-11-13
手机订阅该主题,当有人回复的时候,您可以第一时间得到此信息  给rainxrx发送一个手机短消息 给rainxrx发送一个短消息  把rainxrx加入好友  查看rainxrx的个人资料  搜索rainxrx在『 PIC单片机初学论坛 』  的所有贴子  点击这里发送电邮给rainxrx  引用回复这个贴子  回复这个贴子 3
发贴心情 

小安就是好人啊!!!!!!!!

向安斑竹 学习   学习

点击查看用户来源及管理,发贴IP:218.0.250.106 2005-4-4 6:45:56
手机短信     编辑这个贴子     
  bunny98 帅哥哟,离线,有人找我吗?
  
  
  等级:蝙蝠侠
  文章:215
  积分:1232
  注册:2004-8-18
手机订阅该主题,当有人回复的时候,您可以第一时间得到此信息  给bunny98发送一个手机短消息 给bunny98发送一个短消息  把bunny98加入好友  查看bunny98的个人资料  搜索bunny98在『 PIC单片机初学论坛 』  的所有贴子  点击这里发送电邮给bunny98  引用回复这个贴子  回复这个贴子 4
发贴心情 
DS18B20完成了1BUS  能不能简单的介绍一下

----------------------------------------------
bunny98@sina.com  
点击查看用户来源及管理,发贴IP:222.76.15.217 2005-4-4 7:25:37
手机短信     编辑这个贴子     
  bunny98 帅哥哟,离线,有人找我吗?
  
  
  等级:蝙蝠侠
  文章:215
  积分:1232
  注册:2004-8-18
手机订阅该主题,当有人回复的时候,您可以第一时间得到此信息  给bunny98发送一个手机短消息 给bunny98发送一个短消息  把bunny98加入好友  查看bunny98的个人资料  搜索bunny98在『 PIC单片机初学论坛 』  的所有贴子  点击这里发送电邮给bunny98  引用回复这个贴子  回复这个贴子 5
发贴心情 
DALLAS最新单线数字温度传感器DS18B20简介



新的“一线器件”体积更小、适用电压更宽、更经济                

Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的“DS1820”体积更小、更经济、更灵活。使您可以充分发挥“一线总线”的长处。

DS18B20、 DS1822 “一线总线”数字化温度传感器

同DS1820一样,DS18B20也 支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。

与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。

DS18B20、 DS1822 的特性

DS18B20可以程序设定9~12位的分辨率精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!

DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。

 

继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。

新特点:

适用电压为3V~5V
与DS1820软件略有不同
9~12位分辨率可调
TO-92、SOIC及CSP封装可选
经济型版本无EEPROM
DS18xx传统特性:
测温范围-55°C ~ +125°C
-10°C to +85°C范围内±0.5°C ,(DS1822除外)
用户可定义的EEPROM,设定的报警温度存在非易失存储器中(DS1822除外)
无需外部元件

一线总线”特征:

独特的电源和信号复合在一起
仅使用一条口线
每个芯片唯一编码,支持联网寻址
简单的网络化的温度感知
零功耗等待

 

DS18xx产品性能对照表

 

型号

工作电压

分辨率

精度

EEPROM

软件兼容性

封装

采集模块

DS1820

4.3~5.5V

> 9 位

±0.5°C

第一代产品

SSOP, PR-35

LTM-8000系列

DS18B20

3.0~5.5V

9 位~12位

±0.5°C

与DS1820部分兼容

SOIC,TO-92

LTM-8000系列

DS1822

3.0~5.5V

9 位~12位

±2°C

同DS18B20

SOIC,TO-92

LTM-8000系列



----------------------------------------------
bunny98@sina.com  
点击查看用户来源及管理,发贴IP:222.76.15.217 2005-4-4 7:28:42
手机短信     编辑这个贴子     
  明天及以后 帅哥哟,离线,有人找我吗?
  
  
  等级:侠之大者
  文章:128
  积分:616
  注册:2005-1-13
手机订阅该主题,当有人回复的时候,您可以第一时间得到此信息  给明天及以后发送一个手机短消息 给明天及以后发送一个短消息  把明天及以后加入好友  查看明天及以后的个人资料  搜索明天及以后在『 PIC单片机初学论坛 』  的所有贴子  点击这里发送电邮给明天及以后  引用回复这个贴子  回复这个贴子 6
发贴心情 
厉害!
点击查看用户来源及管理,发贴IP:218.18.29.124 2005-4-7 16:48:47
手机短信     编辑这个贴子     
  安步当车 帅哥哟,离线,有人找我吗?
  
  
  等级:版主
  文章:615
  积分:2087
  注册:2004-11-17
手机订阅该主题,当有人回复的时候,您可以第一时间得到此信息  给安步当车发送一个手机短消息 给安步当车发送一个短消息  把安步当车加入好友  查看安步当车的个人资料  搜索安步当车在『 PIC单片机初学论坛 』  的所有贴子  点击这里发送电邮给安步当车  引用回复这个贴子  回复这个贴子 7
发贴心情 
这个是877的程序

----------------------------------------------
QQ:315716395 岁月
E-MAIL:wzr12@163.com

 

PIC单片机学习网  http://www.pic16.com       http://www.cxqmcu.com