📄 temperature.lst
字号:
1AC C006 RJMP 0x01B3
1AD 9543 INC R20
1AE 9020 0061 LDS R2,num
1B0 1542 CP R20,R2
1B1 F408 BCC 0x01B3
1B2 CF70 RJMP 0x0123
1B3 C7C3 RJMP pop_xgset300C
_adc_isr:
1B4 921A ST R1,-Y
1B5 922A ST R2,-Y
1B6 923A ST R3,-Y
1B7 924A ST R4,-Y
1B8 925A ST R5,-Y
1B9 938A ST R24,-Y
1BA 939A ST R25,-Y
1BB 93AA ST R26,-Y
1BC 93EA ST R30,-Y
1BD 93FA ST R31,-Y
1BE B61F IN R1,0x3F
1BF 921A ST R1,-Y
(0382) }
(0383) }
(0384) }
(0385) /////////////////////////////////////////////////////////////////////////////////
(0386) //ADC完成中断
(0387) #pragma interrupt_handler adc_isr:iv_ADC
(0388) void adc_isr(void)
(0389) {
(0390)
(0391) /*
(0392) uart_TxChar(0xeb);
(0393) uart_TxChar(0x90);
(0394) uart_TxChar(adc_mul);
(0395) uart_TxChar(ADMUX);
(0396) uart_TxChar(ADCL);
(0397) uart_TxChar(ADCH);
(0398) */
(0399) data[adc_mux*2] = ADCL;
1C0 E185 LDI R24,0x15
1C1 E091 LDI R25,1
1C2 91E0 013F LDS R30,adc_mux
1C4 91F0 0140 LDS R31,adc_mux+1
1C6 0FEE LSL R30
1C7 1FFF ROL R31
1C8 0FE8 ADD R30,R24
1C9 1FF9 ADC R31,R25
1CA B024 IN R2,0x04
1CB 8220 STD Z+0,R2
(0400) data[adc_mux*2+1] = ADCH;
1CC 91E0 013F LDS R30,adc_mux
1CE 91F0 0140 LDS R31,adc_mux+1
1D0 0FEE LSL R30
1D1 1FFF ROL R31
1D2 9631 ADIW R30,1
1D3 0FE8 ADD R30,R24
1D4 1FF9 ADC R31,R25
1D5 B025 IN R2,0x05
1D6 8220 STD Z+0,R2
(0401)
(0402) adc_val = (data[adc_mux*2+1]<<8)|data[adc_mux*2];
1D7 9020 013F LDS R2,adc_mux
1D9 9030 0140 LDS R3,adc_mux+1
1DB 0C22 LSL R2
1DC 1C33 ROL R3
1DD 0121 MOVW R4,R2
1DE 01F1 MOVW R30,R2
1DF 0FE8 ADD R30,R24
1E0 1FF9 ADC R31,R25
1E1 8020 LDD R2,Z+0
1E2 01F2 MOVW R30,R4
1E3 9631 ADIW R30,1
1E4 0FE8 ADD R30,R24
1E5 1FF9 ADC R31,R25
1E6 8030 LDD R3,Z+0
1E7 9230 0142 STS nrf905_temperature.c:adc_val+1,R3
1E9 9220 0141 STS nrf905_temperature.c:adc_val,R2
(0403)
(0404) ++adc_mux;
1EB 9180 013F LDS R24,adc_mux
1ED 9190 0140 LDS R25,adc_mux+1
1EF 9601 ADIW R24,1
1F0 9390 0140 STS adc_mux+1,R25
1F2 9380 013F STS adc_mux,R24
(0405)
(0406) if(num > 4) {
1F4 E084 LDI R24,4
1F5 9020 0061 LDS R2,num
1F7 1582 CP R24,R2
1F8 F4F8 BCC 0x0218
(0407) if(adc_mux == 4) adc_mux = adc_mux+2;
1F9 9180 013F LDS R24,adc_mux
1FB 9190 0140 LDS R25,adc_mux+1
1FD 3084 CPI R24,4
1FE E0E0 LDI R30,0
1FF 079E CPC R25,R30
200 F429 BNE 0x0206
201 9602 ADIW R24,2
202 9390 0140 STS adc_mux+1,R25
204 9380 013F STS adc_mux,R24
(0408) if(adc_mux > (num+1)) adc_mux = 0;
206 9180 0061 LDS R24,num
208 2799 CLR R25
209 9601 ADIW R24,1
20A 9020 013F LDS R2,adc_mux
20C 9030 0140 LDS R3,adc_mux+1
20E 1582 CP R24,R2
20F 0593 CPC R25,R3
210 F4C0 BCC 0x0229
211 2422 CLR R2
212 2433 CLR R3
213 9230 0140 STS adc_mux+1,R3
215 9220 013F STS adc_mux,R2
(0409) }
217 C011 RJMP 0x0229
(0410) else if(adc_mux > (num-1)) adc_mux = 0;
218 9180 0061 LDS R24,num
21A 2799 CLR R25
21B 9701 SBIW R24,1
21C 9020 013F LDS R2,adc_mux
21E 9030 0140 LDS R3,adc_mux+1
220 1582 CP R24,R2
221 0593 CPC R25,R3
222 F430 BCC 0x0229
223 2422 CLR R2
224 2433 CLR R3
225 9230 0140 STS adc_mux+1,R3
227 9220 013F STS adc_mux,R2
229 9019 LD R1,Y+
22A BE1F OUT 0x3F,R1
22B 91F9 LD R31,Y+
22C 91E9 LD R30,Y+
22D 91A9 LD R26,Y+
22E 9199 LD R25,Y+
22F 9189 LD R24,Y+
230 9059 LD R5,Y+
231 9049 LD R4,Y+
232 9039 LD R3,Y+
233 9029 LD R2,Y+
234 9019 LD R1,Y+
235 9518 RETI
_GetLPC:
c --> R20
i --> R22
len --> R18
buf --> R16
236 D745 RCALL push_xgsetF000
(0411) }
(0412)
(0413) /////////////////////////////////////////////////////////////////////////////////
(0414) BYTE GetLPC(BYTE *buf,short len)
(0415) {
(0416) short i;
(0417) BYTE c = 0xff;
237 EF4F LDI R20,0xFF
(0418)
(0419) for ( i=0; i<len; i++ ) c ^= buf[i];
238 2766 CLR R22
239 2777 CLR R23
23A C007 RJMP 0x0242
23B 01FB MOVW R30,R22
23C 0FE0 ADD R30,R16
23D 1FF1 ADC R31,R17
23E 8020 LDD R2,Z+0
23F 2542 EOR R20,R2
240 5F6F SUBI R22,0xFF
241 4F7F SBCI R23,0xFF
242 1762 CP R22,R18
243 0773 CPC R23,R19
244 F3B4 BLT 0x023B
(0420) return c;
245 2F04 MOV R16,R20
246 C73A RJMP pop_xgsetF000
(0421) }
(0422)
(0423) /////////////////////////////////////////////////////////////////////////////////
(0424) void CallData(void)
(0425) {
(0426) tx_buf[0] = 0xeb;
_CallData:
247 EE8B LDI R24,0xEB
248 9380 0084 STS tx_buf,R24
(0427) tx_buf[1] = 0x90;
24A E980 LDI R24,0x90
24B 9380 0085 STS tx_buf+1,R24
(0428) tx_buf[2] = CMD_ASKDATA;
24D 2422 CLR R2
24E 9220 0086 STS tx_buf+2,R2
(0429) tx_buf[3] = ID_L;
250 9020 006F LDS R2,ID_L
252 9220 0087 STS tx_buf+3,R2
(0430) tx_buf[4] = ID_H;
254 9020 006E LDS R2,ID_H
256 9220 0088 STS 0x0088,R2
(0431) tx_buf[5] = num;
258 9020 0061 LDS R2,num
25A 9220 0089 STS 0x0089,R2
(0432) tx_buf[6] = GetLPC(tx_buf,7);
25C E027 LDI R18,7
25D E030 LDI R19,0
25E E804 LDI R16,0x84
25F E010 LDI R17,0
260 DFD5 RCALL _GetLPC
261 9300 008A STS 0x008A,R16
(0433) tx_len = 7;
263 E087 LDI R24,7
264 9380 0083 STS nrf905_temperature.c:tx_len,R24
266 9508 RET
_RetData:
i --> R20
267 D70A RCALL push_xgset300C
(0434) }
(0435)
(0436) void RetData(void)
(0437) {
(0438) BYTE i;
(0439)
(0440) tx_buf[0] = 0xeb;
268 EE8B LDI R24,0xEB
269 9380 0084 STS tx_buf,R24
(0441) tx_buf[1] = 0x90;
26B E980 LDI R24,0x90
26C 9380 0085 STS tx_buf+1,R24
(0442) tx_buf[2] = CMD_RETDATA;
26E E081 LDI R24,1
26F 9380 0086 STS tx_buf+2,R24
(0443) tx_buf[3] = ID_L;
271 9020 006F LDS R2,ID_L
273 9220 0087 STS tx_buf+3,R2
(0444) tx_buf[4] = ID_H;
275 9020 006E LDS R2,ID_H
277 9220 0088 STS 0x0088,R2
(0445) tx_buf[5] = num;
279 9020 0061 LDS R2,num
27B 9220 0089 STS 0x0089,R2
(0446) tx_buf[6] = startnum;
27D 9020 0114 LDS R2,startnum
27F 9220 008A STS 0x008A,R2
(0447) if(num <4){
281 9180 0061 LDS R24,num
283 3084 CPI R24,4
284 F008 BCS 0x0286
285 C03A RJMP 0x02C0
(0448) for(i=7;i<num*2+7;i++){
286 E047 LDI R20,7
287 C016 RJMP 0x029E
(0449) tx_buf[i] = data[startnum*2+i-7];
288 2E24 MOV R2,R20
289 2433 CLR R3
28A 91E0 0114 LDS R30,startnum
28C 27FF CLR R31
28D 0FEE LSL R30
28E 1FFF ROL R31
28F 0DE2 ADD R30,R2
290 1DF3 ADC R31,R3
291 E08E LDI R24,0xE
292 E091 LDI R25,1
293 0FE8 ADD R30,R24
294 1FF9 ADC R31,R25
295 8020 LDD R2,Z+0
296 E884 LDI R24,0x84
297 E090 LDI R25,0
298 2FE4 MOV R30,R20
299 27FF CLR R31
29A 0FE8 ADD R30,R24
29B 1FF9 ADC R31,R25
29C 8220 STD Z+0,R2
29D 9543 INC R20
29E 9180 0061 LDS R24,num
2A0 0F88 LSL R24
2A1 5F89 SUBI R24,0xF9
2A2 1748 CP R20,R24
2A3 F320 BCS 0x0288
(0450) }
(0451) tx_buf[7+num*2] = GetLPC(tx_buf,7+num*2);
2A4 9020 0061 LDS R2,num
2A6 2433 CLR R3
2A7 0C22 LSL R2
2A8 1C33 ROL R3
2A9 0191 MOVW R18,R2
2AA 5F29 SUBI R18,0xF9
2AB 4F3F SBCI R19,0xFF
2AC E804 LDI R16,0x84
2AD E010 LDI R17,0
2AE 922F PUSH R2
2AF 923F PUSH R3
2B0 DF85 RCALL _GetLPC
2B1 903F POP R3
2B2 902F POP R2
2B3 E88B LDI R24,0x8B
2B4 E090 LDI R25,0
2B5 01F1 MOVW R30,R2
2B6 0FE8 ADD R30,R24
2B7 1FF9 ADC R31,R25
2B8 8300 STD Z+0,R16
(0452) tx_len = 8+num*2;
2B9 9180 0061 LDS R24,num
2BB 0F88 LSL R24
2BC 5F88 SUBI R24,0xF8
2BD 9380 0083 STS nrf905_temperature.c:tx_len,R24
(0453)
(0454) }
2BF C069 RJMP 0x0329
(0455) else{
(0456) if(startnum == 0){
2C0 9020 0114 LDS R2,startnum
2C2 2022 TST R2
2C3 F529 BNE 0x02E9
(0457) for(i=7;i<15;i++){
2C4 E047 LDI R20,7
2C5 C016 RJMP 0x02DC
(0458) tx_buf[i] = data[startnum*2+i-7];
2C6 2E24 MOV R2,R20
2C7 2433 CLR R3
2C8 91E0 0114 LDS R30,startnum
2CA 27FF CLR R31
2CB 0FEE LSL R30
2CC 1FFF ROL R31
2CD 0DE2 ADD R30,R2
2CE 1DF3 ADC R31,R3
2CF E08E LDI R24,0xE
2D0 E091 LDI R25,1
2D1 0FE8 ADD R30,R24
2D2 1FF9 ADC R31,R25
2D3 8020 LDD R2,Z+0
2D4 E884 LDI R24,0x84
2D5 E090 LDI R25,0
2D6 2FE4 MOV R30,R20
2D7 27FF CLR R31
2D8 0FE8 ADD R30,R24
2D9 1FF9 ADC R31,R25
2DA 8220 STD Z+0,R2
2DB 9543 INC R20
2DC 304F CPI R20,0xF
2DD F340 BCS 0x02C6
(0459) }
(0460) tx_buf[15] = GetLPC(tx_buf,15);
2DE E02F LDI R18,0xF
2DF E030 LDI R19,0
2E0 E804 LDI R16,0x84
2E1 E010 LDI R17,0
2E2 DF53 RCALL _GetLPC
2E3 2EA0 MOV R10,R16
2E4 92A0 0093 STS 0x0093,R10
(0461) tx_len = 16;
2E6 E180 LDI R24,0x10
2E7 9380 0083 STS nrf905_temperature.c:tx_len,R24
(0462) }
(0463) if(startnum == 4){
2E9 9180 0114 LDS R24,startnum
2EB 3084 CPI R24,4
2EC F009 BEQ 0x02EE
2ED C03B RJMP 0x0329
(0464) for(i=7;i<((num-4)*2+7);i++){
2EE E047 LDI R20,7
2EF C017 RJMP 0x0307
(0465) tx_buf[i] = data[(startnum+2)*2+i-7];
2F0 2E24 MOV R2,R20
2F1 2433 CLR R3
2F2 91E0 0114 LDS R30,startnum
2F4 27FF CLR R31
2F5 9632 ADIW R30,2
2F6 0FEE LSL R30
2F7 1FFF ROL R31
2F8 0DE2 ADD R30,R2
2F9 1DF3 ADC R31,R3
2FA E08E LDI R24,0xE
2FB E091 LDI R25,1
2FC 0FE8 ADD R30,R24
2FD 1FF9 ADC R31,R25
2FE 8020 LDD R2,Z+0
2FF E884 LDI R24,0x84
300 E090 LDI R25,0
301 2FE4 MOV R30,R20
302 27FF CLR R31
303 0FE8 ADD R30,R24
304 1FF9 ADC R31,R25
305 8220 STD Z+0,R2
306 9543 INC R20
307 9180 0061 LDS R24,num
309 5084 SUBI R24,4
30A 0F88 LSL R24
30B 5F89 SUBI R24,0xF9
30C 1748 CP R20,R24
30D F310 BCS 0x02F0
(0466) }
(0467) tx_buf[7+(num-4)*2] = GetLPC(tx_buf,7+(num-4)*2);
30E 9140 0061 LDS R20,num
310 2755 CLR R21
311 5044 SUBI R20,4
312 4050 SBCI R21,0
313 0F44 LSL R20
314 1F55 ROL R21
315 019A MOVW R18,R20
316 5F29 SUBI R18,0xF9
317 4F3F SBCI R19,0xFF
318 E804 LDI R16,0x84
319 E010 LDI R17,0
31A DF1B RCALL _GetLPC
31B 2EA0 MOV R10,R16
31C E88B LDI R24,0x8B
31D E090 LDI R25,0
31E 01FA MOVW R30,R20
31F 0FE8 ADD R30,R24
320 1FF9 ADC R31,R25
321 82A0 STD Z+0,R10
(0468) tx_len = 8+(num-4)*2;
322 9180 0061 LDS R24,num
324 5084 SUBI R24,4
325 0F88 LSL R24
326 5F88 SUBI R24,0xF8
327 9380 0083 STS nrf905_temperature.c:tx_len,R24
(0469) }
(0470) }
329 C64D RJMP pop_xgset300C
_DownPara:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -