⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 905receive.lst

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -