📄 ds18b20.lst
字号:
0214 838A STD Y+2,R24
(0349) temp=temp%1000;
0215 EE28 LDI R18,0xE8
0216 E033 LDI R19,3
0217 0185 MOVW R16,R10
0218 940E02A9 CALL mod16u
021A 0158 MOVW R10,R16
(0350) T[1]='0'+temp/100;
021B E624 LDI R18,0x64
021C E030 LDI R19,0
021D 940E02AB CALL div16u
021F 01C8 MOVW R24,R16
0220 96C0 ADIW R24,0x30
0221 838B STD Y+3,R24
(0351) temp=temp%100;
0222 E624 LDI R18,0x64
0223 E030 LDI R19,0
0224 0185 MOVW R16,R10
0225 940E02A9 CALL mod16u
0227 0158 MOVW R10,R16
(0352) T[2]='.';
0228 E28E LDI R24,0x2E
0229 838C STD Y+4,R24
(0353) T[3]='0'+temp/10;
022A E02A LDI R18,0xA
022B E030 LDI R19,0
022C 940E02AB CALL div16u
022E 01C8 MOVW R24,R16
022F 96C0 ADIW R24,0x30
0230 838D STD Y+5,R24
(0354) temp=temp%10;
0231 E02A LDI R18,0xA
0232 E030 LDI R19,0
0233 0185 MOVW R16,R10
0234 940E02A9 CALL mod16u
0236 0158 MOVW R10,R16
(0355) T[4]='0'+temp/1;
0237 01C5 MOVW R24,R10
0238 96C0 ADIW R24,0x30
0239 838E STD Y+6,R24
(0356) LCD_write_string(i,j,T);
023A 01CE MOVW R24,R28
023B 9602 ADIW R24,2
023C 8399 STD Y+1,R25
023D 8388 STD Y+0,R24
023E 2F26 MOV R18,R22
023F 2F04 MOV R16,R20
0240 DE8D RCALL _LCD_write_string
0241 962B ADIW R28,0xB
0242 940E02CB CALL pop_gset4
0244 9508 RET
(0357)
(0358) }
(0359) /*void displayTemp(char x,char y,float num)
(0360) {
(0361) /*uint Tempp=num*10;
(0362) char s[3],i;
(0363) for(i=0;i<3;i++)
(0364) {
(0365) s[i]= Tempp%10;
(0366) Tempp=Tempp/10;
(0367) }
(0368) for(i=0;i<4;i++)
(0369) {
(0370) if(i<2)
(0371) LCD_write_char(x++,y,s[2-i]+'0');
(0372) if(i==2)
(0373) LCD_write_char(x++, y,'.');
(0374) if(i==3)
(0375) LCD_write_char(x++,y,s[0]+'0');
(0376) }
(0377) }*/
(0378) /******************************************************************************
(0379) DS18B20驱动程序
(0380) ******************************************************************************/
(0381)
(0382)
(0383)
(0384) //********************延时函数
(0385) void delay_1us(void) //1us延时函数
(0386) {
(0387) asm("nop");
_delay_1us:
0245 0000 NOP
0246 9508 RET
_delay_nus:
i --> R20
n --> R22
0247 940E02D4 CALL push_gset2
0249 01B8 MOVW R22,R16
(0388) }
(0389)
(0390) void delay_nus(unsigned int n) //N us延时函数
(0391) {
(0392) unsigned int i=0;
024A 2744 CLR R20
024B 2755 CLR R21
(0393) for (i=0;i<n;i++)
024C C003 RJMP 0x0250
(0394) delay_1us();
024D DFF7 RCALL _delay_1us
024E 5F4F SUBI R20,0xFF
024F 4F5F SBCI R21,0xFF
0250 1746 CP R20,R22
0251 0757 CPC R21,R23
0252 F3D0 BCS 0x024D
0253 940E02C5 CALL pop_gset2
0255 9508 RET
(0395) }
(0396)
(0397) void delay_1ms(void) //1ms延时函数
(0398) {
(0399) unsigned int i;
(0400) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0256 2700 CLR R16
0257 2711 CLR R17
0258 C002 RJMP 0x025B
0259 5F0F SUBI R16,0xFF
025A 4F1F SBCI R17,0xFF
025B 3704 CPI R16,0x74
025C E0E4 LDI R30,4
025D 071E CPC R17,R30
025E F3D0 BCS 0x0259
025F 9508 RET
_delay_nms:
i --> R20
n --> R22
0260 940E02D4 CALL push_gset2
0262 01B8 MOVW R22,R16
(0401) }
(0402)
(0403) void delay_nms(unsigned int n) //N ms延时函数
(0404) {
(0405) unsigned int i=0;
0263 2744 CLR R20
0264 2755 CLR R21
(0406) for (i=0;i<n;i++)
0265 C003 RJMP 0x0269
(0407) delay_1ms();
0266 DFEF RCALL _delay_1ms
0267 5F4F SUBI R20,0xFF
0268 4F5F SBCI R21,0xFF
0269 1746 CP R20,R22
026A 0757 CPC R21,R23
026B F3D0 BCS 0x0266
026C 940E02C5 CALL pop_gset2
026E 9508 RET
(0408) }
(0409) //********************延时函数
(0410)
(0411) //端口初始化
(0412) void port_init(void)
(0413) {
(0414) PORTA = 0xff;
_port_init:
026F EF8F LDI R24,0xFF
0270 BB8B OUT 0x1B,R24
(0415) DDRA = 0xff;
0271 BB8A OUT 0x1A,R24
(0416) PORTB = 0x00;
0272 2422 CLR R2
0273 BA28 OUT 0x18,R2
(0417) DDRB = 0xff;
0274 BB87 OUT 0x17,R24
(0418) PORTD = 0xff;
0275 BB82 OUT 0x12,R24
(0419) DDRD = 0xe0;
0276 EE80 LDI R24,0xE0
0277 BB81 OUT 0x11,R24
0278 9508 RET
_main:
i --> Y+4
0279 9728 SBIW R28,0x8
(0420) }
(0421)
(0422) //主函数
(0423) main()
(0424) {
(0425) float i=0;
027A E504 LDI R16,0x54
027B E010 LDI R17,0
027C 940E02F6 CALL lpm32
027E 01FE MOVW R30,R28
027F 8304 STD Z+4,R16
0280 8315 STD Z+5,R17
0281 8326 STD Z+6,R18
0282 8337 STD Z+7,R19
(0426) //port_init();
(0427) LCD_init();
0283 DDDA RCALL _LCD_init
(0428)
(0429) LCD_write_string(0,0 ,"welcome");
0284 E680 LDI R24,0x60
0285 E090 LDI R25,0
0286 8399 STD Y+1,R25
0287 8388 STD Y+0,R24
0288 2722 CLR R18
0289 2700 CLR R16
028A DE43 RCALL _LCD_write_string
028B C015 RJMP 0x02A1
(0430)
(0431) while(1)
(0432) {i=realTemp();//真实温度
028C DEF5 RCALL _realTemp
028D 01FE MOVW R30,R28
028E 8304 STD Z+4,R16
028F 8315 STD Z+5,R17
0290 8326 STD Z+6,R18
0291 8337 STD Z+7,R19
(0433) ////i= readTempDS18B20()*0.0625;
(0434) displayTemp( 0,1,i);//LCD显示
0292 01FE MOVW R30,R28
0293 8024 LDD R2,Z+4
0294 8035 LDD R3,Z+5
0295 8046 LDD R4,Z+6
0296 8057 LDD R5,Z+7
0297 8228 STD Y+0,R2
0298 8239 STD Y+1,R3
0299 824A STD Y+2,R4
029A 825B STD Y+3,R5
029B E021 LDI R18,1
029C 2700 CLR R16
029D DF1B RCALL _displayTemp
(0435) delay_nms(1500);
FILE: <library>
029E ED0C LDI R16,0xDC
029F E015 LDI R17,5
02A0 DFBF RCALL _delay_nms
02A1 CFEA RJMP 0x028C
02A2 9628 ADIW R28,0x8
02A3 9508 RET
push_arg4:
02A4 933A ST R19,-Y
02A5 932A ST R18,-Y
push_arg2:
02A6 931A ST R17,-Y
02A7 930A ST R16,-Y
02A8 9508 RET
mod16u:
02A9 9468 BSET 6
02AA C001 RJMP xdiv16u
div16u:
02AB 94E8 BCLR 6
xdiv16u:
02AC 92EA ST R14,-Y
02AD 92FA ST R15,-Y
02AE 938A ST R24,-Y
02AF 24EE CLR R14
02B0 24FF CLR R15
02B1 E180 LDI R24,0x10
02B2 0F00 LSL R16
02B3 1F11 ROL R17
02B4 1CEE ROL R14
02B5 1CFF ROL R15
02B6 16E2 CP R14,R18
02B7 06F3 CPC R15,R19
02B8 F018 BCS 0x02BC
02B9 1AE2 SUB R14,R18
02BA 0AF3 SBC R15,R19
02BB 9503 INC R16
02BC 958A DEC R24
02BD F7A1 BNE 0x02B2
02BE F416 BRTC 0x02C1
02BF 2D0E MOV R16,R14
02C0 2D1F MOV R17,R15
02C1 9189 LD R24,Y+
02C2 90F9 LD R15,Y+
02C3 90E9 LD R14,Y+
02C4 9508 RET
pop_gset2:
02C5 E0E2 LDI R30,2
02C6 940C02DA JMP pop
pop_gset3:
02C8 E0E4 LDI R30,4
02C9 940C02DA JMP pop
pop_gset4:
02CB E0E8 LDI R30,0x8
02CC 940C02DA JMP pop
push_gset5:
02CE 92FA ST R15,-Y
02CF 92EA ST R14,-Y
push_gset4:
02D0 92DA ST R13,-Y
02D1 92CA ST R12,-Y
push_gset3:
02D2 92BA ST R11,-Y
02D3 92AA ST R10,-Y
push_gset2:
02D4 937A ST R23,-Y
02D5 936A ST R22,-Y
push_gset1:
02D6 935A ST R21,-Y
02D7 934A ST R20,-Y
02D8 9508 RET
pop_gset1:
02D9 E0E1 LDI R30,1
pop:
02DA 9149 LD R20,Y+
02DB 9159 LD R21,Y+
02DC FDE0 SBRC R30,0
02DD 9508 RET
02DE 9169 LD R22,Y+
02DF 9179 LD R23,Y+
02E0 FDE1 SBRC R30,1
02E1 9508 RET
02E2 90A9 LD R10,Y+
02E3 90B9 LD R11,Y+
02E4 FDE2 SBRC R30,2
02E5 9508 RET
02E6 90C9 LD R12,Y+
02E7 90D9 LD R13,Y+
02E8 FDE3 SBRC R30,3
02E9 9508 RET
02EA 90E9 LD R14,Y+
02EB 90F9 LD R15,Y+
02EC 9508 RET
neg32:
02ED 9500 COM R16
02EE 9510 COM R17
02EF 9520 COM R18
02F0 9530 COM R19
02F1 5F0F SUBI R16,0xFF
02F2 4F1F SBCI R17,0xFF
02F3 4F2F SBCI R18,0xFF
02F4 4F3F SBCI R19,0xFF
02F5 9508 RET
lpm32:
02F6 93EA ST R30,-Y
02F7 93FA ST R31,-Y
02F8 920A ST R0,-Y
02F9 2FE0 MOV R30,R16
02FA 2FF1 MOV R31,R17
02FB 95C8 LPM
02FC 2D00 MOV R16,R0
02FD 9631 ADIW R30,1
02FE 95C8 LPM
02FF 2D10 MOV R17,R0
0300 9631 ADIW R30,1
0301 95C8 LPM
0302 2D20 MOV R18,R0
0303 9631 ADIW R30,1
0304 95C8 LPM
0305 2D30 MOV R19,R0
0306 9009 LD R0,Y+
0307 91F9 LD R31,Y+
0308 91E9 LD R30,Y+
0309 9508 RET
lsr8:
030A 2311 TST R17
030B F019 BEQ 0x030F
030C 9506 LSR R16
030D 951A DEC R17
030E CFFB RJMP lsr8
030F 9508 RET
fp2int:
0310 940E0491 CALL savfacc1
0312 D014 RCALL FTOI
0313 2F02 MOV R16,R18
0314 2F13 MOV R17,R19
0315 FD87 SBRC R24,7
0316 C002 RJMP nojump1
0317 940C0494 JMP restorefacc1
nojump1:
0319 9510 COM R17
031A 9501 NEG R16
031B 4F1F SBCI R17,0xFF
031C 940C0494 JMP restorefacc1
fp2long:
031E 940E0491 CALL savfacc1
0320 D008 RCALL FTOL
0321 FF87 SBRS R24,7
0322 C002 RJMP nojump2
0323 940E02ED CALL neg32
nojump2:
0325 940C0494 JMP restorefacc1
FTOI:
0327 E0BE LDI R27,0xE
0328 C001 RJMP 0x032A
FTOL:
0329 E1BE LDI R27,0x1E
032A 940E0497 CALL unpackfacc1
032C F069 BEQ 0x033A
032D 1BB3 SUB R27,R19
032E F009 BEQ 0x0330
032F F472 BPL 0x033E
0330 2388 TST R24
0331 F022 BMI 0x0336
0332 E010 LDI R17,0
0333 E608 LDI R16,0x68
0334 940C02F6 JMP lpm32
0336 E010 LDI R17,0
0337 E60E LDI R16,0x6E
0338 940C02F6 JMP lpm32
033A E010 LDI R17,0
033B E60C LDI R16,0x6C
033C 940C02F6 JMP lpm32
033E 9533 INC R19
033F F3D2 BMI 0x033A
0340 E030 LDI R19,0
0341 50B8 SUBI R27,0x8
0342 F452 BPL 0x034D
0343 5FB8 SUBI R27,0xF8
0344 2F32 MOV R19,R18
0345 2F21 MOV R18,R17
0346 2F10 MOV R17,R16
0347 E800 LDI R16,0x80
0348 C006 RJMP 0x034F
0349 2F01 MOV R16,R17
034A 2F12 MOV R17,R18
034B E020 LDI R18,0
034C 50B8 SUBI R27,0x8
034D 30B8 CPI R27,0x8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -