📄 ds18b20.lis
字号:
.module ds18b20.c
.area text(rom, con, rel)
0000 .dbfile F:\avr最小系统板\程序代码\ex15_ds18b20_1602\ds18b20.c
0000 .dbfunc e DS18B20_Reset _DS18B20_Reset fc
0000 ; err -> R20
.even
0000 _DS18B20_Reset::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 8
0004 ; #include <iom16v.h>
0004 ; #include <macros.h>
0004 ; #include "ds18b20.h"
0004 ; #include "lm1602.h"
0004 ;
0004 ;
0004 ; byte DS18B20_Reset(void) //DS18B20初始化函数
0004 ; {
0004 .dbline 9
0004 ; byte err=0;
0004 4427 clr R20
0006 .dbline 10
0006 ; DQ_OUT; //DQ复位
0006 A19A sbi 0x14,1
0008 .dbline 11
0008 ; _NOP();
0008 0000 nop
000A .dbline 12
000A ; _NOP();
000A 0000 nop
000C .dbline 13
000C ; DQ_L;
000C A998 cbi 0x15,1
000E .dbline 14
000E ; delay_nus(300); //延时470us
000E 0CE2 ldi R16,300
0010 11E0 ldi R17,1
0012 0E940000 xcall _delay_nus
0016 .dbline 16
0016 ; // DQ_H;
0016 ; DQ_IN;
0016 A198 cbi 0x14,1
0018 .dbline 17
0018 ; delay_nus(60); //延时100us
0018 0CE3 ldi R16,60
001A 10E0 ldi R17,0
001C 0E940000 xcall _delay_nus
0020 .dbline 18
0020 ; if(DQ_IN_H)
0020 83B3 in R24,0x13
0022 8270 andi R24,2
0024 8230 cpi R24,2
0026 09F4 brne L2
0028 .dbline 19
0028 ; err = 1;
0028 41E0 ldi R20,1
002A L2:
002A .dbline 20
002A ; delay_nus(60); //延时100us
002A 0CE3 ldi R16,60
002C 10E0 ldi R17,0
002E 0E940000 xcall _delay_nus
0032 .dbline 21
0032 ; return err;
0032 042F mov R16,R20
0034 .dbline -2
0034 L1:
0034 0E940000 xcall pop_gset1
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbsym r err 20 c
003A .dbend
003A .dbfunc e DS18B20_WriteBit _DS18B20_WriteBit fV
003A ; bitval -> R20
.even
003A _DS18B20_WriteBit::
003A 0E940000 xcall push_gset1
003E 402F mov R20,R16
0040 .dbline -1
0040 .dbline 25
0040 ; }
0040 ;
0040 ; void DS18B20_WriteBit(byte bitval)
0040 ; {
0040 .dbline 26
0040 ; DQ_OUT;
0040 A19A sbi 0x14,1
0042 .dbline 27
0042 ; _NOP();
0042 0000 nop
0044 .dbline 28
0044 ; _NOP();
0044 0000 nop
0046 .dbline 29
0046 ; DQ_L;//将DQ线拉低,开始写时间隙
0046 A998 cbi 0x15,1
0048 .dbline 30
0048 ; delay_nus(10); //延时30us
0048 0AE0 ldi R16,10
004A 10E0 ldi R17,0
004C 0E940000 xcall _delay_nus
0050 .dbline 31
0050 ; if(bitval == 1) //如果写1,DQ线拉高
0050 4130 cpi R20,1
0052 09F4 brne L5
0054 .dbline 32
0054 ; DQ_H;
0054 A99A sbi 0x15,1
0056 L5:
0056 .dbline 33
0056 ; delay_nus(20); //延时30us
0056 04E1 ldi R16,20
0058 10E0 ldi R17,0
005A 0E940000 xcall _delay_nus
005E .dbline 34
005E ; DQ_H;
005E A99A sbi 0x15,1
0060 .dbline -2
0060 L4:
0060 0E940000 xcall pop_gset1
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbsym r bitval 20 c
0066 .dbend
0066 .dbfunc e DS18B20_ReadBit _DS18B20_ReadBit fc
0066 ; rbit -> R20
.even
0066 _DS18B20_ReadBit::
0066 0E940000 xcall push_gset1
006A .dbline -1
006A .dbline 38
006A ; }
006A ;
006A ; byte DS18B20_ReadBit(void)
006A ; {
006A .dbline 39
006A ; byte rbit = 0;
006A 4427 clr R20
006C .dbline 40
006C ; DQ_OUT;
006C A19A sbi 0x14,1
006E .dbline 41
006E ; _NOP();
006E 0000 nop
0070 .dbline 42
0070 ; _NOP();
0070 0000 nop
0072 .dbline 43
0072 ; DQ_L; //将DQ线拉低,开始写时间隙
0072 A998 cbi 0x15,1
0074 .dbline 44
0074 ; delay_us(); //延时30us
0074 0E940000 xcall _delay_us
0078 .dbline 47
0078 ; //DQ_H;
0078 ; // delay_nus(10); //延时
0078 ; DQ_IN;
0078 A198 cbi 0x14,1
007A .dbline 48
007A ; _NOP();
007A 0000 nop
007C .dbline 49
007C ; _NOP();
007C 0000 nop
007E .dbline 51
007E ; //
007E ; if(DQ_IN_H)
007E 83B3 in R24,0x13
0080 8270 andi R24,2
0082 8230 cpi R24,2
0084 09F4 brne L8
0086 .dbline 52
0086 ; rbit =1;
0086 41E0 ldi R20,1
0088 L8:
0088 .dbline 53
0088 ; delay_nus(40);
0088 08E2 ldi R16,40
008A 10E0 ldi R17,0
008C 0E940000 xcall _delay_nus
0090 .dbline 54
0090 ; return (rbit);
0090 042F mov R16,R20
0092 .dbline -2
0092 L7:
0092 0E940000 xcall pop_gset1
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbsym r rbit 20 c
0098 .dbend
0098 .dbfunc e DS18B20_WriteChar _DS18B20_WriteChar fV
0098 ; temp -> R20
0098 ; i -> R22
0098 ; val -> R10
.even
0098 _DS18B20_WriteChar::
0098 0E940000 xcall push_gset3
009C A02E mov R10,R16
009E .dbline -1
009E .dbline 58
009E ; }
009E ;
009E ; void DS18B20_WriteChar(byte val)
009E ; {
009E .dbline 61
009E ; byte i;
009E ; byte temp;
009E ; temp = val;
009E 4A2D mov R20,R10
00A0 .dbline 62
00A0 ; for(i = 0;i<8;i++)
00A0 6627 clr R22
00A2 0FC0 xjmp L14
00A4 L11:
00A4 .dbline 63
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -