📄 main.lis
字号:
01D6 ; /**************************************************/
01D6 ; unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
01D6 ; {
01D6 .dbline 296
01D6 ; unsigned char status,byte_ctr;
01D6 ; nRF24L01_CSNL;
01D6 5E98 cbi 0xb,6
01D8 .dbline 297
01D8 ; delay();
01D8 AEDF rcall _delay
01DA .dbline 298
01DA ; status = SPI_RW(reg); // Select register to write to and read status byte
01DA 0A2D mov R16,R10
01DC C4DF rcall _SPI_RW
01DE A02E mov R10,R16
01E0 .dbline 299
01E0 ; for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
01E0 CC24 clr R12
01E2 08C0 rjmp L49
01E4 L46:
01E4 .dbline 300
01E4 ; pBuf[byte_ctr] = SPI_RW(0); // Perform SPI_RW to read byte from nRF24L01
01E4 0027 clr R16
01E6 BFDF rcall _SPI_RW
01E8 EC2D mov R30,R12
01EA FF27 clr R31
01EC EE0D add R30,R14
01EE FF1D adc R31,R15
01F0 0083 std z+0,R16
01F2 L47:
01F2 .dbline 299
01F2 C394 inc R12
01F4 L49:
01F4 .dbline 299
01F4 0E80 ldd R0,y+6
01F6 C014 cp R12,R0
01F8 A8F3 brlo L46
01FA X14:
01FA .dbline 301
01FA ; nRF24L01_CSNH;
01FA 5E9A sbi 0xb,6
01FC .dbline 302
01FC ; delay();
01FC 9CDF rcall _delay
01FE .dbline 303
01FE ; return(status); // return nRF24L01 status byte
01FE 0A2D mov R16,R10
0200 .dbline -2
0200 L45:
0200 .dbline 0 ; func end
0200 00C0 rjmp pop_xgset00FC
0202 .dbsym r status 10 c
0202 .dbsym r byte_ctr 12 c
0202 .dbsym l bytes 6 c
0202 .dbsym r pBuf 14 pc
0202 .dbsym r reg 10 c
0202 .dbend
0202 .dbfunc e SPI_Write_Buf _SPI_Write_Buf fc
0202 ; status -> R10
0202 ; byte_ctr -> R12
0202 ; bytes -> y+6
0202 ; pBuf -> R14,R15
0202 ; reg -> R10
.even
0202 _SPI_Write_Buf::
0202 00D0 rcall push_xgset00FC
0204 7901 movw R14,R18
0206 A02E mov R10,R16
0208 .dbline -1
0208 .dbline 313
0208 ; }
0208 ; /**************************************************
0208 ; Function: SPI_Write_Buf();
0208 ;
0208 ; Description:
0208 ; Writes contents of buffer '*pBuf' to nRF24L01
0208 ; Typically used to write TX payload, Rx/Tx address */
0208 ; /**************************************************/
0208 ; unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
0208 ; {
0208 .dbline 315
0208 ; unsigned char status,byte_ctr;
0208 ; nRF24L01_CSNL; // Set nRF24L01_CSN low, init SPI tranaction
0208 5E98 cbi 0xb,6
020A .dbline 316
020A ; delay();
020A 95DF rcall _delay
020C .dbline 317
020C ; status = SPI_RW(reg); // Select register to write to and read status byte
020C 0A2D mov R16,R10
020E ABDF rcall _SPI_RW
0210 A02E mov R10,R16
0212 .dbline 318
0212 ; for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf)
0212 CC24 clr R12
0214 06C0 rjmp L54
0216 L51:
0216 .dbline 319
0216 ; status = SPI_RW(*pBuf++);
0216 F701 movw R30,R14
0218 0191 ld R16,Z+
021A 7F01 movw R14,R30
021C A4DF rcall _SPI_RW
021E A02E mov R10,R16
0220 L52:
0220 .dbline 318
0220 C394 inc R12
0222 L54:
0222 .dbline 318
0222 0E80 ldd R0,y+6
0224 C014 cp R12,R0
0226 B8F3 brlo L51
0228 X15:
0228 .dbline 320
0228 ; nRF24L01_CSNH; // Set nRF24L01_CSN high again
0228 5E9A sbi 0xb,6
022A .dbline 321
022A ; delay();
022A 85DF rcall _delay
022C .dbline 322
022C ; return(status); // return nRF24L01 status byte
022C 0A2D mov R16,R10
022E .dbline -2
022E L50:
022E .dbline 0 ; func end
022E 00C0 rjmp pop_xgset00FC
0230 .dbsym r status 10 c
0230 .dbsym r byte_ctr 12 c
0230 .dbsym l bytes 6 c
0230 .dbsym r pBuf 14 pc
0230 .dbsym r reg 10 c
0230 .dbend
0230 .dbfunc e RX_Mode _RX_Mode fV
.even
0230 _RX_Mode::
0230 2197 sbiw R28,1
0232 .dbline -1
0232 .dbline 335
0232 ; }
0232 ; /**************************************************
0232 ; Function: RX_Mode();
0232 ;
0232 ; Description:
0232 ; This function initializes one nRF24L01 device to
0232 ; RX Mode, set RX address, writes RX payload width,
0232 ; select RF channel, datarate & LNA HCURR.
0232 ; After init, CE is toggled high, which means that
0232 ; this device is now ready to receive a datapacket. */
0232 ; /**************************************************/
0232 ; void RX_Mode(void)
0232 ; {
0232 .dbline 336
0232 ; nRF24L01_CEL;
0232 5F98 cbi 0xb,7
0234 .dbline 337
0234 ; delay();
0234 80DF rcall _delay
0236 .dbline 338
0236 ; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
0236 85E0 ldi R24,5
0238 8883 std y+0,R24
023A 20E0 ldi R18,<_TX_ADDRESS
023C 30E0 ldi R19,>_TX_ADDRESS
023E 0AE2 ldi R16,42
0240 E0DF rcall _SPI_Write_Buf
0242 .dbline 340
0242 ;
0242 ; SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
0242 21E0 ldi R18,1
0244 01E2 ldi R16,33
0246 A6DF rcall _SPI_RW_Reg
0248 .dbline 341
0248 ; SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
0248 21E0 ldi R18,1
024A 02E2 ldi R16,34
024C A3DF rcall _SPI_RW_Reg
024E .dbline 342
024E ; SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40
024E 28E2 ldi R18,40
0250 05E2 ldi R16,37
0252 A0DF rcall _SPI_RW_Reg
0254 .dbline 343
0254 ; SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
0254 24E1 ldi R18,20
0256 01E3 ldi R16,49
0258 9DDF rcall _SPI_RW_Reg
025A .dbline 344
025A ; SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
025A 27E0 ldi R18,7
025C 06E2 ldi R16,38
025E 9ADF rcall _SPI_RW_Reg
0260 .dbline 345
0260 ; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..
0260 2FE0 ldi R18,15
0262 00E2 ldi R16,32
0264 97DF rcall _SPI_RW_Reg
0266 .dbline 346
0266 ; nRF24L01_CEH;
0266 5F9A sbi 0xb,7
0268 .dbline 347
0268 ; delay();
0268 66DF rcall _delay
026A .dbline -2
026A L55:
026A .dbline 0 ; func end
026A 2196 adiw R28,1
026C 0895 ret
026E .dbend
026E .dbfunc e TX_Mode _TX_Mode fV
.even
026E _TX_Mode::
026E 2197 sbiw R28,1
0270 .dbline -1
0270 .dbline 367
0270 ; // This device is now ready to receive one packet of 16 bytes payload from a TX device sending to address
0270 ; // '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.
0270 ;
0270 ; }
0270 ; /**************************************************/
0270 ;
0270 ; /**************************************************
0270 ; Function: TX_Mode();
0270 ;
0270 ; Description:
0270 ; This function initializes one nRF24L01 device to
0270 ; TX mode, set TX address, set RX address for auto.ack,
0270 ; fill TX payload, select RF channel, datarate & TX pwr.
0270 ; PWR_UP is set, CRC(2 bytes) is enabled, & PRIM:TX.
0270 ;
0270 ; ToDo: One high pulse(>10us) on CE will now send this
0270 ; packet and expext an acknowledgment from the RX device. */
0270 ; /**************************************************/
0270 ; void TX_Mode(void)
0270 ; {
0270 .dbline 368
0270 ; nRF24L01_CEL;
0270 5F98 cbi 0xb,7
0272 .dbline 369
0272 ; delay();
0272 61DF rcall _delay
0274 .dbline 370
0274 ; SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01
0274 85E0 ldi R24,5
0276 8883 std y+0,R24
0278 20E0 ldi R18,<_TX_ADDRESS
027A 30E0 ldi R19,>_TX_ADDRESS
027C 00E3 ldi R16,48
027E C1DF rcall _SPI_Write_Buf
0280 .dbline 371
0280 ; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
0280 85E0 ldi R24,5
0282 8883 std y+0,R24
0284 20E0 ldi R18,<_TX_ADDRESS
0286 30E0 ldi R19,>_TX_ADDRESS
0288 0AE2 ldi R16,42
028A BBDF rcall _SPI_Write_Buf
028C .dbline 372
028C ; SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload
028C 84E1 ldi R24,20
028E 8883 std y+0,R24
0290 20E0 ldi R18,<_Buffer
0292 30E0 ldi R19,>_Buffer
0294 00EA ldi R16,160
0296 B5DF rcall _SPI_Write_Buf
0298 .dbline 374
0298 ;
0298 ; SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // Enable Auto.Ack:Pipe0
0298 21E0 ldi R18,1
029A 01E2 ldi R16,33
029C 7BDF rcall _SPI_RW_Reg
029E .dbline 375
029E ; SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // Enable Pipe0
029E 21E0 ldi R18,1
02A0 02E2 ldi R16,34
02A2 78DF rcall _SPI_RW_Reg
02A4 .dbline 376
02A4 ; SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
02A4 2AE1 ldi R18,26
02A6 04E2 ldi R16,36
02A8 75DF rcall _SPI_RW_Reg
02AA .dbline 377
02AA ; SPI_RW_Reg(WRITE_REG + RF_CH, 40); // Select RF channel 40
02AA 28E2 ldi R18,40
02AC 05E2 ldi R16,37
02AE 72DF rcall _SPI_RW_Reg
02B0 .dbline 378
02B0 ; SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
02B0 27E0 ldi R18,7
02B2 06E2 ldi R16,38
02B4 6FDF rcall _SPI_RW_Reg
02B6 .dbline 379
02B6 ; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
02B6 2EE0 ldi R18,14
02B8 00E2 ldi R16,32
02BA 6CDF rcall _SPI_RW_Reg
02BC .dbline 380
02BC ; nRF24L01_CEH;
02BC 5F9A sbi 0xb,7
02BE .dbline 381
02BE ; delay();
02BE 3BDF rcall _delay
02C0 .dbline -2
02C0 L56:
02C0 .dbline 0 ; func end
02C0 2196 adiw R28,1
02C2 0895 ret
02C4 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\sendavrnrf24l01\main.c
0000 _key_debug::
0000 .blkb 1
0001 .dbsym e key_debug _key_debug c
0001 ;
0001 ; }
0001 ; //------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -