📄 ds18b20.lis
字号:
.module DS18B20.c
.area text(rom, con, rel)
0000 .dbfile F:\我的设计\delphi\uartdispy\mcu\DS18B20.c
0000 .dbfunc e resetDS18B20 _resetDS18B20 fc
0000 ; errTime -> R20
.even
0000 _resetDS18B20::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 22
0004 ; /*********************************Copyright (c)*********************************
0004 ; **
0004 ; ** 文 件 名: defineLCD1602.h
0004 ; ** 最后修改日期: 2005年06月8日
0004 ; ** 描 述: 18B20温度检测IC驱动函数文件
0004 ; ** 版 本: V1.0
0004 ; ** 主 控 芯 片:M16 晶振频率:8 MHZ
0004 ; *******************************************************************************/
0004 ;
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #include "function.h"
0004 ; #include "define.h"
0004 ; #include "defineDS18B20.h"
0004 ;
0004 ;
0004 ; /**********************************************************************
0004 ; functionName: BYTE resetDS18B20(void)
0004 ; description :DS18B20初始化
0004 ; **********************************************************************/
0004 ; unsigned char resetDS18B20(void)
0004 ; {
0004 .dbline 23
0004 ; unsigned char errTime=0;
0004 4427 clr R20
0006 .dbline 24
0006 ; RLS_DS18B20; //释放总线
0006 8E98 cbi 0x11,6
0008 .dbline 25
0008 ; _NOP();
0008 0000 nop
000A .dbline 26
000A ; HLD_DS18B20; //Maga16控制总线
000A 8E9A sbi 0x11,6
000C .dbline 27
000C ; CLR_DS18B20; //强制拉低
000C 9698 cbi 0x12,6
000E .dbline 28
000E ; delayUs(255); //209.42us
000E 0FEF ldi R16,255
0010 0E940000 xcall _delayUs
0014 .dbline 29
0014 ; delayUs(255); //209.42us
0014 0FEF ldi R16,255
0016 0E940000 xcall _delayUs
001A .dbline 30
001A ; delayUs(255); //83.28us
001A 0FEF ldi R16,255
001C 0E940000 xcall _delayUs
0020 .dbline 32
0020 ; //以上的三个延时大于480us
0020 ; RLS_DS18B20; //释放总线,总线自动上拉
0020 8E98 cbi 0x11,6
0022 .dbline 33
0022 ; _NOP();
0022 0000 nop
0024 09C0 xjmp L3
0026 L2:
0026 .dbline 35
0026 ; while(STU_DS18B20)
0026 ; {
0026 .dbline 36
0026 ; delayUs(4); //5.15us
0026 04E0 ldi R16,4
0028 0E940000 xcall _delayUs
002C .dbline 37
002C ; errTime++;
002C 4395 inc R20
002E .dbline 38
002E ; if(errTime>20)
002E 84E1 ldi R24,20
0030 8417 cp R24,R20
0032 10F4 brsh L5
0034 .dbline 39
0034 ; return(0x00); //如果等带大于约 5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
0034 0027 clr R16
0036 10C0 xjmp L1
0038 L5:
0038 .dbline 40
0038 L3:
0038 .dbline 34
0038 8699 sbic 0x10,6
003A F5CF rjmp L2
003C .dbline 41
003C ; }
003C ; errTime=0;
003C 4427 clr R20
003E 09C0 xjmp L8
0040 L7:
0040 .dbline 43
0040 ; while(!(STU_DS18B20))
0040 ; {
0040 .dbline 44
0040 ; delayUs(4); //5.15us
0040 04E0 ldi R16,4
0042 0E940000 xcall _delayUs
0046 .dbline 45
0046 ; errTime++;
0046 4395 inc R20
0048 .dbline 46
0048 ; if(errTime>50)
0048 82E3 ldi R24,50
004A 8417 cp R24,R20
004C 10F4 brsh L10
004E .dbline 47
004E ; return(0x00); //如果等带大于约 5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
004E 0027 clr R16
0050 03C0 xjmp L1
0052 L10:
0052 .dbline 48
0052 L8:
0052 .dbline 42
0052 869B sbis 0x10,6
0054 F5CF rjmp L7
0056 .dbline 49
0056 ; }
0056 ; return(0xff);
0056 0FEF ldi R16,255
0058 .dbline -2
0058 L1:
0058 0E940000 xcall pop_gset1
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r errTime 20 c
005E .dbend
005E .dbfunc e readByteDS18B20 _readByteDS18B20 fc
005E ; retVal -> R20
005E ; i -> R22
.even
005E _readByteDS18B20::
005E 0E940000 xcall push_gset2
0062 .dbline -1
0062 .dbline 58
0062 ; }
0062 ;
0062 ;
0062 ; /**********************************************************************
0062 ; functionName: BYTE readByteDS18B20(void)
0062 ; description :读DS18B20一个字节
0062 ; **********************************************************************/
0062 ; unsigned char readByteDS18B20(void)
0062 ; {
0062 .dbline 60
0062 ; unsigned char i;
0062 ; unsigned char retVal=0;
0062 4427 clr R20
0064 .dbline 61
0064 ; RLS_DS18B20; //释放总线
0064 8E98 cbi 0x11,6
0066 .dbline 62
0066 ; for(i=8;i>0;i--)
0066 68E0 ldi R22,8
0068 1DC0 xjmp L16
006A L13:
006A .dbline 63
006A ; {
006A .dbline 64
006A ; retVal>>=1;
006A 4695 lsr R20
006C .dbline 65
006C ; HLD_DS18B20; //Maga16控制总线
006C 8E9A sbi 0x11,6
006E .dbline 66
006E ; CLR_DS18B20; //强制拉低
006E 9698 cbi 0x12,6
0070 .dbline 67
0070 ; NOP();
0070 0000 nop
0072 .dbline 68
0072 ; NOP();
0072 0000 nop
0074 .dbline 69
0074 ; NOP();
0074 0000 nop
0076 .dbline 70
0076 ; NOP();
0076 0000 nop
0078 .dbline 71
0078 ; NOP();
0078 0000 nop
007A .dbline 72
007A ; NOP();
007A 0000 nop
007C .dbline 73
007C ; NOP();
007C 0000 nop
007E .dbline 74
007E ; NOP(); //延时大于1us
007E 0000 nop
0080 .dbline 75
0080 ; RLS_DS18B20; //释放总线,DS18B20会将总线强制拉低
0080 8E98 cbi 0x11,6
0082 .dbline 76
0082 ; NOP();
0082 0000 nop
0084 .dbline 77
0084 ; NOP();
0084 0000 nop
0086 .dbline 78
0086 ; NOP();
0086 0000 nop
0088 .dbline 79
0088 ; if(STU_DS18B20)
0088 869B sbis 0x10,6
008A 01C0 rjmp L17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -