?? ds18b20_main.lis
字號:
.module DS18B20_main.c
.area text(rom, con, rel)
0000 .dbfile E:\單片機\16實驗程序\DS18B20\DS18B20\DS18B20_main.c
0000 .dbfile E:\單片機\16實驗程序\DS18B20\DS18B20\18B20.h
0000 .dbfunc e s_10us _s_10us fV
0000 ; aa -> R20,R21
0000 ; ms -> R16,R17
.even
0000 _s_10us::
0000 4A93 st -y,R20
0002 5A93 st -y,R21
0004 .dbline -1
0004 .dbline 19
0004 ; //DS18B20連接在端口C的第7引腳
0004 ;
0004 ; //設置成輸入
0004 ; #define DQ_INPUT DDRC &= ~(1 << PC7)
0004 ; //設置成輸出
0004 ; #define DQ_OUT DDRC |= (1 << PC7)
0004 ; //設置成低電平
0004 ; #define DQ_LO PORTC &= ~(1 << PC7)
0004 ; //設置成高電平
0004 ; #define DQ_HI PORTC |= (1 << PC7)
0004 ; //讀出
0004 ; #define DQ_R PINC & (1 << PC7)
0004 ;
0004 ; //中斷標志
0004 ; unsigned char init_f;
0004 ;
0004 ; //延時函數
0004 ; void s_10us(unsigned int ms)
0004 ; {
0004 .dbline 21
0004 ; unsigned int aa;
0004 ; for(;ms>=1;ms--)
0004 0CC0 xjmp L5
0006 L2:
0006 .dbline 22
0006 ; {
0006 .dbline 23
0006 ; for(aa=0;aa<=17;aa++)
0006 4427 clr R20
0008 5527 clr R21
000A 02C0 xjmp L9
000C L6:
000C .dbline 24
000C ; {;}
000C .dbline 24
000C .dbline 24
000C L7:
000C .dbline 23
000C 4F5F subi R20,255 ; offset = 1
000E 5F4F sbci R21,255
0010 L9:
0010 .dbline 23
0010 81E1 ldi R24,17
0012 90E0 ldi R25,0
0014 8417 cp R24,R20
0016 9507 cpc R25,R21
0018 C8F7 brsh L6
001A X0:
001A .dbline 25
001A ; }
001A L3:
001A .dbline 21
001A 0150 subi R16,1
001C 1040 sbci R17,0
001E L5:
001E .dbline 21
001E 0130 cpi R16,1
0020 E0E0 ldi R30,0
0022 1E07 cpc R17,R30
0024 80F7 brsh L2
0026 X1:
0026 .dbline -2
0026 L1:
0026 .dbline 0 ; func end
0026 5991 ld R21,y+
0028 4991 ld R20,y+
002A 0895 ret
002C .dbsym r aa 20 i
002C .dbsym r ms 16 i
002C .dbend
002C .dbfunc e ds1820_reset _ds1820_reset fV
002C ; i -> R20
.even
002C _ds1820_reset::
002C 4A93 st -y,R20
002E .dbline -1
002E .dbline 30
002E ; }
002E ;
002E ; //DS18B20復位
002E ; void ds1820_reset(void)
002E ; {
002E .dbline 33
002E ; unsigned char i;
002E ; //中斷保護
002E ; init_f = SREG;
002E 2FB6 in R2,0x3f
0030 20920000 sts _init_f,R2
0034 .dbline 35
0034 ; //關中斷
0034 ; CLI();
0034 F894 cli
0036 .dbline 36
0036 ; DQ_OUT;
0036 A79A sbi 0x14,7
0038 .dbline 37
0038 ; DQ_LO;
0038 AF98 cbi 0x15,7
003A .dbline 38
003A ; s_10us(50); //延時500us
003A 02E3 ldi R16,50
003C 10E0 ldi R17,0
003E E0DF xcall _s_10us
0040 .dbline 39
0040 ; DQ_HI;
0040 AF9A sbi 0x15,7
0042 .dbline 40
0042 ; DQ_INPUT;
0042 A798 cbi 0x14,7
0044 .dbline 41
0044 ; s_10us(8); //延時80us
0044 08E0 ldi R16,8
0046 10E0 ldi R17,0
0048 DBDF xcall _s_10us
004A .dbline 42
004A ; i = DQ_R;
004A 43B3 in R20,0x13
004C 4078 andi R20,128
004E .dbline 43
004E ; s_10us(50); //延時500us
004E 02E3 ldi R16,50
0050 10E0 ldi R17,0
0052 D6DF xcall _s_10us
0054 .dbline 44
0054 ; if (init_f & 0x80) //恢復中斷狀態
0054 20900000 lds R2,_init_f
0058 27FE sbrs R2,7
005A 01C0 rjmp L11
005C X2:
005C .dbline 45
005C ; {
005C .dbline 46
005C ; SEI();
005C 7894 sei
005E .dbline 47
005E ; }
005E L11:
005E .dbline -2
005E L10:
005E .dbline 0 ; func end
005E 4991 ld R20,y+
0060 0895 ret
0062 .dbsym r i 20 c
0062 .dbend
0062 .dbfunc e ds1820_read_byte _ds1820_read_byte fc
0062 ; value -> R20
0062 ; i -> R22
.even
0062 _ds1820_read_byte::
0062 4A93 st -y,R20
0064 6A93 st -y,R22
0066 .dbline -1
0066 .dbline 52
0066 ; }
0066 ;
0066 ; //DS18B20字節讀取
0066 ; unsigned char ds1820_read_byte(void)
0066 ; {
0066 .dbline 54
0066 ; unsigned char i;
0066 ; unsigned char value = 0;
0066 4427 clr R20
0068 .dbline 56
0068 ; //中斷保護
0068 ; init_f = SREG;
0068 2FB6 in R2,0x3f
006A 20920000 sts _init_f,R2
006E .dbline 58
006E ; //關中斷
006E ; CLI();
006E F894 cli
0070 .dbline 59
0070 ; for (i = 8; i != 0; i--) {
0070 68E0 ldi R22,8
0072 12C0 xjmp L17
0074 L14:
0074 .dbline 59
0074 .dbline 60
0074 ; value >>= 1;
0074 4695 lsr R20
0076 .dbline 61
0076 ; DQ_OUT;
0076 A79A sbi 0x14,7
0078 .dbline 62
0078 ; DQ_LO;
0078 AF98 cbi 0x15,7
007A .dbline 63
007A ; s_10us(1);
007A 01E0 ldi R16,1
007C 10E0 ldi R17,0
007E C0DF xcall _s_10us
0080 .dbline 64
0080 ; DQ_HI;
0080 AF9A sbi 0x15,7
0082 .dbline 65
0082 ; DQ_INPUT;
0082 A798 cbi 0x14,7
0084 .dbline 66
0084 ; s_10us(1);
0084 01E0 ldi R16,1
0086 10E0 ldi R17,0
0088 BBDF xcall _s_10us
008A .dbline 67
008A ; if (DQ_R) {
008A 9F9B sbis 0x13,7
008C 01C0 rjmp L18
008E X3:
008E .dbline 67
008E .dbline 68
008E ; value|=0x80;
008E 4068 ori R20,128
0090 .dbline 69
0090 ; }
0090 L18:
0090 .dbline 70
0090 ; s_10us(5); //延時60us
0090 05E0 ldi R16,5
0092 10E0 ldi R17,0
0094 B5DF xcall _s_10us
0096 .dbline 71
0096 ; }
0096 L15:
0096 .dbline 59
0096 6A95 dec R22
0098 L17:
0098 .dbline 59
0098 6623 tst R22
009A 61F7 brne L14
009C X4:
009C .dbline 72
009C ; if (init_f & 0x80) //恢復中斷狀態
009C 20900000 lds R2,_init_f
00A0 27FE sbrs R2,7
00A2 01C0 rjmp L20
00A4 X5:
00A4 .dbline 73
00A4 ; {
00A4 .dbline 74
00A4 ; SEI();
00A4 7894 sei
00A6 .dbline 75
00A6 ; }
00A6 L20:
00A6 .dbline 76
00A6 ; return(value);
00A6 042F mov R16,R20
00A8 .dbline -2
00A8 L13:
00A8 .dbline 0 ; func end
00A8 6991 ld R22,y+
00AA 4991 ld R20,y+
00AC 0895 ret
00AE .dbsym r value 20 c
00AE .dbsym r i 22 c
00AE .dbend
00AE .dbfunc e ds1820_write_byte _ds1820_write_byte fV
00AE ; i -> R20
00AE ; value -> R10
.even
00AE _ds1820_write_byte::
00AE AA92 st -y,R10
00B0 4A93 st -y,R20
00B2 A02E mov R10,R16
00B4 .dbline -1
00B4 .dbline 81
00B4 ; }
00B4 ;
00B4 ; //DS18B20字節寫入
00B4 ; void ds1820_write_byte(unsigned char value)
00B4 ; {
00B4 .dbline 84
00B4 ; unsigned char i;
00B4 ; //中斷保護
00B4 ; init_f = SREG;
00B4 2FB6 in R2,0x3f
00B6 20920000 sts _init_f,R2
00BA .dbline 86
00BA ; //關中斷
00BA ; CLI();
00BA F894 cli
00BC .dbline 87
00BC ; for (i = 8; i != 0; i--) {
00BC 48E0 ldi R20,8
00BE 0EC0 xjmp L26
00C0 L23:
00C0 .dbline 87
00C0 .dbline 88
00C0 ; DQ_OUT;
00C0 A79A sbi 0x14,7
00C2 .dbline 89
00C2 ; DQ_LO;
00C2 AF98 cbi 0x15,7
00C4 .dbline 90
00C4 ; s_10us(1);
00C4 01E0 ldi R16,1
00C6 10E0 ldi R17,0
00C8 9BDF xcall _s_10us
00CA .dbline 91
00CA ; if (value & 0x01) {
00CA A0FE sbrs R10,0
00CC 01C0 rjmp L27
00CE X6:
00CE .dbline 91
00CE .dbline 92
00CE ; DQ_HI;
00CE AF9A sbi 0x15,7
00D0 .dbline 93
00D0 ; }
00D0 L27:
00D0 .dbline 94
00D0 ; s_10us(8); //延時80us
00D0 08E0 ldi R16,8
00D2 10E0 ldi R17,0
00D4 95DF xcall _s_10us
00D6 .dbline 95
00D6 ; DQ_HI;
00D6 AF9A sbi 0x15,7
00D8 .dbline 96
00D8 ; value >>= 1;
00D8 A694 lsr R10
00DA .dbline 97
00DA ; }
00DA L24:
00DA .dbline 87
00DA 4A95 dec R20
00DC L26:
00DC .dbline 87
00DC 4423 tst R20
00DE 81F7 brne L23
00E0 X7:
00E0 .dbline 98
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -