?? master.lst
字號:
(0193) {
(0194) SET(PORTD,PWR);
_nrf905_RxOn:
01B2 9A96 SBI 0x12,6
(0195) CLR(PORTD,TX_EN);//maybe first
01B3 9894 CBI 0x12,4
(0196) SET(PORTD,TRXCE);
01B4 9A93 SBI 0x12,3
01B5 9508 RET
(0197) }
(0198)
(0199) //初始化nrf905
(0200) void nrf905_Init()
(0201) {
(0202) nrf905_StandBy();
_nrf905_Init:
01B6 DFEA RCALL _nrf905_StandBy
(0203) DelayMs(10);//!!!must >3ms
01B7 E00A LDI R16,0xA
01B8 940E00ED CALL _DelayMs
(0204) nrf905_Config();
01BA DFC3 RCALL _nrf905_Config
(0205)
(0206) nrf905_SpiTest();//test...
01BB D002 RCALL _nrf905_SpiTest
(0207) nrf905_RxOn();
01BC DFF5 RCALL _nrf905_RxOn
01BD 9508 RET
_nrf905_SpiTest:
i --> R10
01BE 940E0288 CALL push_gset3
(0208) }
(0209)
(0210) //測試:通過讀配置,判斷SPI操作是否正確
(0211) void nrf905_SpiTest()
(0212) {uchar i;
(0213) CLR(PORTB,CSN);
01C0 98C4 CBI 0x18,4
(0214) nrf905_SpiRW(RC); //讀配置
01C1 E100 LDI R16,0x10
01C2 DFD4 RCALL _nrf905_SpiRW
(0215) for (i=0;i<10;i++)
01C3 24AA CLR R10
01C4 C00A RJMP 0x01CF
(0216) {
(0217) RxBuf[i]=nrf905_SpiRW(0);//read from nrf905
01C5 2700 CLR R16
01C6 DFD0 RCALL _nrf905_SpiRW
01C7 E689 LDI R24,0x69
01C8 E090 LDI R25,0
01C9 2DEA MOV R30,R10
01CA 27FF CLR R31
01CB 0FE8 ADD R30,R24
01CC 1FF9 ADC R31,R25
01CD 8300 STD Z+0,R16
01CE 94A3 INC R10
01CF 2D8A MOV R24,R10
01D0 308A CPI R24,0xA
01D1 F398 BCS 0x01C5
(0218) }
(0219)
(0220)
(0221) //for (i=0;i<10;i++)
(0222) {
(0223) if(RxBuf[0]==CH_NO_BYTE)CPL(PORTD,LED);
01D2 91800069 LDS R24,RxBuf
01D4 348C CPI R24,0x4C
01D5 F439 BNE 0x01DD
01D6 E880 LDI R24,0x80
01D7 E090 LDI R25,0
01D8 B222 IN R2,0x12
01D9 2433 CLR R3
01DA 2628 EOR R2,R24
01DB 2639 EOR R3,R25
01DC BA22 OUT 0x12,R2
(0224) if(RxBuf[1]==(PA_PWR_10dBm | HFREQ_PLL_433MHz))CPL(PORTD,LED);
01DD 9180006A LDS R24,RxBuf+1
01DF 308C CPI R24,0xC
01E0 F439 BNE 0x01E8
01E1 E880 LDI R24,0x80
01E2 E090 LDI R25,0
01E3 B222 IN R2,0x12
01E4 2433 CLR R3
01E5 2628 EOR R2,R24
01E6 2639 EOR R3,R25
01E7 BA22 OUT 0x12,R2
(0225) if(RxBuf[2]==(TX_AFW_4BYTE | RX_AFW_4BYTE))CPL(PORTD,LED);
01E8 9180006B LDS R24,RxBuf+2
01EA 3484 CPI R24,0x44
01EB F439 BNE 0x01F3
01EC E880 LDI R24,0x80
01ED E090 LDI R25,0
01EE B222 IN R2,0x12
01EF 2433 CLR R3
01F0 2628 EOR R2,R24
01F1 2639 EOR R3,R25
01F2 BA22 OUT 0x12,R2
(0226) if(RxBuf[3]==RX_PW_1BYTE)CPL(PORTD,LED);
01F3 9180006C LDS R24,RxBuf+3
01F5 3081 CPI R24,1
01F6 F439 BNE 0x01FE
01F7 E880 LDI R24,0x80
01F8 E090 LDI R25,0
01F9 B222 IN R2,0x12
01FA 2433 CLR R3
01FB 2628 EOR R2,R24
01FC 2639 EOR R3,R25
01FD BA22 OUT 0x12,R2
(0227) if(RxBuf[4]==TX_PW_1BYTE)CPL(PORTD,LED);
01FE 9180006D LDS R24,0x6D
0200 3081 CPI R24,1
0201 F439 BNE 0x0209
0202 E880 LDI R24,0x80
0203 E090 LDI R25,0
0204 B222 IN R2,0x12
0205 2433 CLR R3
0206 2628 EOR R2,R24
0207 2639 EOR R3,R25
0208 BA22 OUT 0x12,R2
(0228) if(RxBuf[5]==(RX_ADDRESS_0))CPL(PORTD,LED);
0209 E142 LDI R20,0x12
020A E050 LDI R21,0
020B E060 LDI R22,0
020C E070 LDI R23,0
020D 9020006E LDS R2,0x6E
020F 2433 CLR R3
0210 2444 CLR R4
0211 2455 CLR R5
0212 1624 CP R2,R20
0213 0635 CPC R3,R21
0214 0646 CPC R4,R22
0215 0657 CPC R5,R23
0216 F439 BNE 0x021E
0217 E880 LDI R24,0x80
0218 E090 LDI R25,0
0219 B222 IN R2,0x12
021A 2433 CLR R3
021B 2628 EOR R2,R24
021C 2639 EOR R3,R25
021D BA22 OUT 0x12,R2
(0229) if(RxBuf[6]==RX_ADDRESS_1)CPL(PORTD,LED);
021E E344 LDI R20,0x34
021F E050 LDI R21,0
0220 E060 LDI R22,0
0221 E070 LDI R23,0
0222 9020006F LDS R2,0x6F
0224 2433 CLR R3
0225 2444 CLR R4
0226 2455 CLR R5
0227 1624 CP R2,R20
0228 0635 CPC R3,R21
0229 0646 CPC R4,R22
022A 0657 CPC R5,R23
022B F439 BNE 0x0233
022C E880 LDI R24,0x80
022D E090 LDI R25,0
022E B222 IN R2,0x12
022F 2433 CLR R3
0230 2628 EOR R2,R24
0231 2639 EOR R3,R25
0232 BA22 OUT 0x12,R2
(0230) //if(RxBuf[7]==RX_ADDRESS_2)CPL(PORTD,LED);
(0231) //if(RxBuf[8]==RX_ADDRESS_3)CPL(PORTD,LED);
(0232) //if(RxBuf[9]==(CRC16_EN | XOF_16MHz))CPL(PORTD,LED);
(0233)
(0234) }
(0235) SET(PORTB,CSN);
0233 9AC4 SBI 0x18,4
0234 940E0281 CALL pop_gset3
0236 9508 RET
(0236) }
(0237)
(0238) //寫Tx地址
(0239) void nrf905_SetTxAddr()
(0240) {
(0241) CLR(PORTB,CSN);
_nrf905_SetTxAddr:
0237 98C4 CBI 0x18,4
(0242) nrf905_SpiRW(WTA); //寫Tx地址
0238 E202 LDI R16,0x22
0239 DF5D RCALL _nrf905_SpiRW
(0243) nrf905_SpiRW(TX_ADDRESS_0);
023A E807 LDI R16,0x87
023B DF5B RCALL _nrf905_SpiRW
(0244) nrf905_SpiRW(TX_ADDRESS_1);
023C E605 LDI R16,0x65
023D DF59 RCALL _nrf905_SpiRW
(0245) nrf905_SpiRW(TX_ADDRESS_2);
023E E403 LDI R16,0x43
023F DF57 RCALL _nrf905_SpiRW
(0246) nrf905_SpiRW(TX_ADDRESS_3);
0240 E201 LDI R16,0x21
0241 DF55 RCALL _nrf905_SpiRW
(0247) SET(PORTB,CSN);
0242 9AC4 SBI 0x18,4
0243 9508 RET
_nrf905_SetData:
i --> R20
0244 940E028C CALL push_gset1
(0248) }
(0249)
(0250) //寫Tx數據
(0251) void nrf905_SetData()
(0252) {uchar i;
(0253)
(0254) CLR(PORTB,CSN);
0246 98C4 CBI 0x18,4
(0255) nrf905_SpiRW(WTP); //寫TxPayload
0247 E200 LDI R16,0x20
0248 DF4E RCALL _nrf905_SpiRW
(0256) for (i=0;i<SIZE;i++)
0249 2744 CLR R20
024A C009 RJMP 0x0254
(0257) {
(0258) nrf905_SpiRW(TxBuf[i]);
024B EC8D LDI R24,0xCD
024C E090 LDI R25,0
024D 2FE4 MOV R30,R20
024E 27FF CLR R31
024F 0FE8 ADD R30,R24
0250 1FF9 ADC R31,R25
0251 8100 LDD R16,Z+0
0252 DF44 RCALL _nrf905_SpiRW
0253 9543 INC R20
0254 3240 CPI R20,0x20
0255 F3A8 BCS 0x024B
(0259) }
(0260)
(0261) SET(PORTB,CSN);
0256 9AC4 SBI 0x18,4
0257 940E028F CALL pop_gset1
0259 9508 RET
(0262) }
(0263)
(0264) //等待發送結束
(0265) void nrf905_WaitSended()
(0266) {
(0267) while ((PINB&(1<<DR))==0);
_nrf905_WaitSended:
025A 9BB3 SBIS 0x16,3
025B CFFE RJMP _nrf905_WaitSended
025C 9508 RET
(0268) }
(0269)
(0270) //發送TxBuf中的數據
(0271) void nrf905_SendData()
(0272) {
(0273) nrf905_TxOn();//切換到發送模式
_nrf905_SendData:
025D DF49 RCALL _nrf905_TxOn
(0274)
(0275) nrf905_SetTxAddr();//寫發送地址
025E DFD8 RCALL _nrf905_SetTxAddr
(0276) nrf905_SetData();//寫數據
025F DFE4 RCALL _nrf905_SetData
(0277) nrf905_TxSend();//啟動發送
0260 DF4A RCALL _nrf905_TxSend
(0278) nrf905_WaitSended();//等待發送結束
0261 DFF8 RCALL _nrf905_WaitSended
0262 9508 RET
(0279)
(0280) }
(0281)
(0282) //測試直接重新發送上次寫入的數據
(0283) void nrf905_SendAgain()
(0284) {
(0285) nrf905_TxOn();
_nrf905_SendAgain:
0263 DF43 RCALL _nrf905_TxOn
(0286) nrf905_TxSend();
0264 DF46 RCALL _nrf905_TxSend
(0287) nrf905_WaitSended();
0265 DFF4 RCALL _nrf905_WaitSended
0266 9508 RET
_nrf905_ReadData:
i --> R20
0267 940E028C CALL push_gset1
(0288)
(0289) }
(0290)
(0291) //讀出接收到的數據
(0292) void nrf905_ReadData()
(0293) {
(0294) uchar i;
(0295)
(0296) CLR(PORTB,CSN);
0269 98C4 CBI 0x18,4
(0297) nrf905_SpiRW(RRP); //讀RxPayload
026A E204 LDI R16,0x24
026B DF2B RCALL _nrf905_SpiRW
(0298) for (i=0;i<SIZE;i++)
026C 2744 CLR R20
026D C00A RJMP 0x0278
(0299) {
(0300) RxBuf[i]=nrf905_SpiRW(0);//read...
026E 2700 CLR R16
026F DF27 RCALL _nrf905_SpiRW
0270 E689 LDI R24,0x69
0271 E090 LDI R25,0
0272 2FE4 MOV R30,R20
0273 27FF CLR R31
0274 0FE8 ADD R30,R24
0275 1FF9 ADC R31,R25
0276 8300 STD Z+0,R16
0277 9543 INC R20
0278 3240 CPI R20,0x20
0279 F3A0 BCS 0x026E
(0301) }
(0302)
(0303) SET(PORTB,CSN);
FILE: <library>
027A 9AC4 SBI 0x18,4
027B 940E028F CALL pop_gset1
027D 9508 RET
pop_gset2:
027E E0E2 LDI R30,2
027F 940C0290 JMP pop
pop_gset3:
0281 E0E4 LDI R30,4
0282 940C0290 JMP pop
push_gset5:
0284 92FA ST R15,-Y
0285 92EA ST R14,-Y
push_gset4:
0286 92DA ST R13,-Y
0287 92CA ST R12,-Y
push_gset3:
0288 92BA ST R11,-Y
0289 92AA ST R10,-Y
push_gset2:
028A 937A ST R23,-Y
028B 936A ST R22,-Y
push_gset1:
028C 935A ST R21,-Y
028D 934A ST R20,-Y
028E 9508 RET
pop_gset1:
028F E0E1 LDI R30,1
pop:
0290 9149 LD R20,Y+
0291 9159 LD R21,Y+
0292 FDE0 SBRC R30,0
0293 9508 RET
0294 9169 LD R22,Y+
0295 9179 LD R23,Y+
0296 FDE1 SBRC R30,1
0297 9508 RET
0298 90A9 LD R10,Y+
0299 90B9 LD R11,Y+
029A FDE2 SBRC R30,2
029B 9508 RET
029C 90C9 LD R12,Y+
029D 90D9 LD R13,Y+
029E FDE3 SBRC R30,3
029F 9508 RET
02A0 90E9 LD R14,Y+
02A1 90F9 LD R15,Y+
02A2 9508 RET
push_lset:
02A3 93FA ST R31,-Y
02A4 93EA ST R30,-Y
02A5 93BA ST R27,-Y
02A6 93AA ST R26,-Y
02A7 939A ST R25,-Y
02A8 938A ST R24,-Y
02A9 933A ST R19,-Y
02AA 932A ST R18,-Y
02AB 931A ST R17,-Y
02AC 930A ST R16,-Y
02AD 929A ST R9,-Y
02AE 928A ST R8,-Y
02AF 927A ST R7,-Y
02B0 926A ST R6,-Y
02B1 925A ST R5,-Y
02B2 924A ST R4,-Y
02B3 923A ST R3,-Y
02B4 922A ST R2,-Y
02B5 921A ST R1,-Y
02B6 920A ST R0,-Y
02B7 B60F IN R0,0x3F
02B8 920A ST R0,-Y
02B9 9508 RET
pop_lset:
02BA 9009 LD R0,Y+
02BB BE0F OUT 0x3F,R0
02BC 9009 LD R0,Y+
02BD 9019 LD R1,Y+
02BE 9029 LD R2,Y+
02BF 9039 LD R3,Y+
02C0 9049 LD R4,Y+
02C1 9059 LD R5,Y+
02C2 9069 LD R6,Y+
02C3 9079 LD R7,Y+
02C4 9089 LD R8,Y+
02C5 9099 LD R9,Y+
02C6 9109 LD R16,Y+
02C7 9119 LD R17,Y+
02C8 9129 LD R18,Y+
02C9 9139 LD R19,Y+
02CA 9189 LD R24,Y+
02CB 9199 LD R25,Y+
02CC 91A9 LD R26,Y+
02CD 91B9 LD R27,Y+
02CE 91E9 LD R30,Y+
02CF 91F9 LD R31,Y+
02D0 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -