⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temperature.lst

📁 ADC采集温度数据通过nrf905发送出去
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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 + -