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