📄 ds18b20.lis
字号:
.module DS18B20.C
.area text(rom, con, rel)
0000 .dbfile F:\try\DS18B20\DS18B20.C
0000 .dbfunc e init_1820 _init_1820 fV
.even
0000 _init_1820::
0000 .dbline -1
0000 .dbline 19
0000 ; /*************************************************************************
0000 ; ds18b20头文件
0000 ; M16 内部8M
0000 ; *************************************************************************/
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "DS18B20.h"
0000 ;
0000 ; #define CLR_DIR_1WIRE DDRC&=~BIT(2)
0000 ; //只要修改这里的参数就可以了!呵呵!
0000 ; #define SET_DIR_1WIRE DDRC|=BIT(2)
0000 ; //里面什么都不用该!
0000 ; #define CLR_OP_1WIRE PORTC&=~BIT(2)
0000 ; #define SET_OP_1WIRE PORTC|=BIT(2)
0000 ; #define CHECK_IP_1WIRE (PINC & 0x04)
0000 ; //检测
0000 ; unsigned char wmh,wml;
0000 ; void init_1820(void)
0000 ; {
0000 .dbline 20
0000 ; SET_DIR_1WIRE; //设置PC2 为输出
0000 A29A sbi 0x14,2
0002 .dbline 21
0002 ; SET_OP_1WIRE;
0002 AA9A sbi 0x15,2
0004 .dbline 22
0004 ; CLR_OP_1WIRE;
0004 AA98 cbi 0x15,2
0006 .dbline 23
0006 ; delay_nus(500); //480us以上
0006 04EF ldi R16,500
0008 11E0 ldi R17,1
000A 6AD0 xcall _delay_nus
000C .dbline 24
000C ; SET_OP_1WIRE;
000C AA9A sbi 0x15,2
000E .dbline 25
000E ; CLR_DIR_1WIRE;
000E A298 cbi 0x14,2
0010 .dbline 26
0010 ; delay_nus(25); //15~60us
0010 09E1 ldi R16,25
0012 10E0 ldi R17,0
0014 65D0 xcall _delay_nus
0016 L2:
0016 .dbline 27
0016 ; while(CHECK_IP_1WIRE);
0016 L3:
0016 .dbline 27
0016 9A99 sbic 0x13,2
0018 FECF rjmp L2
001A X0:
001A .dbline 28
001A ; SET_DIR_1WIRE;
001A A29A sbi 0x14,2
001C .dbline 29
001C ; SET_OP_1WIRE;
001C AA9A sbi 0x15,2
001E .dbline 30
001E ; delay_nus(180); //60~240us
001E 04EB ldi R16,180
0020 10E0 ldi R17,0
0022 5ED0 xcall _delay_nus
0024 .dbline -2
0024 L1:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e write_1820 _write_1820 fV
0026 ; m -> R20
0026 ; x -> R10
.even
0026 _write_1820::
0026 AA92 st -y,R10
0028 4A93 st -y,R20
002A A02E mov R10,R16
002C .dbline -1
002C .dbline 33
002C ; }
002C ; void write_1820(unsigned char x)
002C ; {
002C .dbline 35
002C ; unsigned char m;
002C ; for(m=0;m<8;m++)
002C 4427 clr R20
002E 10C0 xjmp L9
0030 L6:
0030 .dbline 36
0030 ; {
0030 .dbline 37
0030 ; CLR_OP_1WIRE;
0030 AA98 cbi 0x15,2
0032 .dbline 38
0032 ; if(x&(1<<m)) //写数据了,先写低位的!
0032 01E0 ldi R16,1
0034 142F mov R17,R20
0036 0E940000 xcall lsl8
003A 2A2C mov R2,R10
003C 2022 and R2,R16
003E 11F0 breq L10
0040 X1:
0040 .dbline 39
0040 ; SET_OP_1WIRE;
0040 AA9A sbi 0x15,2
0042 01C0 xjmp L11
0044 L10:
0044 .dbline 41
0044 ; else
0044 ; {CLR_OP_1WIRE;}
0044 .dbline 41
0044 AA98 cbi 0x15,2
0046 .dbline 41
0046 L11:
0046 .dbline 42
0046 ; delay_nus(40); //15~60us
0046 08E2 ldi R16,40
0048 10E0 ldi R17,0
004A 4AD0 xcall _delay_nus
004C .dbline 43
004C ; SET_OP_1WIRE;
004C AA9A sbi 0x15,2
004E .dbline 44
004E ; }
004E L7:
004E .dbline 35
004E 4395 inc R20
0050 L9:
0050 .dbline 35
0050 4830 cpi R20,8
0052 70F3 brlo L6
0054 X2:
0054 .dbline 45
0054 ; SET_OP_1WIRE;
0054 AA9A sbi 0x15,2
0056 .dbline -2
0056 L5:
0056 .dbline 0 ; func end
0056 4991 ld R20,y+
0058 A990 ld R10,y+
005A 0895 ret
005C .dbsym r m 20 c
005C .dbsym r x 10 c
005C .dbend
005C .dbfunc e read_1820 _read_1820 fc
005C ; temp -> R10
005C ; k -> R22
005C ; n -> R20
.even
005C _read_1820::
005C 0E940000 xcall push_xgsetF00C
0060 .dbline -1
0060 .dbline 48
0060 ; }
0060 ; unsigned char read_1820(void)
0060 ; {
0060 .dbline 50
0060 ; unsigned char temp,k,n;
0060 ; temp=0;
0060 AA24 clr R10
0062 .dbline 51
0062 ; for(n=0;n<8;n++)
0062 4427 clr R20
0064 18C0 xjmp L16
0066 L13:
0066 .dbline 52
0066 ; {
0066 .dbline 53
0066 ; CLR_OP_1WIRE;
0066 AA98 cbi 0x15,2
0068 .dbline 54
0068 ; SET_OP_1WIRE;
0068 AA9A sbi 0x15,2
006A .dbline 55
006A ; CLR_DIR_1WIRE;
006A A298 cbi 0x14,2
006C .dbline 56
006C ; k=(CHECK_IP_1WIRE); //读数据,从低位开始
006C 63B3 in R22,0x13
006E 6470 andi R22,4
0070 .dbline 57
0070 ; if(k)
0070 31F0 breq L17
0072 X3:
0072 .dbline 58
0072 ; temp|=(1<<n);
0072 01E0 ldi R16,1
0074 142F mov R17,R20
0076 0E940000 xcall lsl8
007A A02A or R10,R16
007C 07C0 xjmp L18
007E L17:
007E .dbline 60
007E ; else
007E ; temp&=~(1<<n);
007E 01E0 ldi R16,1
0080 142F mov R17,R20
0082 0E940000 xcall lsl8
0086 202E mov R2,R16
0088 2094 com R2
008A A220 and R10,R2
008C L18:
008C .dbline 61
008C ; delay_nus(80); //60~120us
008C 00E5 ldi R16,80
008E 10E0 ldi R17,0
0090 27D0 xcall _delay_nus
0092 .dbline 62
0092 ; SET_DIR_1WIRE;
0092 A29A sbi 0x14,2
0094 .dbline 63
0094 ; }
0094 L14:
0094 .dbline 51
0094 4395 inc R20
0096 L16:
0096 .dbline 51
0096 4830 cpi R20,8
0098 30F3 brlo L13
009A X4:
009A .dbline 64
009A ; return (temp);
009A 0A2D mov R16,R10
009C .dbline -2
009C L12:
009C .dbline 0 ; func end
009C 0C940000 xjmp pop_xgsetF00C
00A0 .dbsym r temp 10 c
00A0 .dbsym r k 22 c
00A0 .dbsym r n 20 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -