📄 905receive.lst
字号:
0291 9895 CBI 0x12,5
(0207) }
0292 9508 RET
(0208)
(0209)
(0210) /*-----------------------------------------------
(0211) 设置为接收模式
(0212) ------------------------------------------------*/
(0213) void nrf905_RxOn(void)
(0214) {
(0215) SET(PORTD,PWR);
_nrf905_RxOn:
0293 9A95 SBI 0x12,5
(0216) CLR(PORTD,TX_EN);//maybe first
0294 9897 CBI 0x12,7
(0217) SET(PORTD,TRXCE);
0295 9A96 SBI 0x12,6
(0218) }
0296 9508 RET
(0219) //->ShockBurst Send
(0220) void nrf905_TxSend(void)
(0221) {
(0222) SET(PORTD,TRXCE);
_nrf905_TxSend:
0297 9A96 SBI 0x12,6
(0223) delay_us(20);//>10us
0298 E104 LDI R16,0x14
0299 E010 LDI R17,0
029A D0E5 RCALL _delay_us
(0224) CLR(PORTD,TRXCE);//只发送一次
029B 9896 CBI 0x12,6
(0225)
(0226) }
029C 9508 RET
(0227)
(0228) /*-----------------------------------------------
(0229) 设置为发送模式
(0230) ------------------------------------------------*/
(0231) void nrf905_TxOn(void)
(0232) {
(0233) SET(PORTD,PWR);
_nrf905_TxOn:
029D 9A95 SBI 0x12,5
(0234) SET(PORTD,TX_EN);
029E 9A97 SBI 0x12,7
(0235) CLR(PORTD,TRXCE);
029F 9896 CBI 0x12,6
(0236) }
02A0 9508 RET
(0237)
(0238) //初始化nrf905
(0239) void nrf905_Init(void)
(0240) {
(0241) nrf905_StandBy();
_nrf905_Init:
02A1 DFEB RCALL _nrf905_StandBy
(0242) delay_10ms(2);//!!!must >3ms
02A2 E002 LDI R16,2
02A3 E010 LDI R17,0
02A4 D0B8 RCALL _delay_10ms
(0243) nrf905_Config();
(0244)
(0245) // nrf905_SpiTest();//test... 测试:通过读配置,判断SPI操作是否正确
(0246) // nrf905_RxOn();//enable nrf905接收
(0247) }
02A5 CF7C RJMP _nrf905_Config
_nrf905_SpiTest:
i --> R20
02A6 D2B3 RCALL push_gset1
(0248)
(0249)
(0250) //测试:通过读配置,判断SPI操作是否正确
(0251) void nrf905_SpiTest(void)
(0252) {
(0253) uchar i;
(0254) CLR(PORTB,CSN);
02A7 98C2 CBI 0x18,2
(0255) nrf905_SpiRW(RC); //读配置
02A8 E100 LDI R16,0x10
02A9 DFDB RCALL _nrf905_SpiRW
(0256) for (i=0;i<10;i++)
02AA 2744 CLR R20
02AB C00A RJMP 0x02B6
(0257) {
(0258) Rx_Buf[i]=nrf905_SpiRW(0);//read from nrf905
02AC 2700 CLR R16
02AD DFD7 RCALL _nrf905_SpiRW
02AE ED8B LDI R24,0xDB
02AF E090 LDI R25,0
02B0 2FE4 MOV R30,R20
02B1 27FF CLR R31
02B2 0FE8 ADD R30,R24
02B3 1FF9 ADC R31,R25
02B4 8300 STD Z+0,R16
02B5 9543 INC R20
02B6 304A CPI R20,0xA
02B7 F3A0 BCS 0x02AC
(0259) }
(0260) SET(PORTB,CSN);
02B8 9AC2 SBI 0x18,2
(0261)
(0262) }
02B9 D2A3 RCALL pop_gset1
02BA 9508 RET
_nrf905_SetTxAddr:
02BB D2B5 RCALL push_gset2
(0263)
(0264)
(0265) //写Tx地址
(0266) void nrf905_SetTxAddr(void)
(0267) {
(0268) CLR(PORTB,CSN);
02BC 98C2 CBI 0x18,2
(0269) nrf905_SpiRW(WTA); //写Tx地址
02BD E202 LDI R16,0x22
02BE DFC6 RCALL _nrf905_SpiRW
(0270) nrf905_SpiRW(TX_ADDRESS_0);
02BF E188 LDI R24,0x18
02C0 E090 LDI R25,0
02C1 90400091 LDS R4,0x91
02C3 90500092 LDS R5,0x92
02C5 9020008F LDS R2,0x8F
02C7 90300090 LDS R3,0x90
02C9 938A ST R24,-Y
02CA 0181 MOVW R16,R2
02CB 0192 MOVW R18,R4
02CC D2E7 RCALL lsr32
02CD DFB7 RCALL _nrf905_SpiRW
(0271) nrf905_SpiRW(TX_ADDRESS_1);
02CE EF4F LDI R20,0xFF
02CF E050 LDI R21,0
02D0 E060 LDI R22,0
02D1 E070 LDI R23,0
02D2 90400091 LDS R4,0x91
02D4 90500092 LDS R5,0x92
02D6 9020008F LDS R2,0x8F
02D8 90300090 LDS R3,0x90
02DA 0112 MOVW R2,R4
02DB 2444 CLR R4
02DC 2455 CLR R5
02DD 2224 AND R2,R20
02DE 2235 AND R3,R21
02DF 2246 AND R4,R22
02E0 2257 AND R5,R23
02E1 2D02 MOV R16,R2
02E2 DFA2 RCALL _nrf905_SpiRW
(0272) nrf905_SpiRW(TX_ADDRESS_2);
02E3 E088 LDI R24,0x8
02E4 E090 LDI R25,0
02E5 90400091 LDS R4,0x91
02E7 90500092 LDS R5,0x92
02E9 9020008F LDS R2,0x8F
02EB 90300090 LDS R3,0x90
02ED 938A ST R24,-Y
02EE 0181 MOVW R16,R2
02EF 0192 MOVW R18,R4
02F0 D2C3 RCALL lsr32
02F1 0118 MOVW R2,R16
02F2 0129 MOVW R4,R18
02F3 EF4F LDI R20,0xFF
02F4 E050 LDI R21,0
02F5 E060 LDI R22,0
02F6 E070 LDI R23,0
02F7 2224 AND R2,R20
02F8 2235 AND R3,R21
02F9 2246 AND R4,R22
02FA 2257 AND R5,R23
02FB 2D02 MOV R16,R2
02FC DF88 RCALL _nrf905_SpiRW
(0273) nrf905_SpiRW(TX_ADDRESS_3);
02FD EF4F LDI R20,0xFF
02FE E050 LDI R21,0
02FF E060 LDI R22,0
0300 E070 LDI R23,0
0301 90400091 LDS R4,0x91
0303 90500092 LDS R5,0x92
0305 9020008F LDS R2,0x8F
0307 90300090 LDS R3,0x90
0309 2224 AND R2,R20
030A 2235 AND R3,R21
030B 2246 AND R4,R22
030C 2257 AND R5,R23
030D 2D02 MOV R16,R2
030E DF76 RCALL _nrf905_SpiRW
(0274) SET(PORTB,CSN);
030F 9AC2 SBI 0x18,2
(0275) }
0310 D245 RCALL pop_gset2
0311 9508 RET
_nrf905_SetData:
i --> R20
0312 D247 RCALL push_gset1
(0276)
(0277) //写Tx数据
(0278) void nrf905_SetData(void)
(0279) {uchar i;
(0280)
(0281) CLR(PORTB,CSN);
0313 98C2 CBI 0x18,2
(0282) nrf905_SpiRW(WTP); //写TxPayload
0314 E200 LDI R16,0x20
0315 DF6F RCALL _nrf905_SpiRW
(0283) for (i=0;i<SIZE;i++)
0316 2744 CLR R20
0317 C009 RJMP 0x0321
(0284) {
(0285) nrf905_SpiRW(Tx_Buf[i]);
0318 EF8B LDI R24,0xFB
0319 E090 LDI R25,0
031A 2FE4 MOV R30,R20
031B 27FF CLR R31
031C 0FE8 ADD R30,R24
031D 1FF9 ADC R31,R25
031E 8100 LDD R16,Z+0
031F DF65 RCALL _nrf905_SpiRW
0320 9543 INC R20
0321 3240 CPI R20,0x20
0322 F3A8 BCS 0x0318
(0286) }
(0287)
(0288) SET(PORTB,CSN);
0323 9AC2 SBI 0x18,2
(0289)
(0290) }
0324 D238 RCALL pop_gset1
0325 9508 RET
(0291)
(0292) //等待发送结束
(0293) void nrf905_WaitSended(void)
(0294) {
(0295) while ((PIND&(1<<DR))==0);
_nrf905_WaitSended:
0326 9B82 SBIS 0x10,2
0327 CFFE RJMP _nrf905_WaitSended
(0296) }
0328 9508 RET
(0297)
(0298) //发送TxBuf中的数据
(0299) void nrf905_SendData(void)
(0300) {
(0301) nrf905_TxOn();//切换到发送模式
_nrf905_SendData:
0329 DF73 RCALL _nrf905_TxOn
(0302) delay_10ms(2);
032A E002 LDI R16,2
032B E010 LDI R17,0
032C D030 RCALL _delay_10ms
(0303) nrf905_SetTxAddr();//写发送地址WTA
032D DF8D RCALL _nrf905_SetTxAddr
(0304) nrf905_SetData();//写数据WTP
032E DFE3 RCALL _nrf905_SetData
(0305) nrf905_TxSend();//启动发送
032F DF67 RCALL _nrf905_TxSend
(0306) nrf905_WaitSended();//等待发送结束
(0307)
(0308) }
0330 CFF5 RJMP _nrf905_WaitSended
(0309)
(0310) //测试直接重新发送上次写入的数据
(0311) void nrf905_SendAgain(void)
(0312) {
(0313) nrf905_TxOn();
_nrf905_SendAgain:
0331 DF6B RCALL _nrf905_TxOn
(0314) nrf905_TxSend();
0332 DF64 RCALL _nrf905_TxSend
(0315) nrf905_WaitSended();
(0316)
(0317) }
0333 CFF2 RJMP _nrf905_WaitSended
(0318)
(0319)
(0320)
(0321) //发送测试
(0322) void RfSendProc(void)
(0323) {
(0324) // puts_hh("Into send process code");
(0325) nrf905_SendData();//发送测试数据
_RfSendProc:
0334 DFF4 RCALL _nrf905_SendData
(0326) nrf905_Off();//断开电源
0335 DF5B RCALL _nrf905_Off
(0327) nrf905_RxOn();
(0328)
(0329) }
0336 CF5C RJMP _nrf905_RxOn
_nrf905_ReadData:
i --> R20
0337 D222 RCALL push_gset1
(0330)
(0331) //读出接收到的数据
(0332) //读出的数据Rx_Buf[0]是子机地址,Rx_Buf[2]和Rx_Buf[3]是温度数据,
(0333) //Rx_Buf[4]和Rx_Buf[5]是子机电源电压数据,Rx_Buf[1]是命令字
(0334) void nrf905_ReadData(void)
(0335) {
(0336) uchar i;
(0337)
(0338) clear_Rx_Buf();//先清空接收缓冲
0338 DE72 RCALL _clear_Rx_Buf
(0339) CLR(PORTD,TRXCE);
0339 9896 CBI 0x12,6
(0340) CLR(PORTB,CSN);
033A 98C2 CBI 0x18,2
(0341) nrf905_SpiRW(RRP); //读RxPayload
033B E204 LDI R16,0x24
033C DF48 RCALL _nrf905_SpiRW
(0342) for (i=0;i<SIZE;i++)
033D 2744 CLR R20
033E C00A RJMP 0x0349
(0343) {
(0344) Rx_Buf[i]=nrf905_SpiRW(0);//read...
033F 2700 CLR R16
0340 DF44 RCALL _nrf905_SpiRW
0341 ED8B LDI R24,0xDB
0342 E090 LDI R25,0
0343 2FE4 MOV R30,R20
0344 27FF CLR R31
0345 0FE8 ADD R30,R24
0346 1FF9 ADC R31,R25
0347 8300 STD Z+0,R16
0348 9543 INC R20
0349 3240 CPI R20,0x20
034A F3A0 BCS 0x033F
(0345) }
(0346)
(0347) delay_10ms(2);
034B E002 LDI R16,2
034C E010 LDI R17,0
034D D00F RCALL _delay_10ms
(0348) SET(PORTB,CSN);
034E 9AC2 SBI 0x18,2
(0349)
(0350) }
034F D20D RCALL pop_gset1
0350 9508 RET
(0351) //接收处理
(0352) void RfRecvProc(void)
(0353) {
(0354) uchar i;
(0355)
(0356)
(0357) if ((PIND&(1<<AM))==0) return;//一般先AM=1指示地址匹配对
_RfRecvProc:
i --> Y+1
0351 9983 SBIC 0x10,3
0352 C001 RJMP 0x0354
0353 C008 RJMP 0x035C
(0358) if ((PIND&(1<<DR))==0) return;//DR=1时表示数据接收对而且Crc正确
0354 9982 SBIC 0x10,2
0355 C001 RJMP 0x0357
0356 C005 RJMP 0x035C
(0359)
(0360) //已经接收到数据
(0361) nrf905_ReadData();//读出...
0357 DFDF RCALL _nrf905_ReadData
(0362) // for (i=0;i<32;i++) //校检
(0363) // { if (Rx_Buf[i]!=(i+i))
(0364) // return; }
(0365)
(0366) //从机回送数据包,这样双方都能指示是否收到有效数据包
(0367) // #ifndef MASTER
(0368) // RfSendProc();
(0369) // #endif
(0370) delay_10ms(2);
0358 E002 LDI R16,2
0359 E010 LDI R17,0
035A D002 RCALL _delay_10ms
(0371) nrf905_RxOn();//使nrf905重新进入接收状态
035B DF37 RCALL _nrf905_RxOn
(0372) }
035C 9508 RET
FILE: E:\公司用\atmega8l\final\new\nrf905_receive\timer.c
(0001) /************************************
(0002) 功能:nrf905接受函数主函数
(0003) 时间:2008年8月30日
(0004) 编写:陈锐
(0005) 版本:1.2
(0006) Target : M8
(0007) Crystal: 4.0000Mhz
(0008) ************************************/
(0009)
(0010) #include "confg.h"
(0011)
(0012) unsigned int i=0;
(0013)
(0014)
(0015) int delay_10ms(int no)//延时10ms
(0016) {
(0017) for(;no>0;no--)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -