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

📄 main.lis

📁 nRF24L01详细编程资料
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -