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

📄 jifeng_jieshou.lis

📁 Mega16单片机与nRF-905芯片之间的通信程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0002           ; void Spi_initial();                            //SPI初始化
 0002           ; uchar SpiReadSpiWrite(unsigned char cData);    //SPI读写子程序
 0002           ; void system_Init(void);                                                  //系统初始化
 0002           ; void Config905(void);                                            //NRF905初始化子程序
 0002           ; void TxPacket(void);                                          
 0002           ; void SetTxMode(void);                                            //数据发送
 0002           ; void SetRxMode(void);                                            //
 0002           ; void TX(void);
 0002           ; unsigned char CheckDR(void);
 0002           ; void RxPacket(void);
 0002           ; void  RX(void);
 0002           ; //-------------------------------串口函数申明-----------------------------------
 0002           ; void StartUART(void);
 0002           ; void R_S_Byte(uchar R_Byte);
 0002           ; //-------------------------------LCD函数申明------------------------------------
 0002           ; void LCD_Delay(uint time);
 0002           ; void Lcd_init(void);
 0002           ; void Lcd_Write_Data(uchar DATA) ;
 0002           ; void Lcd_Write_command(uchar COMMAND);
 0002           ; void Lcd_CURSOR(uchar add_page,uchar add_col)  ;
 0002           ; void Lcd_Clear(void) ;
 0002           ; void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[]);
 0002           ; void dis_168hz(uchar x1,uchar row,const uchar hz[]);
 0002           ; void LCDtime();
 0002           ; //----------------------------------100us延时子程序-----------------------------
 0002           ; void Delay(uint x)
 0002           ; {
 0002 09C0              rjmp L3
 0004           L2:
 0004                   .dbline 186
 0004 4427              clr R20
 0006 5527              clr R21
 0008 02C0              rjmp L8
 000A           L5:
 000A                   .dbline 186
 000A           L6:
 000A                   .dbline 186
 000A 4F5F              subi R20,255  ; offset = 1
 000C 5F4F              sbci R21,255
 000E           L8:
 000E                   .dbline 186
 000E 4035              cpi R20,80
 0010 E0E0              ldi R30,0
 0012 5E07              cpc R21,R30
 0014 D0F3              brlo L5
 0016           L3:
 0016                   .dbline 185
 0016           ;       uint i;
 0016           ;       while(x--)
 0016 202E              mov R2,R16
 0018 312E              mov R3,R17
 001A 0150              subi R16,1
 001C 1040              sbci R17,0
 001E 2220              tst R2
 0020 89F7              brne L2
 0022 3320              tst R3
 0024 79F7              brne L2
 0026           X0:
 0026                   .dbline -2
 0026           L1:
 0026 00D0              rcall pop_gset1
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbsym r i 20 i
 002A                   .dbsym r x 16 i
 002A                   .dbend
 002A                   .dbfunc e Spi_initial _Spi_initial fV
                        .even
 002A           _Spi_initial::
 002A                   .dbline -1
 002A                   .dbline 190
 002A           ;       for(i=0;i<80;i++);
 002A           ; }
 002A           ; //----------------------------------SPI初始化-----------------------------------
 002A           ; void Spi_initial()
 002A           ; {
 002A                   .dbline 191
 002A           ;       SPCR   = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);// 主机模式,fck/16, SPI方式0
 002A 80E5              ldi R24,80
 002C 8DB9              out 0xd,R24
 002E                   .dbline -2
 002E           L9:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
 0030                   .dbfunc e SpiReadSpiWrite _SpiReadSpiWrite fc
 0030           ;          cData -> R16
                        .even
 0030           _SpiReadSpiWrite::
 0030                   .dbline -1
 0030                   .dbline 195
 0030           ; }
 0030           ; //---------------------------------SPI读写程序----------------------------------      
 0030           ; uchar SpiReadSpiWrite(unsigned char cData)
 0030           ; {
 0030                   .dbline 196
 0030           ;       SPDR = cData;
 0030 0FB9              out 0xf,R16
 0032           L11:
 0032                   .dbline 198
 0032                   .dbline 198
 0032           L12:
 0032                   .dbline 197
 0032           ;       while(!(SPSR & (1<<SPIF) ))  // 等待SPI发送完毕
 0032 779B              sbis 0xe,7
 0034 FECF              rjmp L11
 0036                   .dbline 198
 0036           ;       {};                     
 0036                   .dbline 199
 0036           ;       return SPDR;
 0036 0FB1              in R16,0xf
 0038                   .dbline -2
 0038           L10:
 0038                   .dbline 0 ; func end
 0038 0895              ret
 003A                   .dbsym r cData 16 c
 003A                   .dbend
 003A                   .dbfunc e system_Init _system_Init fV
                        .even
 003A           _system_Init::
 003A                   .dbline -1
 003A                   .dbline 203
 003A           ; }
 003A           ; //--------------------------------系统状态初始化--------------------------------
 003A           ; void system_Init(void)                        
 003A           ; {
 003A                   .dbline 205
 003A           ; 
 003A           ;       Hign_nrf905_CSN;                        // SPI使能
 003A C49A              sbi 0x18,4
 003C                   .dbline 205
 003C                   .dbline 206
 003C           ;       Low_nrf905_SCK;                         
 003C C798              cbi 0x18,7
 003E                   .dbline 206
 003E                   .dbline 207
 003E           ;       Low_nrf905_DR;                          // DR=0
 003E C298              cbi 0x18,2
 0040                   .dbline 207
 0040                   .dbline 208
 0040           ;       Low_nrf905_AM;                          // AM=0
 0040 C398              cbi 0x18,3
 0042                   .dbline 208
 0042                   .dbline 209
 0042           ;       Low_nrf905_CD;                          // CD=0
 0042 9498              cbi 0x12,4
 0044                   .dbline 209
 0044                   .dbline 210
 0044           ;       Hign_nrf905_PWR;                    // PWR=1
 0044 C19A              sbi 0x18,1
 0046                   .dbline 210
 0046                   .dbline 211
 0046           ;       Low_nrf905_TRX_CE;                      // nrf905_TRX_CE=0
 0046 9598              cbi 0x12,5
 0048                   .dbline 211
 0048                   .dbline 212
 0048           ;       Low_nrf905_TX_EN ;                      // nrf905_TX_EN=0
 0048 C098              cbi 0x18,0
 004A                   .dbline 212
 004A                   .dbline -2
 004A           L14:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbend
 004C                   .dbfunc e Config905 _Config905 fV
 004C           ;              i -> R20
                        .even
 004C           _Config905::
 004C 00D0              rcall push_gset1
 004E                   .dbline -1
 004E                   .dbline 216
 004E           ; }
 004E           ; //--------------------------------NRF905寄存器初始化函数------------------------
 004E           ; void Config905(void)
 004E           ; {
 004E                   .dbline 218
 004E           ;       uchar i;
 004E           ;       Low_nrf905_CSN;                         //SPI使能                                                                                       
 004E C498              cbi 0x18,4
 0050                   .dbline 218
 0050                   .dbline 219
 0050           ;       Delay(1);                                  
 0050 01E0              ldi R16,1
 0052 10E0              ldi R17,0
 0054 D5DF              rcall _Delay
 0056                   .dbline 220
 0056           ;       for (i=0;i<11;i++)                      //碞RF905配置字
 0056 4427              clr R20
 0058 09C0              rjmp L19
 005A           L16:
 005A                   .dbline 221
 005A                   .dbline 222
 005A 80E0              ldi R24,<_RFConf
 005C 90E0              ldi R25,>_RFConf
 005E E42F              mov R30,R20
 0060 FF27              clr R31
 0062 E80F              add R30,R24
 0064 F91F              adc R31,R25
 0066 0081              ldd R16,z+0
 0068 E3DF              rcall _SpiReadSpiWrite
 006A                   .dbline 223
 006A           L17:
 006A                   .dbline 220
 006A 4395              inc R20
 006C           L19:
 006C                   .dbline 220
 006C 4B30              cpi R20,11
 006E A8F3              brlo L16
 0070                   .dbline 224
 0070           ;       {
 0070           ;        SpiReadSpiWrite(RFConf[i]);
 0070           ;       }
 0070           ;       Hign_nrf905_CSN;                                        // Disable Spi
 0070 C49A              sbi 0x18,4
 0072                   .dbline 224
 0072                   .dbline -2
 0072           L15:
 0072 00D0              rcall pop_gset1
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r i 20 c
 0076                   .dbend
 0076                   .dbfunc e TxPacket _TxPacket fV
 0076           ;              i -> R20
                        .even
 0076           _TxPacket::
 0076 00D0              rcall push_gset1
 0078                   .dbline -1
 0078                   .dbline 228
 0078           ; }
 0078           ; //--------------------------------NRF905待发数据打包----------------------------
 0078           ; void TxPacket(void)
 0078           ; {
 0078                   .dbline 230
 0078           ;       uchar i;
 0078           ;       Low_nrf905_CSN;                                         // 使能Spi,允许对nrf905进行读写操作
 0078 C498              cbi 0x18,4
 007A                   .dbline 230
 007A                   .dbline 231
 007A           ;       Delay(1);
 007A 01E0              ldi R16,1
 007C 10E0              ldi R17,0
 007E C0DF              rcall _Delay
 0080                   .dbline 232
 0080           ;       SpiReadSpiWrite(WTP);                           // 写数据前先写写数据命令
 0080 00E2              ldi R16,32
 0082 D6DF              rcall _SpiReadSpiWrite
 0084                   .dbline 233
 0084           ;       for (i=0;i<32;i++)
 0084 4427              clr R20
 0086 09C0              rjmp L24
 0088           L21:
 0088                   .dbline 234
 0088                   .dbline 235
 0088 80E0              ldi R24,<_TxRxBuffer
 008A 90E0              ldi R25,>_TxRxBuffer
 008C E42F              mov R30,R20
 008E FF27              clr R31
 0090 E80F              add R30,R24
 0092 F91F              adc R31,R25
 0094 0081              ldd R16,z+0
 0096 CCDF              rcall _SpiReadSpiWrite
 0098                   .dbline 236
 0098           L22:
 0098                   .dbline 233
 0098 4395              inc R20
 009A           L24:
 009A                   .dbline 233
 009A 4032              cpi R20,32
 009C A8F3              brlo L21
 009E                   .dbline 237
 009E           ;       {
 009E           ;       SpiReadSpiWrite(TxRxBuffer[i]);         // 待发送的32字节数据
 009E           ;       }                                               
 009E           ;       Hign_nrf905_CSN;
 009E C49A              sbi 0x18,4
 00A0                   .dbline 237
 00A0                   .dbline 238
 00A0           ;       Delay(1);                                                       // 关闭Spi,不允许对nrf905进行读写操作
 00A0 01E0              ldi R16,1

⌨️ 快捷键说明

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