📄 can-18b20.lst
字号:
(0496) send_box_0(); //发送CAN信息
0278 DDE1 RCALL _send_box_0
(0497) minus_flag=0; //负温度标志清0
0279 2422 CLR R2
027A 9220006B STS minus_flag,R2
(0498) // 读取温度值
(0499) CLI();
027C 94F8 BCLR 7
(0500) while(!ds1820_ack());
027D DEAB RCALL _ds1820_ack
027E 2300 TST R16
027F F3E9 BEQ 0x027D
(0501) SEI();
0280 9478 BSET 7
(0502) write_byte(0xCC); // Skip ROM
0281 EC0C LDI R16,0xCC
0282 DEDD RCALL _write_byte
(0503) write_byte(0x44); // Start Conversion
0283 E404 LDI R16,0x44
0284 DEDB RCALL _write_byte
(0504) delay(20);
0285 E104 LDI R16,0x14
0286 E010 LDI R17,0
0287 DF0E RCALL _delay
(0505) CLI();
0288 94F8 BCLR 7
(0506) while(!ds1820_ack());
0289 DE9F RCALL _ds1820_ack
028A 2300 TST R16
028B F3E9 BEQ 0x0289
(0507) SEI();
028C 9478 BSET 7
(0508) write_byte(0xCC); // Skip ROM
028D EC0C LDI R16,0xCC
028E DED1 RCALL _write_byte
(0509) write_byte(0xBE); // Read Scratch Pad
028F EB0E LDI R16,0xBE
0290 DECF RCALL _write_byte
(0510) for(j = 0; j < 9; j++)
0291 24EE CLR R14
0292 C008 RJMP 0x029B
(0511) temporary[j] = read_byte();
0293 DEAC RCALL _read_byte
0294 01CE MOVW R24,R28
0295 2DEE MOV R30,R14
0296 27FF CLR R31
0297 0FE8 ADD R30,R24
0298 1FF9 ADC R31,R25
0299 8300 STD Z+0,R16
029A 94E3 INC R14
029B 2D8E MOV R24,R14
029C 3089 CPI R24,0x9
029D F3A8 BCS 0x0293
(0512) if(!crccheck(temporary,9)) //CRC校验正确
029E E029 LDI R18,0x9
029F 018E MOVW R16,R28
02A0 DE53 RCALL _crccheck
02A1 2300 TST R16
02A2 F009 BEQ 0x02A4
02A3 C076 RJMP 0x031A
(0513) {
(0514) teml=temporary[0];
02A4 8168 LDD R22,Y+0
(0515) temh=temporary[1];
02A5 8149 LDD R20,Y+1
(0516) // 处理小数第一位
(0517) j=teml&0x0F;
02A6 2F86 MOV R24,R22
02A7 708F ANDI R24,0xF
02A8 2EE8 MOV R14,R24
(0518) //温度十位个位处理
(0519) teml>>=4;
02A9 2F86 MOV R24,R22
02AA 9582 SWAP R24
02AB 708F ANDI R24,0xF
02AC 2F68 MOV R22,R24
(0520) temh<<=4;
02AD 2F84 MOV R24,R20
02AE 708F ANDI R24,0xF
02AF 9582 SWAP R24
02B0 2F48 MOV R20,R24
(0521) i=teml|temh;
02B1 2EC6 MOV R12,R22
02B2 2AC8 OR R12,R24
(0522) if(i>=0x80) //是负温度
02B3 2D8C MOV R24,R12
02B4 3880 CPI R24,0x80
02B5 F048 BCS 0x02BF
(0523) {minus_flag=1;
02B6 E081 LDI R24,1
02B7 9380006B STS minus_flag,R24
(0524) i=~i; //取反
02B9 94C0 COM R12
(0525) j=(~j)&0x0F;
02BA 2D8E MOV R24,R14
02BB 9580 COM R24
02BC 708F ANDI R24,0xF
02BD 2EE8 MOV R14,R24
(0526) j=j+1;} //加1
02BE 94E3 INC R14
(0527) switch(j) //小数第一位
02BF 2CAE MOV R10,R14
02C0 24BB CLR R11
02C1 01C5 MOVW R24,R10
02C2 3080 CPI R24,0
02C3 E0E0 LDI R30,0
02C4 079E CPC R25,R30
02C5 F40C BGE 0x02C7
02C6 C03E RJMP 0x0305
02C7 E180 LDI R24,0x10
02C8 158A CP R24,R10
02C9 059B CPC R25,R11
02CA F40C BGE 0x02CC
02CB C039 RJMP 0x0305
02CC E002 LDI R16,2
02CD E010 LDI R17,0
02CE 0195 MOVW R18,R10
02CF D081 RCALL empy16s
02D0 01F8 MOVW R30,R16
02D1 E286 LDI R24,0x26
02D2 E090 LDI R25,0
02D3 0FE8 ADD R30,R24
02D4 1FF9 ADC R31,R25
02D5 9005 LPM R0,Z+
02D6 9014 LPM R1,0(Z)
02D7 01F0 MOVW R30,R0
02D8 9409 IJMP
(0528) {case 0:
(0529) case 1:{dot1=0;break;}
02D9 2422 CLR R2
02DA 9220006C STS dot1,R2
02DC C028 RJMP 0x0305
(0530) case 2:
(0531) case 3:{dot1=1;break;}
02DD E081 LDI R24,1
02DE 9380006C STS dot1,R24
02E0 C024 RJMP 0x0305
(0532) case 4:{dot1=2;break;}
02E1 E082 LDI R24,2
02E2 9380006C STS dot1,R24
02E4 C020 RJMP 0x0305
(0533) case 5:
(0534) case 6:{dot1=3;break;}
02E5 E083 LDI R24,3
02E6 9380006C STS dot1,R24
02E8 C01C RJMP 0x0305
(0535) case 7:{dot1=4;break;}
02E9 E084 LDI R24,4
02EA 9380006C STS dot1,R24
02EC C018 RJMP 0x0305
(0536) case 8:
(0537) case 9:{dot1=5;break;}
02ED E085 LDI R24,5
02EE 9380006C STS dot1,R24
02F0 C014 RJMP 0x0305
(0538) case 10:
(0539) case 11:{dot1=6;break;}
02F1 E086 LDI R24,6
02F2 9380006C STS dot1,R24
02F4 C010 RJMP 0x0305
(0540) case 12:{dot1=7;break;}
02F5 E087 LDI R24,7
02F6 9380006C STS dot1,R24
02F8 C00C RJMP 0x0305
(0541) case 13:
(0542) case 14:{dot1=8;break;}
02F9 E088 LDI R24,0x8
02FA 9380006C STS dot1,R24
02FC C008 RJMP 0x0305
(0543) case 15:{dot1=9;break;}
02FD E089 LDI R24,0x9
02FE 9380006C STS dot1,R24
0300 C004 RJMP 0x0305
(0544) case 16:{dot1=0;i=i+1;break;}
0301 2422 CLR R2
0302 9220006C STS dot1,R2
0304 94C3 INC R12
(0545) default:break;
(0546) }
(0547) shi=i/10; //十位
0305 E01A LDI R17,0xA
0306 2D0C MOV R16,R12
0307 D033 RCALL div8u
0308 9300006E STS shi,R16
(0548) ge=i%10; //个位
030A E01A LDI R17,0xA
030B 2D0C MOV R16,R12
030C D02C RCALL mod8u
030D 9300006D STS ge,R16
(0549) if(minus_flag==1)//负温度
030F 9180006B LDS R24,minus_flag
0311 3081 CPI R24,1
0312 F429 BNE 0x0318
(0550) wendu=i|0x80; //暂时做 char处理
0313 2D8C MOV R24,R12
0314 6880 ORI R24,0x80
0315 9380006F STS wendu,R24
0317 C002 RJMP 0x031A
(0551) else
(0552) wendu=i;
FILE: <library>
0318 92C0006F STS wendu,R12
031A CF52 RJMP 0x026D
031B 9629 ADIW R28,0x9
031C 9508 RET
mod16u:
031D 9468 BSET 6
031E C001 RJMP xdiv16u
div16u:
031F 94E8 BCLR 6
xdiv16u:
0320 92EA ST R14,-Y
0321 92FA ST R15,-Y
0322 938A ST R24,-Y
0323 24EE CLR R14
0324 24FF CLR R15
0325 E180 LDI R24,0x10
0326 0F00 LSL R16
0327 1F11 ROL R17
0328 1CEE ROL R14
0329 1CFF ROL R15
032A 16E2 CP R14,R18
032B 06F3 CPC R15,R19
032C F018 BCS 0x0330
032D 1AE2 SUB R14,R18
032E 0AF3 SBC R15,R19
032F 9503 INC R16
0330 958A DEC R24
0331 F7A1 BNE 0x0326
0332 F416 BRTC 0x0335
0333 2D0E MOV R16,R14
0334 2D1F MOV R17,R15
0335 9189 LD R24,Y+
0336 90F9 LD R15,Y+
0337 90E9 LD R14,Y+
0338 9508 RET
mod8u:
0339 9468 BSET 6
033A C001 RJMP xdiv8u
div8u:
033B 94E8 BCLR 6
xdiv8u:
033C 932A ST R18,-Y
033D 92FA ST R15,-Y
033E 92EA ST R14,-Y
033F 24FF CLR R15
0340 24EE CLR R14
0341 E120 LDI R18,0x10
0342 0F00 LSL R16
0343 1CFF ROL R15
0344 1CEE ROL R14
0345 16E1 CP R14,R17
0346 F010 BCS 0x0349
0347 1AE1 SUB R14,R17
0348 9503 INC R16
0349 952A DEC R18
034A F7B9 BNE 0x0342
034B F40E BRTC 0x034D
034C 2D0E MOV R16,R14
034D 90E9 LD R14,Y+
034E 90F9 LD R15,Y+
034F 9129 LD R18,Y+
0350 9508 RET
empy16s:
0351 920A ST R0,-Y
0352 921A ST R1,-Y
0353 938A ST R24,-Y
0354 939A ST R25,-Y
0355 9F02 MUL R16,R18
0356 01C0 MOVW R24,R0
0357 9F12 MUL R17,R18
0358 0D90 ADD R25,R0
0359 9F03 MUL R16,R19
035A 0D90 ADD R25,R0
035B 018C MOVW R16,R24
035C 9199 LD R25,Y+
035D 9189 LD R24,Y+
035E 9019 LD R1,Y+
035F 9009 LD R0,Y+
0360 9508 RET
pop_gset2:
0361 E0E2 LDI R30,2
0362 C00E RJMP pop
pop_gset5:
0363 27EE CLR R30
0364 C00C RJMP pop
push_gset5:
0365 92FA ST R15,-Y
0366 92EA ST R14,-Y
push_gset4:
0367 92DA ST R13,-Y
0368 92CA ST R12,-Y
push_gset3:
0369 92BA ST R11,-Y
036A 92AA ST R10,-Y
push_gset2:
036B 937A ST R23,-Y
036C 936A ST R22,-Y
push_gset1:
036D 935A ST R21,-Y
036E 934A ST R20,-Y
036F 9508 RET
pop_gset1:
0370 E0E1 LDI R30,1
pop:
0371 9149 LD R20,Y+
0372 9159 LD R21,Y+
0373 FDE0 SBRC R30,0
0374 9508 RET
0375 9169 LD R22,Y+
0376 9179 LD R23,Y+
0377 FDE1 SBRC R30,1
0378 9508 RET
0379 90A9 LD R10,Y+
037A 90B9 LD R11,Y+
037B FDE2 SBRC R30,2
037C 9508 RET
037D 90C9 LD R12,Y+
037E 90D9 LD R13,Y+
037F FDE3 SBRC R30,3
0380 9508 RET
0381 90E9 LD R14,Y+
0382 90F9 LD R15,Y+
0383 9508 RET
push_lset:
0384 93FA ST R31,-Y
0385 93EA ST R30,-Y
0386 93BA ST R27,-Y
0387 93AA ST R26,-Y
0388 939A ST R25,-Y
0389 938A ST R24,-Y
038A 933A ST R19,-Y
038B 932A ST R18,-Y
038C 931A ST R17,-Y
038D 930A ST R16,-Y
038E 929A ST R9,-Y
038F 928A ST R8,-Y
0390 927A ST R7,-Y
0391 926A ST R6,-Y
0392 925A ST R5,-Y
0393 924A ST R4,-Y
0394 923A ST R3,-Y
0395 922A ST R2,-Y
0396 921A ST R1,-Y
0397 920A ST R0,-Y
0398 B60F IN R0,0x3F
0399 920A ST R0,-Y
039A 9508 RET
pop_lset:
039B 9009 LD R0,Y+
039C BE0F OUT 0x3F,R0
039D 9009 LD R0,Y+
039E 9019 LD R1,Y+
039F 9029 LD R2,Y+
03A0 9039 LD R3,Y+
03A1 9049 LD R4,Y+
03A2 9059 LD R5,Y+
03A3 9069 LD R6,Y+
03A4 9079 LD R7,Y+
03A5 9089 LD R8,Y+
03A6 9099 LD R9,Y+
03A7 9109 LD R16,Y+
03A8 9119 LD R17,Y+
03A9 9129 LD R18,Y+
03AA 9139 LD R19,Y+
03AB 9189 LD R24,Y+
03AC 9199 LD R25,Y+
03AD 91A9 LD R26,Y+
03AE 91B9 LD R27,Y+
03AF 91E9 LD R30,Y+
03B0 91F9 LD R31,Y+
03B1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -