📄 lianjie.lst
字号:
_put_str_CRLF:
str --> R10
393 92AA ST R10,-Y
394 92BA ST R11,-Y
395 0158 MOVW R10,R16
(0741) }
(0742)
(0743) /////////////////////////////////////////////////////////////////////////////////
(0744) void put_str_CRLF(char *str)
(0745) {
(0746) put_str(str);
396 0185 MOVW R16,R10
397 DFE8 RCALL _put_str
(0747) uart_TxChar(0x0d);
398 E00D LDI R16,0xD
399 DD5D RCALL _uart_TxChar
(0748) uart_TxChar(0x0a);
39A E00A LDI R16,0xA
39B DD5B RCALL _uart_TxChar
39C 90B9 LD R11,Y+
39D 90A9 LD R10,Y+
39E 9508 RET
(0749) }
(0750)
(0751) /////////////////////////////////////////////////////////////////////////////////
(0752) void wdt_init(void)
(0753) {
(0754) WDR();//喂狗
_wdt_init:
39F 95A8 WDR
(0755) WDTCR|=(BIT(WDCE)|BIT(WDE));
3A0 B581 IN R24,0x21
3A1 6188 ORI R24,0x18
3A2 BD81 OUT 0x21,R24
(0756) WDTCR=BIT(WDP2)|BIT(WDP1)|BIT(WDP0)|BIT(WDE);
3A3 E08F LDI R24,0xF
3A4 BD81 OUT 0x21,R24
3A5 9508 RET
_uart_Rx_isr:
3A6 922A ST R2,-Y
3A7 938A ST R24,-Y
3A8 939A ST R25,-Y
3A9 93EA ST R30,-Y
3AA 93FA ST R31,-Y
3AB B62F IN R2,0x3F
3AC 922A ST R2,-Y
(0757) }
(0758) /////////////////////////////////////////////////////////////////////////////////
(0759) //uart完成中断
(0760) #pragma interrupt_handler uart_Rx_isr:iv_USART_RXC
(0761) void uart_Rx_isr(void)
(0762) {
(0763) rxbuf[rxpt] = UDR;
3AD EC88 LDI R24,0xC8
3AE E090 LDI R25,0
3AF 91E0 00C7 LDS R30,rxpt
3B1 27FF CLR R31
3B2 0FE8 ADD R30,R24
3B3 1FF9 ADC R31,R25
3B4 B02C IN R2,0x0C
3B5 8220 STD Z+0,R2
(0764) // uart_TxChar(rxbuf[rxpt]);
(0765) rxpt++;
3B6 9180 00C7 LDS R24,rxpt
3B8 5F8F SUBI R24,0xFF
3B9 9380 00C7 STS rxpt,R24
(0766) rxpt &= RXBUF_LEN1;
3BB 718F ANDI R24,0x1F
3BC 9380 00C7 STS rxpt,R24
3BE 9029 LD R2,Y+
3BF BE2F OUT 0x3F,R2
3C0 91F9 LD R31,Y+
3C1 91E9 LD R30,Y+
3C2 9199 LD R25,Y+
3C3 9189 LD R24,Y+
3C4 9029 LD R2,Y+
3C5 9518 RETI
(0767)
(0768) }
(0769)
(0770) /////////////////////////////////////////////////////////////////////////////////
(0771) void Spi_InitRegister(void)
(0772) {
(0773) // Register[0] = 0x6c; // 433.2MHZ
(0774) // Register[1] = 0x0c; //不重发,正常模式,输出+10dBm,433M频段
(0775) Register[0] = CH_NO_BYTE; // 433.2MHZ
_Spi_InitRegister:
3C6 E48C LDI R24,0x4C
3C7 9380 00E8 STS Register,R24
(0776) Register[1] = PA_PWR_10dBm | HFREQ_PLL_433MHz; //不重发,正常模式,输出+10dBm,433M频段
3C9 E08C LDI R24,0xC
3CA 9380 00E9 STS Register+1,R24
(0777) Register[2] = 0x44; //TX、RX地址宽度为4
3CC E484 LDI R24,0x44
3CD 9380 00EA STS Register+2,R24
(0778) Register[3] = 0x10; //收为16个有效数据
3CF E180 LDI R24,0x10
3D0 9380 00EB STS Register+3,R24
(0779) Register[4] = 0x10; //发为16个有效数据
3D2 9380 00EC STS 0x00EC,R24
(0780) Register[5] = ADDR_1; //本机收地址
3D4 E487 LDI R24,0x47
3D5 9380 00ED STS 0x00ED,R24
(0781) Register[6] = ADDR_2;
3D7 E587 LDI R24,0x57
3D8 9380 00EE STS 0x00EE,R24
(0782) Register[7] = ADDR_3;
3DA E58A LDI R24,0x5A
3DB 9380 00EF STS 0x00EF,R24
(0783) Register[8] = ADDR_4;
3DD E484 LDI R24,0x44
3DE 9380 00F0 STS 0x00F0,R24
(0784) Register[9] = 0xD8; //CRC校验16位,16M晶振
3E0 ED88 LDI R24,0xD8
3E1 9380 00F1 STS 0x00F1,R24
(0785)
(0786) tx_addr[0] = ADDR_1;
3E3 E487 LDI R24,0x47
3E4 9380 00C2 STS nrf905_JinJu.c:tx_addr,R24
(0787) tx_addr[1] = ADDR_2;
3E6 E587 LDI R24,0x57
3E7 9380 00C3 STS nrf905_JinJu.c:tx_addr+1,R24
(0788) tx_addr[2] = ADDR_3;
3E9 E58A LDI R24,0x5A
3EA 9380 00C4 STS nrf905_JinJu.c:tx_addr+2,R24
(0789) tx_addr[3] = ADDR_4;
3EC E484 LDI R24,0x44
3ED 9380 00C5 STS nrf905_JinJu.c:tx_addr+3,R24
(0790)
(0791) TxFlag[0] = 0;
3EF 2422 CLR R2
3F0 9220 00F7 STS TxFlag,R2
(0792) TxFlag[1] = 0;
3F2 9220 00F8 STS TxFlag+1,R2
(0793) TxFlag[2] = 0;
3F4 9220 00F9 STS TxFlag+2,R2
(0794) TxFlag[3] = 0;
3F6 9220 00FA STS TxFlag+3,R2
(0795) TxFlag[4] = 0;
3F8 9220 00FB STS 0x00FB,R2
(0796) TxFlag[5] = 0;
3FA 9220 00FC STS 0x00FC,R2
3FC 9508 RET
(0797) }
(0798)
(0799) /////////////////////////////////////////////////////////////
(0800) void InitSPI(void)
(0801) {
(0802) Spi_InitRegister();
_InitSPI:
3FD DFC8 RCALL _Spi_InitRegister
(0803) SPI_MasterInit();
3FE DD1E RCALL _SPI_MasterInit
(0804) SPI_W_CONFIG();
3FF DDEA RCALL _SPI_W_CONFIG
400 9508 RET
_uart_handle:
lpc --> R22
cmd --> R12
len --> R10
len1 --> R20
i --> R22
401 D16C RCALL push_xgsetF03C
(0805) }
(0806) /////////////////////////////////////////////////////////////
(0807) void uart_handle(void)
(0808) {
(0809) int len,len1,i;
(0810) BYTE cmd,lpc=0xff;
402 EF6F LDI R22,0xFF
(0811)
(0812) if ( handlept == rxpt ) return;
403 9020 00C7 LDS R2,rxpt
405 9030 00C6 LDS R3,handlept
407 1432 CP R3,R2
408 F409 BNE 0x040A
409 C0AA RJMP 0x04B4
(0813) len = (rxpt - handlept) & RXBUF_LEN1;
40A 9020 00C6 LDS R2,handlept
40C 2433 CLR R3
40D 9180 00C7 LDS R24,rxpt
40F 2799 CLR R25
410 1982 SUB R24,R2
411 0993 SBC R25,R3
412 718F ANDI R24,0x1F
413 7090 ANDI R25,0
414 015C MOVW R10,R24
(0814)
(0815) if ( len < 4 ) return;
415 3084 CPI R24,4
416 E0E0 LDI R30,0
417 079E CPC R25,R30
418 F40C BGE 0x041A
419 C09A RJMP 0x04B4
(0816)
(0817) for ( i=0; i<len; i++ ) buf[i] = rxbuf[(handlept+i) & RXBUF_LEN1];
41A 2766 CLR R22
41B 2777 CLR R23
41C C014 RJMP 0x0431
41D 91E0 00C6 LDS R30,handlept
41F 27FF CLR R31
420 0FE6 ADD R30,R22
421 1FF7 ADC R31,R23
422 71EF ANDI R30,0x1F
423 70F0 ANDI R31,0
424 EC88 LDI R24,0xC8
425 E090 LDI R25,0
426 0FE8 ADD R30,R24
427 1FF9 ADC R31,R25
428 8020 LDD R2,Z+0
429 E882 LDI R24,0x82
42A E090 LDI R25,0
42B 01FB MOVW R30,R22
42C 0FE8 ADD R30,R24
42D 1FF9 ADC R31,R25
42E 8220 STD Z+0,R2
42F 5F6F SUBI R22,0xFF
430 4F7F SBCI R23,0xFF
431 156A CP R22,R10
432 057B CPC R23,R11
433 F34C BLT 0x041D
(0818)
(0819)
(0820)
(0821) if ( buf[0] != 0xeb ) {
434 9180 0082 LDS R24,buf
436 3E8B CPI R24,0xEB
437 F039 BEQ 0x043F
(0822) handlept = (handlept + 1) & RXBUF_LEN1;
438 9180 00C6 LDS R24,handlept
43A 5F8F SUBI R24,0xFF
43B 718F ANDI R24,0x1F
43C 9380 00C6 STS handlept,R24
(0823) return;
43E C075 RJMP 0x04B4
(0824) }
(0825)
(0826) if ( buf[1] != 0x90 ) {
43F 9180 0083 LDS R24,buf+1
441 3980 CPI R24,0x90
442 F039 BEQ 0x044A
(0827) handlept = (handlept + 2) & RXBUF_LEN1;
443 9180 00C6 LDS R24,handlept
445 5F8E SUBI R24,0xFE
446 718F ANDI R24,0x1F
447 9380 00C6 STS handlept,R24
(0828) return;
449 C06A RJMP 0x04B4
(0829) }
(0830)
(0831) cmd = buf[2];
44A 90C0 0084 LDS R12,buf+2
(0832) if ( (cmd != CMD_ASKDATA)&&(cmd != CMD_DOWNPARA)&&(cmd != CMD_SETID)&&(cmd != CMD_READID) ) {
44C 20CC TST R12
44D F071 BEQ 0x045C
44E 2D8C MOV R24,R12
44F 3082 CPI R24,2
450 F059 BEQ 0x045C
451 3085 CPI R24,5
452 F049 BEQ 0x045C
453 3087 CPI R24,7
454 F039 BEQ 0x045C
(0833) handlept = (handlept + 3) & RXBUF_LEN1;
455 9180 00C6 LDS R24,handlept
457 5F8D SUBI R24,0xFD
458 718F ANDI R24,0x1F
459 9380 00C6 STS handlept,R24
(0834) return;
45B C058 RJMP 0x04B4
(0835) }
(0836)
(0837) switch(cmd) {
45C 24DD CLR R13
45D 20CC TST R12
45E F411 BNE 0x0461
45F 20DD TST R13
460 F071 BEQ 0x046F
461 01C6 MOVW R24,R12
462 3082 CPI R24,2
463 E0E0 LDI R30,0
464 079E CPC R25,R30
465 F061 BEQ 0x0472
466 3085 CPI R24,5
467 E0E0 LDI R30,0
468 079E CPC R25,R30
469 F059 BEQ 0x0475
46A 3087 CPI R24,7
46B E0E0 LDI R30,0
46C 079E CPC R25,R30
46D F051 BEQ 0x0478
46E C00B RJMP 0x047A
(0838) case CMD_ASKDATA:
(0839) len1 = 7;
46F E047 LDI R20,7
470 E050 LDI R21,0
(0840) break;
471 C008 RJMP 0x047A
(0841) case CMD_DOWNPARA:
(0842) len1 = 14;
472 E04E LDI R20,0xE
473 E050 LDI R21,0
(0843) break;
474 C005 RJMP 0x047A
(0844) case CMD_SETID:
(0845) len1 = 6;
475 E046 LDI R20,6
476 E050 LDI R21,0
(0846) break;
477 C002 RJMP 0x047A
(0847) case CMD_READID:
(0848) len1 = 4;
478 E044 LDI R20,4
479 E050 LDI R21,0
(0849) break;
(0850) }
(0851)
(0852) if ( len < len1 ) return;
47A 16A4 CP R10,R20
47B 06B5 CPC R11,R21
47C F40C BGE 0x047E
47D C036 RJMP 0x04B4
(0853) /*
(0854) lpc = GetLPC(buf,len1);
(0855) if ( lpc ) {
(0856) handlept = (handlept + len1) & RXBUF_LEN1;
(0857) return;
(0858) }
(0859) */
(0860) for ( i=0; i<len1;i++ )
47E 2766 CLR R22
47F 2777 CLR R23
480 C014 RJMP 0x0495
(0861) tx_buf[i] = rxbuf[(handlept+i) & RXBUF_LEN1];
481 91E0 00C6 LDS R30,handlept
483 27FF CLR R31
484 0FE6 ADD R30,R22
485 1FF7 ADC R31,R23
486 71EF ANDI R30,0x1F
487 70F0 ANDI R31,0
488 EC88 LDI R24,0xC8
489 E090 LDI R25,0
48A 0FE8 ADD R30,R24
48B 1FF9 ADC R31,R25
48C 8020 LDD R2,Z+0
48D EA82 LDI R24,0xA2
48E E090 LDI R25,0
48F 01FB MOVW R30,R22
490 0FE8 ADD R30,R24
491 1FF9 ADC R31,R25
492 8220 STD Z+0,R2
493 5F6F SUBI R22,0xFF
494 4F7F SBCI R23,0xFF
495 1764 CP R22,R20
496 0775 CPC R23,R21
497 F34C BLT 0x0481
(0862)
(0863) tx_len = len1;
498 9340 0081 STS tx_len,R20
(0864) for ( i=tx_len; i<16; i++ ) tx_buf[i] = 0;
49A 2F64 MOV R22,R20
49B 2777 CLR R23
49C C009 RJMP 0x04A6
49D EA82 LDI R24,0xA2
49E E090 LDI R25,0
49F 01FB MOVW R30,R22
4A0 0FE8 ADD R30,R24
4A1 1FF9 ADC R31,R25
4A2 2422 CLR R2
4A3 8220 STD Z+0,R2
4A4 5F6F SUBI R22,0xFF
4A5 4F7F SBCI R23,0xFF
4A6 3160 CPI R22,0x10
4A7 E0E0 LDI R30,0
4A8 077E CPC R23,R30
4A9 F39C BLT 0x049D
(0865)
(0866) // put_bytes(tx_buf,len1);
(0867)
(0868) SendGram();
4AA DDEB RCALL _SendGram
(0869) handlept = (handlept + len1) & RXBUF_LEN1;
4AB 9180 00C6 LDS R24,handlept
4AD 2799 CLR R25
4AE 0F84 ADD R24,R20
4AF 1F95 ADC R25,R21
4B0 718F ANDI R24,0x1F
4B1 7090 ANDI R25,0
4B2 9380 00C6 STS handlept,R24
4B4 C0C2 RJMP pop_xgsetF03C
(0870) }
(0871)
(0872) /////////////////////////////////////////////////////////////
(0873) void SendData()
(0874) {
(0875) tx_buf[0] = 0xeb;
_SendData:
4B5 EE8B LDI R24,0xEB
4B6 9380 00A2 STS nrf905_JinJu.c:tx_buf,R24
(0876) tx_buf[1] = 0x90;
4B8 E980 LDI R24,0x90
4B9 9380 00A3 STS nrf905_JinJu.c:tx_buf+1,R24
(0877) tx_buf[2] = 0x02;
4BB E082 LDI R24,2
4BC 9380 00A4 STS nrf905_JinJu.c:tx_buf+2,R24
(0878) tx_buf[3] = 0x00;
4BE 2422 CLR R2
4BF 9220 00A5 STS nrf905_JinJu.c:tx_buf+3,R2
(0879) tx_buf[4] = 0x00;
4C1 9220 00A6 STS 0x00A6,R2
(0880) tx_buf[5] = 0x08;
4C3 E088 LDI R24,0x8
4C4 9380 00A7 STS 0x00A7,R24
(0881) tx_buf[6] = 0x00;
4C6 9220 00A8 STS 0x00A8,R2
(0882) tx_buf[7] = 0x0c;
4C8 E08C LDI R24,0xC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -