📄 18b20.lis
字号:
.module _18b20.c
.area text(rom, con, rel)
0000 .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\18b20.c
0000 .dbfunc e init_1820 _init_1820 fV
.even
0000 _init_1820::
0000 .dbline -1
0000 .dbline 12
0000 ; /**************************************
0000 ; ** Filename: 18b20.c
0000 ; ** Describe: 18b20 温度传感器
0000 ; ** Author : 古欣 www.avrvi.com
0000 ; ** Time : 2007-2-15
0000 ; **************************************/
0000 ;
0000 ; #include "config.h"
0000 ;
0000 ; unsigned char wmh,wml,flag,count; //flag温度为负标志,count为实际温度
0000 ; void init_1820(void)
0000 ; {
0000 .dbline 13
0000 ; SET_DIR_1WIRE; //设置PC2 为输出
0000 BC9A sbi 0x17,4
0002 .dbline 14
0002 ; SET_OP_1WIRE;
0002 C49A sbi 0x18,4
0004 .dbline 15
0004 ; CLR_OP_1WIRE;
0004 C498 cbi 0x18,4
0006 .dbline 16
0006 ; delay_us(480); //480us以上
0006 00EE ldi R16,480
0008 11E0 ldi R17,1
000A 0E940000 xcall _delay_us
000E .dbline 17
000E ; SET_OP_1WIRE;
000E C49A sbi 0x18,4
0010 .dbline 18
0010 ; CLR_DIR_1WIRE;
0010 BC98 cbi 0x17,4
0012 .dbline 19
0012 ; delay_us(20); //15~60us
0012 04E1 ldi R16,20
0014 10E0 ldi R17,0
0016 0E940000 xcall _delay_us
001A L2:
001A .dbline 20
001A ; while(CHECK_IP_1WIRE);
001A L3:
001A .dbline 20
001A B499 sbic 0x16,4
001C FECF rjmp L2
001E X0:
001E .dbline 21
001E ; SET_DIR_1WIRE;
001E BC9A sbi 0x17,4
0020 .dbline 22
0020 ; SET_OP_1WIRE;
0020 C49A sbi 0x18,4
0022 .dbline 23
0022 ; delay_us(140); //60~240us
0022 0CE8 ldi R16,140
0024 10E0 ldi R17,0
0026 .dbline -2
0026 L1:
0026 .dbline 0 ; func end
0026 0C940000 xjmp _delay_us
002A .dbend
002A .dbfunc e write_1820 _write_1820 fV
002A ; m -> R20
002A ; x -> R10
.even
002A _write_1820::
002A AA92 st -y,R10
002C 4A93 st -y,R20
002E A02E mov R10,R16
0030 .dbline -1
0030 .dbline 26
0030 ; }
0030 ; void write_1820(unsigned char x)
0030 ; {
0030 .dbline 28
0030 ; unsigned char m;
0030 ; for(m=0;m<8;m++)
0030 4427 clr R20
0032 11C0 xjmp L9
0034 L6:
0034 .dbline 29
0034 ; {
0034 .dbline 30
0034 ; CLR_OP_1WIRE;
0034 C498 cbi 0x18,4
0036 .dbline 31
0036 ; if(x&(1<<m)) //写数据了,先写低位的!
0036 01E0 ldi R16,1
0038 142F mov R17,R20
003A 0E940000 xcall lsl8
003E 2A2C mov R2,R10
0040 2022 and R2,R16
0042 11F0 breq L10
0044 X1:
0044 .dbline 32
0044 ; SET_OP_1WIRE;
0044 C49A sbi 0x18,4
0046 01C0 xjmp L11
0048 L10:
0048 .dbline 34
0048 ; else
0048 ; {CLR_OP_1WIRE;}
0048 .dbline 34
0048 C498 cbi 0x18,4
004A .dbline 34
004A L11:
004A .dbline 35
004A ; delay_us(40); //15~60us
004A 08E2 ldi R16,40
004C 10E0 ldi R17,0
004E 0E940000 xcall _delay_us
0052 .dbline 36
0052 ; SET_OP_1WIRE;
0052 C49A sbi 0x18,4
0054 .dbline 37
0054 ; }
0054 L7:
0054 .dbline 28
0054 4395 inc R20
0056 L9:
0056 .dbline 28
0056 4830 cpi R20,8
0058 68F3 brlo L6
005A X2:
005A .dbline 38
005A ; SET_OP_1WIRE;
005A C49A sbi 0x18,4
005C .dbline -2
005C L5:
005C .dbline 0 ; func end
005C 4991 ld R20,y+
005E A990 ld R10,y+
0060 0895 ret
0062 .dbsym r m 20 c
0062 .dbsym r x 10 c
0062 .dbend
0062 .dbfunc e read_1820 _read_1820 fc
0062 ; temp -> R10
0062 ; k -> R22
0062 ; n -> R20
.even
0062 _read_1820::
0062 0E940000 xcall push_xgsetF00C
0066 .dbline -1
0066 .dbline 41
0066 ; }
0066 ; unsigned char read_1820(void)
0066 ; {
0066 .dbline 43
0066 ; unsigned char temp,k,n;
0066 ; temp=0;
0066 AA24 clr R10
0068 .dbline 44
0068 ; for(n=0;n<8;n++)
0068 4427 clr R20
006A 19C0 xjmp L16
006C L13:
006C .dbline 45
006C ; {
006C .dbline 46
006C ; CLR_OP_1WIRE;
006C C498 cbi 0x18,4
006E .dbline 47
006E ; SET_OP_1WIRE;
006E C49A sbi 0x18,4
0070 .dbline 48
0070 ; CLR_DIR_1WIRE;
0070 BC98 cbi 0x17,4
0072 .dbline 49
0072 ; k=(CHECK_IP_1WIRE); //读数据,从低位开始
0072 66B3 in R22,0x16
0074 6071 andi R22,16
0076 .dbline 50
0076 ; if(k)
0076 31F0 breq L17
0078 X3:
0078 .dbline 51
0078 ; temp|=(1<<n);
0078 01E0 ldi R16,1
007A 142F mov R17,R20
007C 0E940000 xcall lsl8
0080 A02A or R10,R16
0082 07C0 xjmp L18
0084 L17:
0084 .dbline 53
0084 ; else
0084 ; temp&=~(1<<n);
0084 01E0 ldi R16,1
0086 142F mov R17,R20
0088 0E940000 xcall lsl8
008C 202E mov R2,R16
008E 2094 com R2
0090 A220 and R10,R2
0092 L18:
0092 .dbline 54
0092 ; delay_us(50); //60~120us
0092 02E3 ldi R16,50
0094 10E0 ldi R17,0
0096 0E940000 xcall _delay_us
009A .dbline 55
009A ; SET_DIR_1WIRE;
009A BC9A sbi 0x17,4
009C .dbline 56
009C ; }
009C L14:
009C .dbline 44
009C 4395 inc R20
009E L16:
009E .dbline 44
009E 4830 cpi R20,8
00A0 28F3 brlo L13
00A2 X4:
00A2 .dbline 57
00A2 ; return (temp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -