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

📄 jifeng_jieshou.lis

📁 Mega16单片机与nRF-905芯片之间的通信程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00A2 10E0              ldi R17,0
 00A4 ADDF              rcall _Delay
 00A6                   .dbline 239
 00A6           ;       Low_nrf905_CSN;                                         // 使能Spi
 00A6 C498              cbi 0x18,4
 00A8                   .dbline 239
 00A8                   .dbline 240
 00A8           ;       SpiReadSpiWrite(WTA);                           // 写地址前首先先写地址命令
 00A8 02E2              ldi R16,34
 00AA C2DF              rcall _SpiReadSpiWrite
 00AC                   .dbline 241
 00AC           ;       for (i=0;i<4;i++)                                       // 写入4 bytes 接收地址
 00AC 4427              clr R20
 00AE 09C0              rjmp L28
 00B0           L25:
 00B0                   .dbline 242
 00B0                   .dbline 243
 00B0 80E0              ldi R24,<_TxAddress
 00B2 90E0              ldi R25,>_TxAddress
 00B4 E42F              mov R30,R20
 00B6 FF27              clr R31
 00B8 E80F              add R30,R24
 00BA F91F              adc R31,R25
 00BC 0081              ldd R16,z+0
 00BE B8DF              rcall _SpiReadSpiWrite
 00C0                   .dbline 244
 00C0           L26:
 00C0                   .dbline 241
 00C0 4395              inc R20
 00C2           L28:
 00C2                   .dbline 241
 00C2 4430              cpi R20,4
 00C4 A8F3              brlo L25
 00C6                   .dbline 245
 00C6           ;       {
 00C6           ;       SpiReadSpiWrite(TxAddress[i]);
 00C6           ;       }
 00C6           ;       Hign_nrf905_CSN;                                        // 关闭Spi
 00C6 C49A              sbi 0x18,4
 00C8                   .dbline 245
 00C8                   .dbline 246
 00C8           ;       Hign_nrf905_TRX_CE;                                     // Set TRX_CE high,start Tx data transmission
 00C8 959A              sbi 0x12,5
 00CA                   .dbline 246
 00CA                   .dbline 247
 00CA           ;       Delay(1);                                                       // 等待DR变高
 00CA 01E0              ldi R16,1
 00CC 10E0              ldi R17,0
 00CE 98DF              rcall _Delay
 00D0                   .dbline 248
 00D0           ;       Low_nrf905_TRX_CE;                                      // 设置TRX_CE=0
 00D0 9598              cbi 0x12,5
 00D2                   .dbline 248
 00D2                   .dbline -2
 00D2           L20:
 00D2 00D0              rcall pop_gset1
 00D4                   .dbline 0 ; func end
 00D4 0895              ret
 00D6                   .dbsym r i 20 c
 00D6                   .dbend
 00D6                   .dbfunc e SetTxMode _SetTxMode fV
                        .even
 00D6           _SetTxMode::
 00D6                   .dbline -1
 00D6                   .dbline 252
 00D6           ; }
 00D6           ; //------------------------------设置发送模式------------------------------------
 00D6           ; void SetTxMode(void)
 00D6           ; {
 00D6                   .dbline 253
 00D6           ;       Low_nrf905_TRX_CE;                              //
 00D6 9598              cbi 0x12,5
 00D8                   .dbline 253
 00D8                   .dbline 254
 00D8           ;       Hign_nrf905_TX_EN;                              //发送使能
 00D8 C09A              sbi 0x18,0
 00DA                   .dbline 254
 00DA                   .dbline 255
 00DA           ;       Delay(2);                               // delay for mode change(>=650us)
 00DA 02E0              ldi R16,2
 00DC 10E0              ldi R17,0
 00DE 90DF              rcall _Delay
 00E0                   .dbline -2
 00E0           L29:
 00E0                   .dbline 0 ; func end
 00E0 0895              ret
 00E2                   .dbend
 00E2                   .dbfunc e SetRxMode _SetRxMode fV
                        .even
 00E2           _SetRxMode::
 00E2                   .dbline -1
 00E2                   .dbline 259
 00E2           ; }
 00E2           ; //------------------------------设置接收模式激发--------------------------------
 00E2           ; void SetRxMode(void)
 00E2           ; {
 00E2                   .dbline 260
 00E2           ;       Low_nrf905_TX_EN;
 00E2 C098              cbi 0x18,0
 00E4                   .dbline 260
 00E4                   .dbline 261
 00E4           ;       Hign_nrf905_TRX_CE;
 00E4 959A              sbi 0x12,5
 00E6                   .dbline 261
 00E6                   .dbline 262
 00E6           ;       Delay(10);                                      // delay for mode change(>=650us)
 00E6 0AE0              ldi R16,10
 00E8 10E0              ldi R17,0
 00EA 8ADF              rcall _Delay
 00EC                   .dbline -2
 00EC           L30:
 00EC                   .dbline 0 ; func end
 00EC 0895              ret
 00EE                   .dbend
 00EE                   .dbfunc e TX _TX fV
                        .even
 00EE           _TX::
 00EE                   .dbline -1
 00EE                   .dbline 266
 00EE           ; }
 00EE           ; //------------------------------发送数据----------------------------------------
 00EE           ; void TX(void)
 00EE           ; {
 00EE                   .dbline 267
 00EE           ;      SetTxMode();        // Set nRF905 in Tx mode
 00EE F3DF              rcall _SetTxMode
 00F0                   .dbline 268
 00F0           ;        TxPacket();                       // Send data by nRF905
 00F0 C2DF              rcall _TxPacket
 00F2                   .dbline -2
 00F2           L31:
 00F2                   .dbline 0 ; func end
 00F2 0895              ret
 00F4                   .dbend
 00F4                   .dbfunc e CheckDR _CheckDR fc
                        .even
 00F4           _CheckDR::
 00F4                   .dbline -1
 00F4                   .dbline 272
 00F4           ; }
 00F4           ; //-----------------------------判断是否收到数据---------------------------------
 00F4           ; unsigned char CheckDR(void)           //检查是否有新数据传入 
 00F4           ; {
 00F4                   .dbline 273
 00F4           ;       if (PINB & (1 << PB2))
 00F4 B29B              sbis 0x16,2
 00F6 02C0              rjmp L33
 00F8                   .dbline 274
 00F8           ;       {
 00F8                   .dbline 275
 00F8           ;               return 1;                               //收到数据
 00F8 01E0              ldi R16,1
 00FA 01C0              rjmp L32
 00FC           L33:
 00FC                   .dbline 278
 00FC           ;       }
 00FC           ;       else
 00FC           ;       {
 00FC                   .dbline 279
 00FC           ;               return 0;
 00FC 0027              clr R16
 00FE                   .dbline -2
 00FE           L32:
 00FE                   .dbline 0 ; func end
 00FE 0895              ret
 0100                   .dbend
 0100                   .dbfunc e RxPacket _RxPacket fV
 0100           ;              i -> R20
                        .even
 0100           _RxPacket::
 0100 00D0              rcall push_gset1
 0102                   .dbline -1
 0102                   .dbline 284
 0102           ;       }
 0102           ; }
 0102           ; //-----------------------------------读接收数据包-------------------------------
 0102           ; void RxPacket(void)                                                   //读数据
 0102           ; {
 0102                   .dbline 286
 0102           ;       uchar i;
 0102           ;     Low_nrf905_TRX_CE;
 0102 9598              cbi 0x12,5
 0104                   .dbline 286
 0104                   .dbline 287
 0104           ;       Low_nrf905_CSN;                                             // 使能SPI
 0104 C498              cbi 0x18,4
 0106                   .dbline 287
 0106                   .dbline 288
 0106           ;     Delay(1);
 0106 01E0              ldi R16,1
 0108 10E0              ldi R17,0
 010A 7ADF              rcall _Delay
 010C                   .dbline 289
 010C           ;       SpiReadSpiWrite(RRP);                              // 写入数据接收缓冲区数据命令
 010C 04E2              ldi R16,36
 010E 90DF              rcall _SpiReadSpiWrite
 0110                   .dbline 290
 0110           ;       for (i = 0 ;i < 4 ;i++)
 0110 4427              clr R20
 0112 0AC0              rjmp L39
 0114           L36:
 0114                   .dbline 291
 0114                   .dbline 292
 0114 0027              clr R16
 0116 8CDF              rcall _SpiReadSpiWrite
 0118 80E0              ldi R24,<_TxRxBuffer
 011A 90E0              ldi R25,>_TxRxBuffer
 011C E42F              mov R30,R20
 011E FF27              clr R31
 0120 E80F              add R30,R24
 0122 F91F              adc R31,R25
 0124 0083              std z+0,R16
 0126                   .dbline 293
 0126           L37:
 0126                   .dbline 290
 0126 4395              inc R20
 0128           L39:
 0128                   .dbline 290
 0128 4430              cpi R20,4
 012A A0F3              brlo L36
 012C                   .dbline 294
 012C           ;       {   
 012C           ;       TxRxBuffer[i]=SpiReadSpiWrite(0);         // 读取数据接收缓冲区数据       
 012C           ;       }
 012C           ;       Hign_nrf905_CSN;
 012C C49A              sbi 0x18,4
 012E                   .dbline 294
 012E                   .dbline 295
 012E           ;     Delay(2);                            //
 012E 02E0              ldi R16,2
 0130 10E0              ldi R17,0
 0132 66DF              rcall _Delay
 0134                   .dbline 296
 0134           ;       Hign_nrf905_TRX_CE;                                                     
 0134 959A              sbi 0x12,5
 0136                   .dbline 296
 0136                   .dbline -2
 0136           L35:
 0136 00D0              rcall pop_gset1
 0138                   .dbline 0 ; func end
 0138 0895              ret
 013A                   .dbsym r i 20 c
 013A                   .dbend
 013A                   .dbfunc e RX _RX fV
                        .even
 013A           _RX::
 013A                   .dbline -1
 013A                   .dbline 300
 013A           ; }
 013A           ; //--------------------------------设置接收模式----------------------------------
 013A           ; void  RX(void)
 013A           ; {
 013A                   .dbline 301
 013A           ;     SetRxMode();                                //设置NRF905接收模式
 013A D3DF              rcall _SetRxMode
 013C           L41:
 013C                   .dbline 302
 013C           L42:
 013C                   .dbline 302
 013C           ;     while (CheckDR()==0);              //等待接收完成
 013C DBDF              rcall _CheckDR
 013E 0023              tst R16
 0140 E9F3              breq L41
 0142                   .dbline 303
 0142           ;       RxPacket();                     //读取接收数据缓冲区
 0142 DEDF              rcall _RxPacket
 0144                   .dbline 304
 0144           ;       Delay(10);
 0144 0AE0              ldi R16,10
 0146 10E0              ldi R17,0
 0148 5BDF              rcall _Delay
 014A                   .dbline -2
 014A           L40:
 014A                   .dbline 0 ; func end
 014A 0895              ret
 014C                   .dbend
 014C                   .dbfunc e LCD_Delay _LCD_Delay fV
 014C           ;              i -> R20,R21
 014C           ;           time -> R16,R17
                        .even

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -