📄 lianjie.lst
字号:
28D E001 LDI R16,1
28E DEA2 RCALL _SPI_Char
28F 9983 SBIC 0x10,3
290 CFFB RJMP 0x028C
(0565) }
(0566)
(0567) CSN_H;
291 9AC2 SBI 0x18,2
(0568) return spi_handle(R_RX_PAYLOAD);
292 E204 LDI R16,0x24
293 DEC2 RCALL _spi_handle
294 9149 LD R20,Y+
295 9508 RET
(0569) }
(0570)
(0571) /*////////////////////////////////////////////////////////////
(0572) void MakeFrame(BYTE cmd)
(0573) {
(0574) BYTE i;
(0575) switch(cmd) {
(0576) case CMD_ASKDATA:
(0577) // CallData();
(0578) break;
(0579) case CMD_RETDATA:
(0580) // ReportData();
(0581) break;
(0582) case CMD_DOWNPARA:
(0583) // SetPara();
(0584) break;
(0585) case CMD_RETPARA:
(0586) // RetPara();
(0587) break;
(0588) }
(0589)
(0590) for ( i=0; i<tx_len; i++ ) uart_TxChar(tx_buf[i]);
(0591)
(0592) for ( i=tx_len; i<16; i++ ) tx_buf[i] = 0;
(0593) }
(0594)
(0595) /////////////////////////////////////////////////////////////
(0596) */
(0597) //void SendGram(BYTE cmd)
(0598) void SendGram()
(0599) {
(0600) // MakeFrame(cmd);
(0601) nrF905_RX_Mode();
_SendGram:
296 DEB8 RCALL _nrF905_RX_Mode
(0602)
(0603) // uart_TxChar('1');
(0604) while(CD) {;}
297 9982 SBIC 0x10,2
298 CFFE RJMP 0x0297
(0605) // uart_TxChar('2');
(0606) while(AM) {;}
299 9984 SBIC 0x10,4
29A CFFE RJMP 0x0299
(0607) // uart_TxChar('3');
(0608)
(0609) nrF905_TX_Mode();
29B DEAF RCALL _nrF905_TX_Mode
(0610) SPI_W_TX_ADDRESS();
29C DFC3 RCALL _SPI_W_TX_ADDRESS
(0611) SPI_W_TX_PAYLOAD();
29D DF8A RCALL _SPI_W_TX_PAYLOAD
(0612) // uart_TxChar('4');
(0613) TRX_CE_H;
29E 9A96 SBI 0x12,6
(0614) us(20);
29F E104 LDI R16,0x14
2A0 E010 LDI R17,0
2A1 DE19 RCALL _us
(0615) // uart_TxChar('5');
(0616) TRX_CE_L;
2A2 9896 CBI 0x12,6
(0617) while (!DR);
2A3 9B83 SBIS 0x10,3
2A4 CFFE RJMP 0x02A3
(0618)
(0619) nrF905_RX_Mode();
2A5 DEA9 RCALL _nrF905_RX_Mode
2A6 9508 RET
_handle:
i --> Y,+1
startno --> R12
num --> R10
len --> R20
2A7 D2B8 RCALL push_xgset303C
(0620) }
(0621)
(0622) /////////////////////////////////////////////////////////////
(0623) void handle(void)
(0624) {
(0625) BYTE len,i,num,startno;
(0626) // WORD id;
(0627) // BYTE lpc;
(0628) if ( spi_rxbuf[0] != 0xeb ) return;
2A8 9180 0071 LDS R24,spi_rxbuf
2AA 3E8B CPI R24,0xEB
2AB F009 BEQ 0x02AD
2AC C037 RJMP 0x02E4
(0629) if ( spi_rxbuf[1] != 0x90 ) return;
2AD 9180 0072 LDS R24,spi_rxbuf+1
2AF 3980 CPI R24,0x90
2B0 F009 BEQ 0x02B2
2B1 C032 RJMP 0x02E4
(0630)
(0631) switch(spi_rxbuf[2]) {
2B2 9140 0073 LDS R20,spi_rxbuf+2
2B4 2755 CLR R21
2B5 3041 CPI R20,1
2B6 E0E0 LDI R30,0
2B7 075E CPC R21,R30
2B8 F069 BEQ 0x02C6
2B9 3043 CPI R20,3
2BA E0E0 LDI R30,0
2BB 075E CPC R21,R30
2BC F0E9 BEQ 0x02DA
2BD 3046 CPI R20,6
2BE E0E0 LDI R30,0
2BF 075E CPC R21,R30
2C0 F0D9 BEQ 0x02DC
2C1 3047 CPI R20,7
2C2 E0E0 LDI R30,0
2C3 075E CPC R21,R30
2C4 F0C9 BEQ 0x02DE
2C5 C01E RJMP 0x02E4
(0632) case CMD_RETDATA:
(0633) num = spi_rxbuf[5];
2C6 90A0 0076 LDS R10,0x0076
(0634) startno = spi_rxbuf[6];
2C8 90C0 0077 LDS R12,0x0077
(0635) if(num > 3){
2CA E083 LDI R24,3
2CB 158A CP R24,R10
2CC F448 BCC 0x02D6
(0636) if(startno == 0) len = 16;
2CD 20CC TST R12
2CE F411 BNE 0x02D1
2CF E140 LDI R20,0x10
2D0 C00E RJMP 0x02DF
(0637) else len = 8+(num-startno)*2;
2D1 2D4A MOV R20,R10
2D2 194C SUB R20,R12
2D3 0F44 LSL R20
2D4 5F48 SUBI R20,0xF8
(0638) }
2D5 C009 RJMP 0x02DF
(0639) else len = 8+num*2;
2D6 2D4A MOV R20,R10
2D7 0F44 LSL R20
2D8 5F48 SUBI R20,0xF8
(0640) break;
2D9 C005 RJMP 0x02DF
(0641) case CMD_RETPARA:
(0642) len=14;
2DA E04E LDI R20,0xE
(0643) break;
2DB C003 RJMP 0x02DF
(0644)
(0645) case CMD_SETID_OK:
(0646) len = 6;
2DC E046 LDI R20,6
(0647) break;
2DD C001 RJMP 0x02DF
(0648) case CMD_READID:
(0649) len = 6;
2DE E046 LDI R20,6
(0650) break;
(0651) default:
(0652) return;
(0653) }
(0654)
(0655) /* if ( GetLPC(spi_rxbuf,len) ) return;
(0656)
(0657) switch(spi_rxbuf[2]) {
(0658) case CMD_RETDATA:
(0659) // put_bytes(spi_rxbuf,len);
(0660) break;
(0661) case CMD_RETPARA:
(0662) // put_bytes(spi_rxbuf,len);
(0663) break;
(0664) }
(0665) */
(0666) //uart_TxChar(len);
(0667) put_bytes(spi_rxbuf,len);
2DF 2F24 MOV R18,R20
2E0 2733 CLR R19
2E1 E701 LDI R16,0x71
2E2 E010 LDI R17,0
2E3 DE17 RCALL _put_bytes
2E4 C282 RJMP pop_xgset303C
(0668) }
(0669)
(0670) /////////////////////////////////////////////////////////////
(0671) void ReceiveGram()
(0672) {
(0673) if ( !DR ) return;
_ReceiveGram:
2E5 9983 SBIC 0x10,3
2E6 C001 RJMP 0x02E8
2E7 C001 RJMP 0x02E9
(0674)
(0675) // SPI_R_CONFIG();
(0676) SPI_R_RX_PAYLOAD();
2E8 DF94 RCALL _SPI_R_RX_PAYLOAD
2E9 9508 RET
(0677) }
(0678)
(0679) /////////////////////////////////////////////////////////////
(0680) void timer1_init(void)
(0681) {
(0682) WORD timer;
(0683)
(0684) timer=fosc/1024;
_timer1_init:
timer --> R16
2EA E200 LDI R16,0x20
2EB E11C LDI R17,0x1C
(0685) TCNTData=0xffff-timer;
2EC EF8F LDI R24,0xFF
2ED EF9F LDI R25,0xFF
2EE 011C MOVW R2,R24
2EF 1A20 SUB R2,R16
2F0 0A31 SBC R3,R17
2F1 9230 006E STS TCNTData+1,R3
2F3 9220 006D STS TCNTData,R2
(0686) TIMSK |= 0x04;
2F5 B789 IN R24,0x39
2F6 6084 ORI R24,4
2F7 BF89 OUT 0x39,R24
(0687) NOP();
2F8 0000 NOP
(0688) TCCR1B = 0x00;
2F9 2422 CLR R2
2FA BC2E OUT 0x2E,R2
(0689) TCNT1H = (TCNTData>>8)&0xff;
2FB 9180 006D LDS R24,TCNTData
2FD 9190 006E LDS R25,TCNTData+1
2FF 2F89 MOV R24,R25
300 2799 CLR R25
301 7090 ANDI R25,0
302 BD8D OUT 0x2D,R24
(0690) TCNT1L = TCNTData&0xff;
303 9180 006D LDS R24,TCNTData
305 9190 006E LDS R25,TCNTData+1
307 7090 ANDI R25,0
308 BD8C OUT 0x2C,R24
(0691) OCR1AH = 0x00;
309 BC2B OUT 0x2B,R2
(0692) NOP();
30A 0000 NOP
(0693) OCR1AL = 0x00;
30B BC2A OUT 0x2A,R2
(0694) NOP();
30C 0000 NOP
(0695) OCR1BH = 0x00;
30D BC29 OUT 0x29,R2
(0696) NOP();
30E 0000 NOP
(0697) OCR1BL = 0x00;
30F BC28 OUT 0x28,R2
(0698) NOP();
310 0000 NOP
(0699) TCCR1A = 0x00;
311 BC2F OUT 0x2F,R2
(0700) NOP();
312 0000 NOP
(0701) TCCR1B = 0x05;
313 E085 LDI R24,5
314 BD8E OUT 0x2E,R24
315 9508 RET
_timer1_ovf_isr:
316 922A ST R2,-Y
317 923A ST R3,-Y
318 930A ST R16,-Y
319 931A ST R17,-Y
31A 938A ST R24,-Y
31B 939A ST R25,-Y
31C 93AA ST R26,-Y
31D 93EA ST R30,-Y
31E B62F IN R2,0x3F
31F 922A ST R2,-Y
(0702) }
(0703)
(0704) /////////////////////////////////////////////////////////////////////////////////
(0705) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0706) void timer1_ovf_isr(void)
(0707) {
(0708) TCNT1H = (TCNTData>>8)&0xff;;
320 9180 006D LDS R24,TCNTData
322 9190 006E LDS R25,TCNTData+1
324 2F89 MOV R24,R25
325 2799 CLR R25
326 7090 ANDI R25,0
327 BD8D OUT 0x2D,R24
(0709) NOP();
328 0000 NOP
(0710) TCNT1L = TCNTData&0xff;
329 9180 006D LDS R24,TCNTData
32B 9190 006E LDS R25,TCNTData+1
32D 7090 ANDI R25,0
32E BD8C OUT 0x2C,R24
(0711)
(0712) Count++;
32F 9180 0063 LDS R24,Count
331 9190 0064 LDS R25,Count+1
333 9601 ADIW R24,1
334 9390 0064 STS Count+1,R25
336 9380 0063 STS Count,R24
(0713) if ( Count < 120 ) WDR();
338 3788 CPI R24,0x78
339 E0E0 LDI R30,0
33A 079E CPC R25,R30
33B F408 BCC 0x033D
33C 95A8 WDR
(0714)
(0715) if ( FlashFlag ) {
33D 9020 006C LDS R2,FlashFlag
33F 2022 TST R2
340 F071 BEQ 0x034F
(0716) if ( FlashFlag % 2 ) LED_L;
341 E012 LDI R17,2
342 2D02 MOV R16,R2
343 D1D2 RCALL mod8u
344 2300 TST R16
345 F011 BEQ 0x0348
346 9897 CBI 0x12,7
347 C001 RJMP 0x0349
(0717) else LED_H;
348 9A97 SBI 0x12,7
(0718)
(0719) FlashFlag--;
349 9180 006C LDS R24,FlashFlag
34B 5081 SUBI R24,1
34C 9380 006C STS FlashFlag,R24
(0720) }
34E C001 RJMP 0x0350
(0721) else LED_H;
34F 9A97 SBI 0x12,7
(0722)
(0723) SecondCount++;
350 9180 0061 LDS R24,SecondCount
352 9190 0062 LDS R25,SecondCount+1
354 9601 ADIW R24,1
355 9390 0062 STS SecondCount+1,R25
357 9380 0061 STS SecondCount,R24
(0724) if ( SecondCount % 2 ) SendDataFlag = 1;
359 FF80 SBRS R24,0
35A C003 RJMP 0x035E
35B E081 LDI R24,1
35C 9380 006B STS SendDataFlag,R24
(0725)
(0726) if ( SecondCount >= SENDTIMER ) {
35E 9180 0061 LDS R24,SecondCount
360 9190 0062 LDS R25,SecondCount+1
362 3083 CPI R24,3
363 E0E0 LDI R30,0
364 079E CPC R25,R30
365 F030 BCS 0x036C
(0727) SecondCount = 0;
366 2422 CLR R2
367 2433 CLR R3
368 9230 0062 STS SecondCount+1,R3
36A 9220 0061 STS SecondCount,R2
(0728) // spi_txflag = 1;
(0729) }
(0730)
(0731)
(0732) NoDataCount++;
36C 9180 0069 LDS R24,NoDataCount
36E 9190 006A LDS R25,NoDataCount+1
370 9601 ADIW R24,1
371 9390 006A STS NoDataCount+1,R25
373 9380 0069 STS NoDataCount,R24
375 9029 LD R2,Y+
376 BE2F OUT 0x3F,R2
377 91E9 LD R30,Y+
378 91A9 LD R26,Y+
379 9199 LD R25,Y+
37A 9189 LD R24,Y+
37B 9119 LD R17,Y+
37C 9109 LD R16,Y+
37D 9039 LD R3,Y+
37E 9029 LD R2,Y+
37F 9518 RETI
_put_str:
len --> R12
i --> R20
str --> R10
380 D1DF RCALL push_xgset303C
381 0158 MOVW R10,R16
(0733) }
(0734) /////////////////////////////////////////////////////////////////////////////////
(0735) void put_str(char *str)
(0736) {
(0737) int i,len;
(0738) len = strlen(str);
382 0185 MOVW R16,R10
383 D186 RCALL _strlen
384 0168 MOVW R12,R16
(0739) for ( i=0; i<len; i++ )
385 2744 CLR R20
386 2755 CLR R21
387 C007 RJMP 0x038F
(0740) uart_TxChar(str[i]);
388 01FA MOVW R30,R20
389 0DEA ADD R30,R10
38A 1DFB ADC R31,R11
38B 8100 LDD R16,Z+0
38C DD6A RCALL _uart_TxChar
38D 5F4F SUBI R20,0xFF
38E 4F5F SBCI R21,0xFF
38F 154C CP R20,R12
390 055D CPC R21,R13
391 F3B4 BLT 0x0388
392 C1D4 RJMP pop_xgset303C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -