📄 18b20.lst
字号:
000D1 2F14 MOV R17,R20
000D2 940E 01A0 CALL lsl8
000D4 2AA0 OR R10,R16
000D5 C007 RJMP 0x00DD
(0090) else
(0091) temp&=~(1<<n);
000D6 E001 LDI R16,1
000D7 2F14 MOV R17,R20
000D8 940E 01A0 CALL lsl8
000DA 2E20 MOV R2,R16
000DB 9420 COM R2
000DC 20A2 AND R10,R2
(0092) delay_nus(50); //60~120us
000DD E302 LDI R16,0x32
000DE E010 LDI R17,0
000DF DF92 RCALL _delay_nus
(0093) SET_DIR_1WIRE;
000E0 9A8F SBI 0x11,7
000E1 9543 INC R20
000E2 3048 CPI R20,0x8
000E3 F330 BCS 0x00CA
(0094) }
(0095) return (temp);
000E4 2D0A MOV R16,R10
000E5 940C 0187 JMP pop_xgsetF00C
_gettemp:
wm3 --> R10
wm1 --> R10
wm0 --> R20
teml --> R10
temh --> R22
wm2 --> R12
000E7 940E 018E CALL push_xgsetF03C
(0096) }
(0097)
(0098) void gettemp() //读取温度值
(0099) {
(0100) unsigned char temh,teml,wm0,wm1,wm2,wm3;
(0101) init_1820(); //复位18b20
000E9 DFAE RCALL _init_1820
(0102) write_1820(0xcc); // 发出转换命令
000EA EC0C LDI R16,0xCC
000EB DFBE RCALL _write_1820
(0103) write_1820(0x44);
000EC E404 LDI R16,0x44
000ED DFBC RCALL _write_1820
(0104) // delay_nms(800); //不延时也好使,不知道怎么回事!
(0105) init_1820();
000EE DFA9 RCALL _init_1820
(0106) write_1820(0xcc); //发出读命令
000EF EC0C LDI R16,0xCC
000F0 DFB9 RCALL _write_1820
(0107) write_1820(0xbe);
000F1 EB0E LDI R16,0xBE
000F2 DFB7 RCALL _write_1820
(0108) teml=read_1820(); //读数据
000F3 DFD1 RCALL _read_1820
000F4 2EA0 MOV R10,R16
(0109) temh=read_1820();
000F5 DFCF RCALL _read_1820
000F6 2F60 MOV R22,R16
(0110) wm0=teml>>4; //只要高8位的低四位和低8位的高四位,温度范围0~99啦!
000F7 2D4A MOV R20,R10
000F8 9542 SWAP R20
000F9 704F ANDI R20,0xF
(0111) wm1=temh<<4;
000FA 2F86 MOV R24,R22
000FB 708F ANDI R24,0xF
000FC 9582 SWAP R24
(0112) wm2=wm1+wm0; //16进制转10进制
000FD 2EC8 MOV R12,R24
000FE 0EC4 ADD R12,R20
(0113) wm3=wm2/100;
000FF E614 LDI R17,0x64
00100 2D0C MOV R16,R12
00101 940E 0156 CALL div8u
00103 2EA0 MOV R10,R16
(0114) wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml使显示的低位
00104 E614 LDI R17,0x64
00105 2D0C MOV R16,R12
00106 940E 0154 CALL mod8u
00108 E01A LDI R17,0xA
00109 940E 0156 CALL div8u
0010B 9300 007A STS wmh,R16
(0115) wml=(wm2%100)%10;
0010D E614 LDI R17,0x64
0010E 2D0C MOV R16,R12
0010F 940E 0154 CALL mod8u
00111 E01A LDI R17,0xA
00112 940E 0154 CALL mod8u
00114 9300 0079 STS wml,R16
(0116) show(wm3,2);
00116 E022 LDI R18,2
00117 E030 LDI R19,0
00118 2D0A MOV R16,R10
00119 2711 CLR R17
0011A 940E 0139 CALL _show
(0117) show( wmh,1);
0011C E021 LDI R18,1
0011D E030 LDI R19,0
0011E 9100 007A LDS R16,wmh
00120 2711 CLR R17
00121 940E 0139 CALL _show
(0118) show(wml,0);
00123 2722 CLR R18
00124 2733 CLR R19
00125 9100 0079 LDS R16,wml
00127 2711 CLR R17
00128 940E 0139 CALL _show
0012A 940C 0197 JMP pop_xgsetF03C
(0119) }
(0120)
(0121)
(0122) //延时程序:
(0123)
(0124)
(0125) void main()
(0126) {smginit();
_main:
0012C 940E 0135 CALL _smginit
(0127) DDRA=0XFF;
0012E EF8F LDI R24,0xFF
0012F BB8A OUT 0x1A,R24
(0128) DDRC=0XFF;
00130 BB84 OUT 0x14,R24
00131 C001 RJMP 0x0133
(0129) while(1)
(0130) {gettemp();}
FILE: <library>
00132 DFB4 RCALL _gettemp
00133 CFFE RJMP 0x0132
00134 9508 RET
_smginit:
00135 EF8F LDI R24,0xFF
00136 BB8A OUT 0x1A,R24
00137 BB84 OUT 0x14,R24
00138 9508 RET
_show:
k --> R10
j --> R12
00139 92AA ST -Y,R10
0013A 92CA ST -Y,R12
0013B 2EA2 MOV R10,R18
0013C 2EC0 MOV R12,R16
0013D E680 LDI R24,0x60
0013E E090 LDI R25,0
0013F 2DEC MOV R30,R12
00140 27FF CLR R31
00141 0FE8 ADD R30,R24
00142 1FF9 ADC R31,R25
00143 8020 LD R2,Z
00144 BA2B OUT 0x1B,R2
00145 E781 LDI R24,0x71
00146 E090 LDI R25,0
00147 2DEA MOV R30,R10
00148 27FF CLR R31
00149 0FE8 ADD R30,R24
0014A 1FF9 ADC R31,R25
0014B 8020 LD R2,Z
0014C BA25 OUT 0x15,R2
0014D E002 LDI R16,2
0014E E010 LDI R17,0
0014F 940E 005A CALL _Delay_1ms
00151 90C9 LD R12,Y+
00152 90A9 LD R10,Y+
00153 9508 RET
mod8u:
00154 9468 BSET 6
00155 C001 RJMP xdiv8u
div8u:
00156 94E8 BCLR 6
xdiv8u:
00157 932A ST -Y,R18
00158 92FA ST -Y,R15
00159 92EA ST -Y,R14
0015A 24FF CLR R15
0015B 24EE CLR R14
0015C E120 LDI R18,0x10
0015D 0F00 LSL R16
0015E 1CFF ROL R15
0015F 1CEE ROL R14
00160 16E1 CP R14,R17
00161 F010 BCS 0x0164
00162 1AE1 SUB R14,R17
00163 9503 INC R16
00164 952A DEC R18
00165 F7B9 BNE 0x015D
00166 F40E BRTC 0x0168
00167 2D0E MOV R16,R14
00168 90E9 LD R14,Y+
00169 90F9 LD R15,Y+
0016A 9129 LD R18,Y+
0016B 9508 RET
push_xgset300C:
0016C 935A ST -Y,R21
0016D 934A ST -Y,R20
0016E 92BA ST -Y,R11
0016F 92AA ST -Y,R10
00170 9508 RET
pop_xgset300C:
00171 90A9 LD R10,Y+
00172 90B9 LD R11,Y+
00173 9149 LD R20,Y+
00174 9159 LD R21,Y+
00175 9508 RET
push_xgsetF000:
00176 937A ST -Y,R23
00177 936A ST -Y,R22
00178 935A ST -Y,R21
00179 934A ST -Y,R20
0017A 9508 RET
pop_xgsetF000:
0017B 9149 LD R20,Y+
0017C 9159 LD R21,Y+
0017D 9169 LD R22,Y+
0017E 9179 LD R23,Y+
0017F 9508 RET
push_xgsetF00C:
00180 937A ST -Y,R23
00181 936A ST -Y,R22
00182 935A ST -Y,R21
00183 934A ST -Y,R20
00184 92BA ST -Y,R11
00185 92AA ST -Y,R10
00186 9508 RET
pop_xgsetF00C:
00187 90A9 LD R10,Y+
00188 90B9 LD R11,Y+
00189 9149 LD R20,Y+
0018A 9159 LD R21,Y+
0018B 9169 LD R22,Y+
0018C 9179 LD R23,Y+
0018D 9508 RET
push_xgsetF03C:
0018E 937A ST -Y,R23
0018F 936A ST -Y,R22
00190 935A ST -Y,R21
00191 934A ST -Y,R20
00192 92DA ST -Y,R13
00193 92CA ST -Y,R12
00194 92BA ST -Y,R11
00195 92AA ST -Y,R10
00196 9508 RET
pop_xgsetF03C:
00197 90A9 LD R10,Y+
00198 90B9 LD R11,Y+
00199 90C9 LD R12,Y+
0019A 90D9 LD R13,Y+
0019B 9149 LD R20,Y+
0019C 9159 LD R21,Y+
0019D 9169 LD R22,Y+
0019E 9179 LD R23,Y+
0019F 9508 RET
lsl8:
001A0 2311 TST R17
001A1 F019 BEQ 0x01A5
001A2 0F00 LSL R16
001A3 951A DEC R17
001A4 CFFB RJMP lsl8
001A5 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -