📄 ds18b20.lis
字号:
.module ds18b20.c
.area data(ram, con, rel)
0000 _led_7::
0000 .blkb 2
.area idata
0000 3F06 .byte 63,6
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 5B4F .byte 91,'O
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 666D .byte 'f,'m
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 7D07 .byte 125,7
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 7F6F .byte 127,'o
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 4000 .byte 64,0
.area data(ram, con, rel)
000C .dbfile G:\ds18b20\ds18b20.c
000C .dbsym e led_7 _led_7 A[12:12]c
000C _position::
000C .blkb 2
.area idata
000C 070B .byte 7,11
.area data(ram, con, rel)
000E .dbfile G:\ds18b20\ds18b20.c
000E .blkb 2
.area idata
000E 0D0E .byte 13,14
.area data(ram, con, rel)
0010 .dbfile G:\ds18b20\ds18b20.c
0010 .dbsym e position _position A[4:4]c
0010 _led_buf::
0010 .blkb 2
.area idata
0010 0000 .byte 0,0
.area data(ram, con, rel)
0012 .dbfile G:\ds18b20\ds18b20.c
0012 .blkb 2
.area idata
0012 0000 .byte 0,0
.area data(ram, con, rel)
0014 .dbfile G:\ds18b20\ds18b20.c
0014 .dbsym e led_buf _led_buf A[4:4]c
.area text(rom, con, rel)
0000 .dbfile G:\ds18b20\ds18b20.c
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 18
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define DQ_IN DDRA &= ~(1 << PA7) /*设置输入*/
0000 ; #define DQ_OUT DDRA |= (1 << PA7) /*设置输出*/
0000 ; #define DQ_CLR PORTA &= ~(1 << PA7) /*置低电平*/
0000 ; #define DQ_SET PORTA |= (1 << PA7) /*置高电平*/
0000 ; #define DQ_R PINA & (1 << PA7) /*读了电平*/
0000 ; unsigned char led_7[] = {0X3f,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x40,0x00,};
0000 ; unsigned char flag; /*中断标志缓存*/
0000 ; unsigned char position[4]={0X07,0X0B,0X0D,0X0E};
0000 ; //unsigned char time[2];//显示时,分,
0000 ; unsigned char dis_buff[4]; // 显示缓冲区
0000 ; unsigned char posit;
0000 ; unsigned char led_buf[] = {0,0,0,0,}; /*显示信息*/
0000 ; /*********************delay function********************/
0000 ; void delay_1us(void) //1us延时函数
0000 ; {
0000 .dbline 19
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_nus _delay_nus fV
0004 ; i -> R20,R21
0004 ; n -> R22,R23
.even
0004 _delay_nus::
0004 0E940000 xcall push_gset2
0008 B801 movw R22,R16
000A .dbline -1
000A .dbline 23
000A ; }
000A ;
000A ; void delay_nus(unsigned int n) //N us延时函数
000A ; {
000A .dbline 24
000A ; unsigned int i=0;
000A 4427 clr R20
000C 5527 clr R21
000E .dbline 25
000E ; for (i=0;i<n;i++)
000E 03C0 xjmp L6
0010 L3:
0010 .dbline 26
0010 F7DF xcall _delay_1us
0012 L4:
0012 .dbline 25
0012 4F5F subi R20,255 ; offset = 1
0014 5F4F sbci R21,255
0016 L6:
0016 .dbline 25
0016 4617 cp R20,R22
0018 5707 cpc R21,R23
001A D0F3 brlo L3
001C .dbline -2
001C L2:
001C 0E940000 xcall pop_gset2
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r i 20 i
0022 .dbsym r n 22 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 30
0022 ; delay_1us();
0022 ; }
0022 ;
0022 ; void delay_1ms(void) //1ms延时函数
0022 ; {
0022 .dbline 32
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L11
0028 L8:
0028 .dbline 32
0028 L9:
0028 .dbline 32
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L11:
002C .dbline 32
002C ; unsigned int i;
002C ; for (i=0;i<1140;i++);
002C 0437 cpi R16,116
002E E4E0 ldi R30,4
0030 1E07 cpc R17,R30
0032 D0F3 brlo L8
0034 .dbline -2
0034 L7:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_nms _delay_nms fV
0036 ; i -> R20,R21
0036 ; n -> R22,R23
.even
0036 _delay_nms::
0036 0E940000 xcall push_gset2
003A B801 movw R22,R16
003C .dbline -1
003C .dbline 36
003C ; }
003C ;
003C ; void delay_nms(unsigned int n) //N ms延时函数
003C ; {
003C .dbline 37
003C ; unsigned int i=0;
003C 4427 clr R20
003E 5527 clr R21
0040 .dbline 38
0040 ; for (i=0;i<n;i++)
0040 03C0 xjmp L16
0042 L13:
0042 .dbline 39
0042 EFDF xcall _delay_1ms
0044 L14:
0044 .dbline 38
0044 4F5F subi R20,255 ; offset = 1
0046 5F4F sbci R21,255
0048 L16:
0048 .dbline 38
0048 4617 cp R20,R22
004A 5707 cpc R21,R23
004C D0F3 brlo L13
004E .dbline -2
004E L12:
004E 0E940000 xcall pop_gset2
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r i 20 i
0054 .dbsym r n 22 i
0054 .dbend
0054 .dbfunc e ds1820_reset _ds1820_reset fc
0054 ; i -> R20
.even
0054 _ds1820_reset::
0054 0E940000 xcall push_gset1
0058 .dbline -1
0058 .dbline 43
0058 ; delay_1ms();
0058 ; }
0058 ;
0058 ; /*DS18B20复位函数*/
0058 ; unsigned char ds1820_reset(void) {
0058 .dbline 46
0058 ;
0058 ; unsigned char i;
0058 ; flag = SREG; /*中断保护*/
0058 2FB6 in R2,0x3f
005A 20920500 sts _flag,R2
005E .dbline 47
005E ; CLI(); /*关中断*/
005E F894 cli
0060 .dbline 48
0060 ; DQ_OUT;
0060 D79A sbi 0x1a,7
0062 .dbline 49
0062 ; DQ_CLR;
0062 DF98 cbi 0x1b,7
0064 .dbline 50
0064 ; delay_nus(500); /*延时500uS(480-960)*/
0064 04EF ldi R16,500
0066 11E0 ldi R17,1
0068 CDDF xcall _delay_nus
006A .dbline 51
006A ; DQ_SET;
006A DF9A sbi 0x1b,7
006C .dbline 52
006C ; DQ_IN;
006C D798 cbi 0x1a,7
006E .dbline 53
006E ; delay_nus(80); /*延时80uS*/
006E 00E5 ldi R16,80
0070 10E0 ldi R17,0
0072 C8DF xcall _delay_nus
0074 .dbline 54
0074 ; i = DQ_R;
0074 49B3 in R20,0x19
0076 4078 andi R20,128
0078 .dbline 55
0078 ; delay_nus(490); /*延时500uS(保持>480uS)*/
0078 0AEE ldi R16,490
007A 11E0 ldi R17,1
007C C3DF xcall _delay_nus
007E .dbline 56
007E ; if (flag & 0x80) { /*恢复中断状态*/
007E 20900500 lds R2,_flag
0082 27FE sbrs R2,7
0084 01C0 rjmp L18
0086 .dbline 56
0086 .dbline 57
0086 ; SEI();
0086 7894 sei
0088 .dbline 58
0088 ; }
0088 L18:
0088 .dbline 59
0088 ; if (i) {
0088 4423 tst R20
008A 11F0 breq L20
008C .dbline 59
008C .dbline 60
008C ; return 0x00;
008C 0027 clr R16
008E 01C0 xjmp L17
0090 L20:
0090 .dbline 62
0090 ; }
0090 ; else {
0090 .dbline 63
0090 ; return 0x01;
0090 01E0 ldi R16,1
0092 .dbline -2
0092 L17:
0092 0E940000 xcall pop_gset1
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbsym r i 20 c
0098 .dbend
0098 .dbfunc e ds1820_read_byte _ds1820_read_byte fc
0098 ; value -> R20
0098 ; i -> R22
.even
0098 _ds1820_read_byte::
0098 0E940000 xcall push_gset2
009C .dbline -1
009C .dbline 68
009C ; }
009C ; }
009C ;
009C ; /*DS18B20字节读取函数*/
009C ; unsigned char ds1820_read_byte(void) {
009C .dbline 71
009C ;
009C ; unsigned char i;
009C ; unsigned char value = 0;
009C 4427 clr R20
009E .dbline 72
009E ; flag = SREG; /*中断保护*/
009E 2FB6 in R2,0x3f
00A0 20920500 sts _flag,R2
00A4 .dbline 73
00A4 ; CLI(); /*关中断*/
00A4 F894 cli
00A6 .dbline 74
00A6 68E0 ldi R22,8
00A8 12C0 xjmp L26
00AA L23:
00AA .dbline 74
00AA ; for (i = 8; i != 0; i--) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -