📄 ds18b20.lis
字号:
.module ds18b20.c
.area text(rom, con, rel)
0000 .dbfile E:\DS18B20\ds18b20.c
0000 .dbfunc e rst_DS18B20 _rst_DS18B20 fc
0000 ; errTime -> R20
.even
0000 _rst_DS18B20::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 22
0004 ; /****************************************
0004 ; ** 文 件 名: DS18B20.c **
0004 ; ** 日 期: 2007年04月08日 **
0004 ; ** 描 述: DS18B20函数 **
0004 ; ** 作 者:tonghe **
0004 ; ** 版 本: V1.0 **
0004 ; ** 主控芯片:M16 **
0004 ; ** 晶振频率:7.3728MHZ, 波特率9600 **
0004 ; ****************************************/
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #include <E:\DS18B20\define.h>
0004 ; #include <E:\DS18B20\function.h>
0004 ;
0004 ; /****************************************
0004 ; * 函数名称: uchar rst_DS18B20(void) *
0004 ; * 函数功能:DS18B20初始化 *
0004 ; * 入 口:无 *
0004 ; * 返 回:0x00为失败,0xFF为成功 *
0004 ; ****************************************/
0004 ; uchar rst_DS18B20(void)
0004 ; {
0004 .dbline 23
0004 ; uchar errTime=0;
0004 4427 clr R20
0006 .dbline 24
0006 ; RLS_DS18B20; //释放总线
0006 8C98 cbi 0x11,4
0008 .dbline 25
0008 ; _NOP();
0008 0000 nop
000A .dbline 26
000A ; HLD_DS18B20; //Maga16控制总线
000A 8C9A sbi 0x11,4
000C .dbline 27
000C ; CLR_DS18B20; //强制拉低
000C 9498 cbi 0x12,4
000E .dbline 28
000E ; delay_us(255); //209.42us
000E 0FEF ldi R16,255
0010 0E940000 xcall _delay_us
0014 .dbline 29
0014 ; delay_us(255); //209.42us
0014 0FEF ldi R16,255
0016 0E940000 xcall _delay_us
001A .dbline 30
001A ; delay_us(255); //83.28us
001A 0FEF ldi R16,255
001C 0E940000 xcall _delay_us
0020 .dbline 32
0020 ; //以上的三个延时大于480us
0020 ; RLS_DS18B20; //释放总线,总线自动上拉
0020 8C98 cbi 0x11,4
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 ; delay_us(4); //5.15us
0026 04E0 ldi R16,4
0028 0E940000 xcall _delay_us
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 8499 sbic 0x10,4
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 ; delay_us(4); //5.15us
0040 04E0 ldi R16,4
0042 0E940000 xcall _delay_us
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 849B sbis 0x10,4
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 read_DS18B20 _read_DS18B20 fc
005E ; retVal -> R20
005E ; i -> R22
.even
005E _read_DS18B20::
005E 0E940000 xcall push_gset2
0062 .dbline -1
0062 .dbline 59
0062 ; }
0062 ;
0062 ; /****************************************
0062 ; * 函数名称: uchar read_DS18B20(void) *
0062 ; * 函数功能:读DS18B20一个字节 *
0062 ; * 入 口:无 *
0062 ; * 返 回:读出的数据字节 *
0062 ; ****************************************/
0062 ; uchar read_DS18B20(void)
0062 ; {
0062 .dbline 61
0062 ; uchar i;
0062 ; uchar retVal=0;
0062 4427 clr R20
0064 .dbline 62
0064 ; RLS_DS18B20; //释放总线
0064 8C98 cbi 0x11,4
0066 .dbline 63
0066 ; for(i=8;i>0;i--)
0066 68E0 ldi R22,8
0068 18C0 xjmp L16
006A L13:
006A .dbline 64
006A ; {
006A .dbline 65
006A ; retVal>>=1;
006A 4695 lsr R20
006C .dbline 66
006C ; HLD_DS18B20; //Maga16控制总线
006C 8C9A sbi 0x11,4
006E .dbline 67
006E ; CLR_DS18B20; //强制拉低
006E 9498 cbi 0x12,4
0070 .dbline 68
0070 ; delay_us(5); //延时大于1us
0070 05E0 ldi R16,5
0072 0E940000 xcall _delay_us
0076 .dbline 69
0076 ; RLS_DS18B20; //释放总线,DS18B20会将总线强制拉低
0076 8C98 cbi 0x11,4
0078 .dbline 70
0078 ; delay_us(2);
0078 02E0 ldi R16,2
007A 0E940000 xcall _delay_us
007E .dbline 71
007E ; if(STU_DS18B20)
007E 849B sbis 0x10,4
0080 01C0 rjmp L17
0082 .dbline 72
0082 ; retVal|=0x80;
0082 4068 ori R20,128
0084 L17:
0084 .dbline 73
0084 00E1 ldi R16,16
0086 0E940000 xcall _delay_us
008A .dbline 74
008A 00E1 ldi R16,16
008C 0E940000 xcall _delay_us
0090 .dbline 75
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -