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

📄 master.lst

📁 这是用C编的nrf905的通讯程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
(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 + -