📄 tx.lst
字号:
(0065) for (i=0;i<10;i++) // Write configration words 写放配置字
016A 2744 CLR R20
016B C00A RJMP 0x0176
(0066) {
(0067) SpiWrite(data_conf[i]);
016C E38C LDI R24,0x3C
016D E095 LDI R25,5
016E 2FE4 MOV R30,R20
016F 27FF CLR R31
0170 0FE8 ADD R30,R24
0171 1FF9 ADC R31,R25
0172 8100 LDD R16,Z+0
0173 DF09 RCALL _SpiWrite
0174 0000 NOP
0175 9543 INC R20
0176 304A CPI R20,0xA
0177 F3A0 BCS 0x016C
(0068) }
(0069)
(0070) PORTE |=(1<<CSN); // Disable Spi
0178 9A19 SBI 0x03,1
0179 D076 RCALL pop_gset1
017A 0000 NOP
017B 9508 RET
(0071) }
(0072)
(0073) /***************************************************************
(0074) 函数功能:把905配置成发送模式
(0075) 输入参数:无
(0076) 输出参数:无
(0077) ***************************************************************/
(0078) void set_Tmode(void)
(0079) {
(0080) PORTE |=(1<<PWR_UP); //905上电
_set_Tmode:
017C 9A1A SBI 0x03,2
(0081) PORTE |=(1<<TX_EN);
017D 9A1B SBI 0x03,3
(0082) PORTB &=~(1<<TRX_CE);
017E 98C0 CBI 0x18,0
(0083) Delay650us(); // delay for mode change(>=650us)
017F DF08 RCALL _Delay650us
0180 0000 NOP
0181 9508 RET
(0084) }
(0085)
(0086) /***************************************************************
(0087) 函数功能:把905配置成接收模式
(0088) 输入参数:无
(0089) 输出参数:无
(0090) ***************************************************************/
(0091) void set_Rmode(void)
(0092) {
(0093) PORTE |=(1<<PWR_UP); //905上电
_set_Rmode:
0182 9A1A SBI 0x03,2
(0094) PORTE &=~(1<<TX_EN);
0183 981B CBI 0x03,3
(0095) PORTB |=(1<<TRX_CE);
0184 9AC0 SBI 0x18,0
(0096) Delay650us(); // delay for mode change(>=650us)
0185 DF02 RCALL _Delay650us
0186 0000 NOP
0187 9508 RET
(0097) }
(0098)
(0099) /***************************************************************
(0100) 函数功能:把905配置成掉电和SPI模式(节省能量)
(0101) 输入参数:无
(0102) 输出参数:无
(0103) ***************************************************************/
(0104) void set_Powerdownmode(void)
(0105) {
(0106) PORTE &=~(1<<PWR_UP); //掉电
_set_Powerdownmode:
0188 981A CBI 0x03,2
(0107) Delay650us(); // delay for mode change(>=650us)
0189 DEFE RCALL _Delay650us
018A 0000 NOP
018B 9508 RET
(0108) }
(0109)
(0110) /***************************************************************
(0111) 函数功能:把905配置成STANDBY和SPI模式(节省能量)
(0112) 输入参数:无
(0113) 输出参数:无
(0114) ***************************************************************/
(0115) void set_STmode(void)
(0116) {
(0117) PORTE |=(1<<PWR_UP); //905上电
_set_STmode:
018C 9A1A SBI 0x03,2
(0118) PORTB &=~(1<<TRX_CE);
018D 98C0 CBI 0x18,0
(0119) Delay3ms(); // delay for mode change(>=650us)
018E DF0F RCALL _Delay3ms
018F 0000 NOP
0190 9508 RET
_set_Taddr:
i --> R20
addr --> R22
0191 D059 RCALL push_gset2
0192 0000 NOP
0193 01B8 MOVW R22,R16
(0120) }
(0121)
(0122)
(0123)
(0124) /**************************************************************************
(0125) 函数功能:通过SPI设定905的发送地址
(0126) 输入参数:发送地址数据的首地址
(0127) 输出参数:无
(0128) **************************************************************************/
(0129) void set_Taddr(unsigned char*addr)
(0130) {
(0131) unsigned i;
(0132) PORTE &=~(1<<CSN); // Spi 使能
0194 9819 CBI 0x03,1
(0133) SpiWrite(WTA);
0195 E202 LDI R16,0x22
0196 DEE6 RCALL _SpiWrite
0197 0000 NOP
(0134) // Write address command
(0135) for (i=0;i<4;i++) // Write 4 bytes address
0198 2744 CLR R20
0199 2755 CLR R21
019A C008 RJMP 0x01A3
(0136) {
(0137) SpiWrite(addr[i]);
019B 01FA MOVW R30,R20
019C 0FE6 ADD R30,R22
019D 1FF7 ADC R31,R23
019E 8100 LDD R16,Z+0
019F DEDD RCALL _SpiWrite
01A0 0000 NOP
01A1 5F4F SUBI R20,0xFF
01A2 4F5F SBCI R21,0xFF
01A3 3044 CPI R20,4
01A4 E0E0 LDI R30,0
01A5 075E CPC R21,R30
01A6 F3A0 BCS 0x019B
(0138) }
(0139)
(0140) PORTE |=(1<<CSN); // 禁止Spi
01A7 9A19 SBI 0x03,1
01A8 D039 RCALL pop_gset2
01A9 0000 NOP
01AA 9508 RET
_TxPacket:
temp --> Y+1
i --> R20
send_d --> R22
01AB D03F RCALL push_gset2
01AC 0000 NOP
01AD 01B8 MOVW R22,R16
(0141) //Delay300us();
(0142) }
(0143)
(0144) /**************************************************************************
(0145) 函数功能:905发送一个数据包
(0146) 输入参数:要发送的数据包的首地址
(0147) 输出参数:无
(0148) **************************************************************************/
(0149) void TxPacket(unsigned char*send_d)
(0150) {
(0151) unsigned char temp,i;
(0152)
(0153) PORTE &=~(1<<CSN); // CSN置零,Spi 使能
01AE 9819 CBI 0x03,1
(0154) SpiWrite(WTP); // 写SPI命令
01AF E200 LDI R16,0x20
01B0 DECC RCALL _SpiWrite
01B1 0000 NOP
(0155)
(0156) for (i=0;i<PACKAGE_LENGTH;i++)
01B2 2744 CLR R20
01B3 C008 RJMP 0x01BC
(0157) {
(0158) SpiWrite(*(send_d+i)); // 写21字节的TX数据
01B4 2FE4 MOV R30,R20
01B5 27FF CLR R31
01B6 0FE6 ADD R30,R22
01B7 1FF7 ADC R31,R23
01B8 8100 LDD R16,Z+0
01B9 DEC3 RCALL _SpiWrite
01BA 0000 NOP
01BB 9543 INC R20
01BC 3145 CPI R20,0x15
01BD F3B0 BCS 0x01B4
(0159) }
(0160)
(0161) PORTE |=(1<<CSN); // 禁止Spi
01BE 9A19 SBI 0x03,1
(0162)
(0163) PORTB |=(1<<TRX_CE); // Set TRX_CE high,开始TX数据发送
01BF 9AC0 SBI 0x18,0
(0164) Delay650us();
01C0 DEC7 RCALL _Delay650us
01C1 0000 NOP
(0165)
(0166) PORTB &=~(1<<TRX_CE); // Set TRX_CE low,进入standby模式
01C2 98C0 CBI 0x18,0
01C3 D01E RCALL pop_gset2
01C4 0000 NOP
01C5 9508 RET
_RxPacket:
i --> R20
received_d --> R22
01C6 D024 RCALL push_gset2
01C7 0000 NOP
01C8 01B8 MOVW R22,R16
(0167) }
(0168)
(0169) /***************************************************************************
(0170) 函数功能:把905接收到的一个数据包放到CPU的接收缓冲区
(0171) 输入参数:接收缓冲区的首地址
(0172) 输出参数:无
(0173) ***************************************************************************/
(0174) void RxPacket(unsigned char*received_d)
(0175) {
(0176) unsigned char i;
(0177) PORTB &=~(1<<TRX_CE); // 把nRF905 设置成standby,不再接收无线数据
01C9 98C0 CBI 0x18,0
(0178) PORTE &=~(1<<CSN); // Spi enable for write a spi command,Spi 使能
01CA 9819 CBI 0x03,1
(0179) SpiWrite(RRP); // Read payload command
01CB E204 LDI R16,0x24
01CC DEB0 RCALL _SpiWrite
01CD 0000 NOP
(0180) for (i=0;i<PACKAGE_LENGTH;i++)
01CE 2744 CLR R20
01CF C009 RJMP 0x01D9
(0181) {
(0182) *(received_d+i)=SpiWrite(0x00); // Read data and save to buffer
01D0 2700 CLR R16
01D1 DEAB RCALL _SpiWrite
01D2 0000 NOP
01D3 2FE4 MOV R30,R20
01D4 27FF CLR R31
01D5 0FE6 ADD R30,R22
01D6 1FF7 ADC R31,R23
01D7 8300 STD Z+0,R16
01D8 9543 INC R20
01D9 3145 CPI R20,0x15
01DA F3A8 BCS 0x01D0
(0183) }
(0184) PORTE |=(1<<CSN); // 禁止Spi
01DB 9A19 SBI 0x03,1
(0185) Delay650us();
01DC DEAB RCALL _Delay650us
01DD 0000 NOP
(0186) PORTB |=(1<<TRX_CE); //把nRF905 设置成RX mode
FILE: <library>
01DE 9AC0 SBI 0x18,0
01DF D002 RCALL pop_gset2
01E0 0000 NOP
01E1 9508 RET
pop_gset2:
01E2 E0E2 LDI R30,2
01E3 C00D RJMP pop
01E4 0000 NOP
push_gset5:
01E5 92FA ST R15,-Y
01E6 92EA ST R14,-Y
push_gset4:
01E7 92DA ST R13,-Y
01E8 92CA ST R12,-Y
push_gset3:
01E9 92BA ST R11,-Y
01EA 92AA ST R10,-Y
push_gset2:
01EB 937A ST R23,-Y
01EC 936A ST R22,-Y
push_gset1:
01ED 935A ST R21,-Y
01EE 934A ST R20,-Y
01EF 9508 RET
pop_gset1:
01F0 E0E1 LDI R30,1
pop:
01F1 9149 LD R20,Y+
01F2 9159 LD R21,Y+
01F3 FDE0 SBRC R30,0
01F4 9508 RET
01F5 9169 LD R22,Y+
01F6 9179 LD R23,Y+
01F7 FDE1 SBRC R30,1
01F8 9508 RET
01F9 90A9 LD R10,Y+
01FA 90B9 LD R11,Y+
01FB FDE2 SBRC R30,2
01FC 9508 RET
01FD 90C9 LD R12,Y+
01FE 90D9 LD R13,Y+
01FF FDE3 SBRC R30,3
0200 9508 RET
0201 90E9 LD R14,Y+
0202 90F9 LD R15,Y+
0203 9508 RET
push_lset:
0204 93FA ST R31,-Y
0205 93EA ST R30,-Y
0206 93BA ST R27,-Y
0207 93AA ST R26,-Y
0208 939A ST R25,-Y
0209 938A ST R24,-Y
020A 933A ST R19,-Y
020B 932A ST R18,-Y
020C 931A ST R17,-Y
020D 930A ST R16,-Y
020E 929A ST R9,-Y
020F 928A ST R8,-Y
0210 927A ST R7,-Y
0211 926A ST R6,-Y
0212 925A ST R5,-Y
0213 924A ST R4,-Y
0214 923A ST R3,-Y
0215 922A ST R2,-Y
0216 921A ST R1,-Y
0217 920A ST R0,-Y
0218 B60F IN R0,0x3F
0219 920A ST R0,-Y
021A 9508 RET
pop_lset:
021B 9009 LD R0,Y+
021C BE0F OUT 0x3F,R0
021D 9009 LD R0,Y+
021E 9019 LD R1,Y+
021F 9029 LD R2,Y+
0220 9039 LD R3,Y+
0221 9049 LD R4,Y+
0222 9059 LD R5,Y+
0223 9069 LD R6,Y+
0224 9079 LD R7,Y+
0225 9089 LD R8,Y+
0226 9099 LD R9,Y+
0227 9109 LD R16,Y+
0228 9119 LD R17,Y+
0229 9129 LD R18,Y+
022A 9139 LD R19,Y+
022B 9189 LD R24,Y+
022C 9199 LD R25,Y+
022D 91A9 LD R26,Y+
022E 91B9 LD R27,Y+
022F 91E9 LD R30,Y+
0230 91F9 LD R31,Y+
0231 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -