📄 nrf905.lis
字号:
02FA 80E0 ldi R24,<_Tx_Buf
02FC 90E0 ldi R25,>_Tx_Buf
02FE E42F mov R30,R20
0300 FF27 clr R31
0302 E80F add R30,R24
0304 F91F adc R31,R25
0306 0081 ldd R16,z+0
0308 65DF rcall _nrf905_SpiRW
030A .dbline 286
030A L32:
030A .dbline 283
030A 4395 inc R20
030C L34:
030C .dbline 283
030C 4032 cpi R20,32
030E A8F3 brlo L31
0310 .dbline 288
0310 ; {
0310 ; nrf905_SpiRW(Tx_Buf[i]);
0310 ; }
0310 ;
0310 ; SET(PORTB,CSN);
0310 C29A sbi 0x18,2
0312 .dbline -2
0312 .dbline 290
0312 ;
0312 ; }
0312 L30:
0312 00D0 rcall pop_gset1
0314 .dbline 0 ; func end
0314 0895 ret
0316 .dbsym r i 20 c
0316 .dbend
0316 .dbfunc e nrf905_WaitSended _nrf905_WaitSended fV
.even
0316 _nrf905_WaitSended::
0316 .dbline -1
0316 .dbline 294
0316 ;
0316 ; //等待发送结束
0316 ; void nrf905_WaitSended(void)
0316 ; {
0316 L36:
0316 .dbline 295
0316 L37:
0316 .dbline 295
0316 ; while ((PIND&(1<<DR))==0);
0316 829B sbis 0x10,2
0318 FECF rjmp L36
031A .dbline -2
031A .dbline 296
031A ; }
031A L35:
031A .dbline 0 ; func end
031A 0895 ret
031C .dbend
031C .dbfunc e nrf905_SendData _nrf905_SendData fV
.even
031C _nrf905_SendData::
031C .dbline -1
031C .dbline 300
031C ;
031C ; //发送TxBuf中的数据
031C ; void nrf905_SendData(void)
031C ; {
031C .dbline 301
031C ; nrf905_TxOn();//切换到发送模式
031C 73DF rcall _nrf905_TxOn
031E .dbline 302
031E ; delay_10ms(2);
031E 02E0 ldi R16,2
0320 10E0 ldi R17,0
0322 00D0 rcall _delay_10ms
0324 .dbline 303
0324 ; nrf905_SetTxAddr();//写发送地址WTA
0324 8DDF rcall _nrf905_SetTxAddr
0326 .dbline 304
0326 ; nrf905_SetData();//写数据WTP
0326 E3DF rcall _nrf905_SetData
0328 .dbline 305
0328 ; nrf905_TxSend();//启动发送
0328 67DF rcall _nrf905_TxSend
032A .dbline 306
032A ; nrf905_WaitSended();//等待发送结束
032A .dbline -2
032A .dbline 308
032A ;
032A ; }
032A L39:
032A .dbline 0 ; func end
032A F5CF rjmp _nrf905_WaitSended
032C .dbend
032C .dbfunc e nrf905_SendAgain _nrf905_SendAgain fV
.even
032C _nrf905_SendAgain::
032C .dbline -1
032C .dbline 312
032C ;
032C ; //测试直接重新发送上次写入的数据
032C ; void nrf905_SendAgain(void)
032C ; {
032C .dbline 313
032C ; nrf905_TxOn();
032C 6BDF rcall _nrf905_TxOn
032E .dbline 314
032E ; nrf905_TxSend();
032E 64DF rcall _nrf905_TxSend
0330 .dbline 315
0330 ; nrf905_WaitSended();
0330 .dbline -2
0330 .dbline 317
0330 ;
0330 ; }
0330 L40:
0330 .dbline 0 ; func end
0330 F2CF rjmp _nrf905_WaitSended
0332 .dbend
0332 .dbfunc e RfSendProc _RfSendProc fV
.even
0332 _RfSendProc::
0332 .dbline -1
0332 .dbline 323
0332 ;
0332 ;
0332 ;
0332 ; //发送测试
0332 ; void RfSendProc(void)
0332 ; {
0332 .dbline 325
0332 ; // puts_hh("Into send process code");
0332 ; nrf905_SendData();//发送测试数据
0332 F4DF rcall _nrf905_SendData
0334 .dbline 326
0334 ; nrf905_Off();//断开电源
0334 5BDF rcall _nrf905_Off
0336 .dbline 327
0336 ; nrf905_RxOn();
0336 .dbline -2
0336 .dbline 329
0336 ;
0336 ; }
0336 L41:
0336 .dbline 0 ; func end
0336 5CCF rjmp _nrf905_RxOn
0338 .dbend
0338 .dbfunc e nrf905_ReadData _nrf905_ReadData fV
0338 ; i -> R20
.even
0338 _nrf905_ReadData::
0338 00D0 rcall push_gset1
033A .dbline -1
033A .dbline 335
033A ;
033A ; //读出接收到的数据
033A ; //读出的数据Rx_Buf[0]是子机地址,Rx_Buf[2]和Rx_Buf[3]是温度数据,
033A ; //Rx_Buf[4]和Rx_Buf[5]是子机电源电压数据,Rx_Buf[1]是命令字
033A ; void nrf905_ReadData(void)
033A ; {
033A .dbline 338
033A ; uchar i;
033A ;
033A ; clear_Rx_Buf();//先清空接收缓冲
033A 72DE rcall _clear_Rx_Buf
033C .dbline 339
033C ; CLR(PORTD,TRXCE);
033C 9698 cbi 0x12,6
033E .dbline 340
033E ; CLR(PORTB,CSN);
033E C298 cbi 0x18,2
0340 .dbline 341
0340 ; nrf905_SpiRW(RRP); //读RxPayload
0340 04E2 ldi R16,36
0342 48DF rcall _nrf905_SpiRW
0344 .dbline 342
0344 ; for (i=0;i<SIZE;i++)
0344 4427 clr R20
0346 0AC0 rjmp L46
0348 L43:
0348 .dbline 343
0348 .dbline 344
0348 0027 clr R16
034A 44DF rcall _nrf905_SpiRW
034C 80E0 ldi R24,<_Rx_Buf
034E 90E0 ldi R25,>_Rx_Buf
0350 E42F mov R30,R20
0352 FF27 clr R31
0354 E80F add R30,R24
0356 F91F adc R31,R25
0358 0083 std z+0,R16
035A .dbline 345
035A L44:
035A .dbline 342
035A 4395 inc R20
035C L46:
035C .dbline 342
035C 4032 cpi R20,32
035E A0F3 brlo L43
0360 .dbline 347
0360 ; {
0360 ; Rx_Buf[i]=nrf905_SpiRW(0);//read...
0360 ; }
0360 ;
0360 ; delay_10ms(2);
0360 02E0 ldi R16,2
0362 10E0 ldi R17,0
0364 00D0 rcall _delay_10ms
0366 .dbline 348
0366 ; SET(PORTB,CSN);
0366 C29A sbi 0x18,2
0368 .dbline -2
0368 .dbline 350
0368 ;
0368 ; }
0368 L42:
0368 00D0 rcall pop_gset1
036A .dbline 0 ; func end
036A 0895 ret
036C .dbsym r i 20 c
036C .dbend
036C .dbfunc e RfRecvProc _RfRecvProc fV
036C ; i -> <dead>
.even
036C _RfRecvProc::
036C .dbline -1
036C .dbline 353
036C ; //接收处理
036C ; void RfRecvProc(void)
036C ; {
036C .dbline 357
036C ; uchar i;
036C ;
036C ;
036C ; if ((PIND&(1<<AM))==0) return;//一般先AM=1指示地址匹配对
036C 8399 sbic 0x10,3
036E 01C0 rjmp L48
0370 .dbline 357
0370 08C0 rjmp L47
0372 L48:
0372 .dbline 358
0372 ; if ((PIND&(1<<DR))==0) return;//DR=1时表示数据接收对而且Crc正确
0372 8299 sbic 0x10,2
0374 01C0 rjmp L50
0376 .dbline 358
0376 05C0 rjmp L47
0378 L50:
0378 .dbline 361
0378 ;
0378 ; //已经接收到数据
0378 ; nrf905_ReadData();//读出...
0378 DFDF rcall _nrf905_ReadData
037A .dbline 370
037A ; // for (i=0;i<32;i++) //校检
037A ; // { if (Rx_Buf[i]!=(i+i))
037A ; // return; }
037A ;
037A ; //从机回送数据包,这样双方都能指示是否收到有效数据包
037A ; // #ifndef MASTER
037A ; // RfSendProc();
037A ; // #endif
037A ; delay_10ms(2);
037A 02E0 ldi R16,2
037C 10E0 ldi R17,0
037E 00D0 rcall _delay_10ms
0380 .dbline 371
0380 ; nrf905_RxOn();//使nrf905重新进入接收状态
0380 37DF rcall _nrf905_RxOn
0382 .dbline -2
0382 .dbline 372
0382 ; }
0382 L47:
0382 .dbline 0 ; func end
0382 0895 ret
0384 .dbsym l i 1 c
0384 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\公司用\atmega8l\final\new\nrf905_receive\nrf905.c
0000 _Rx_Buf::
0000 .blkb 32
0020 .dbsym e Rx_Buf _Rx_Buf A[32:32]c
0020 _Tx_Buf::
0020 .blkb 32
0040 .dbsym e Tx_Buf _Tx_Buf A[32:32]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -