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

📄 nrf.lis

📁 atmega128单片机上实现的nrf905无线收发程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .even
 00A6           _set_Powerdownmode::
 00A6                   .dbline -1
 00A6                   .dbline 123
 00A6           ; }
 00A6           ; 
 00A6           ; /***************************************************************
 00A6           ; 函数功能:把905配置成掉电和SPI模式(节省能量)
 00A6           ; 输入参数:无
 00A6           ; 输出参数:无
 00A6           ; ***************************************************************/
 00A6           ; void set_Powerdownmode()
 00A6           ; {
 00A6                   .dbline 124
 00A6           ;     PORTE &=~(1<<PWR_UP);                   //掉电
 00A6 1A98              cbi 0x3,2
 00A8                   .dbline 125
 00A8           ;       Delay650us();                                   // delay for mode change(>=650us)       
 00A8 0E940000          xcall _Delay650us
 00AC                   .dbline -2
 00AC           L19:
 00AC                   .dbline 0 ; func end
 00AC 0895              ret
 00AE                   .dbend
 00AE                   .dbfunc e set_STmode _set_STmode fV
                        .even
 00AE           _set_STmode::
 00AE                   .dbline -1
 00AE                   .dbline 134
 00AE           ; }
 00AE           ; 
 00AE           ; /***************************************************************
 00AE           ; 函数功能:把905配置成STANDBY和SPI模式(节省能量)
 00AE           ; 输入参数:无
 00AE           ; 输出参数:无
 00AE           ; ***************************************************************/
 00AE           ; void set_STmode()
 00AE           ; {
 00AE                   .dbline 135
 00AE           ;     PORTE |=(1<<PWR_UP);              //905上电
 00AE 1A9A              sbi 0x3,2
 00B0                   .dbline 136
 00B0           ;       PORTB &=~(1<<TRX_CE); 
 00B0 C098              cbi 0x18,0
 00B2                   .dbline 137
 00B2           ;       Delay3ms();                                     // delay for mode change(>=650us)       
 00B2 0E940000          xcall _Delay3ms
 00B6                   .dbline -2
 00B6           L20:
 00B6                   .dbline 0 ; func end
 00B6 0895              ret
 00B8                   .dbend
 00B8                   .dbfunc e set_Taddr _set_Taddr fV
 00B8           ;              i -> R20,R21
 00B8           ;           addr -> R22,R23
                        .even
 00B8           _set_Taddr::
 00B8 0E940000          xcall push_gset2
 00BC B801              movw R22,R16
 00BE                   .dbline -1
 00BE                   .dbline 148
 00BE           ; }
 00BE           ; 
 00BE           ; 
 00BE           ; 
 00BE           ; /**************************************************************************
 00BE           ; 函数功能:通过SPI设定905的发送地址
 00BE           ; 输入参数:发送地址数据的首地址
 00BE           ; 输出参数:无
 00BE           ; **************************************************************************/
 00BE           ; void set_Taddr(unsigned char*addr)
 00BE           ; {
 00BE                   .dbline 150
 00BE           ;     unsigned i;
 00BE           ;       PORTE &=~(1<<CSN);                                              // Spi 使能
 00BE 1998              cbi 0x3,1
 00C0                   .dbline 151
 00C0           ;       SpiWrite(WTA);                                          // Write address command
 00C0 02E2              ldi R16,34
 00C2 0E940000          xcall _SpiWrite
 00C6                   .dbline 152
 00C6           ;       for (i=0;i<4;i++)                                       // Write 4 bytes address
 00C6 4427              clr R20
 00C8 5527              clr R21
 00CA 08C0              xjmp L25
 00CC           L22:
 00CC                   .dbline 153
 00CC                   .dbline 154
 00CC FA01              movw R30,R20
 00CE E60F              add R30,R22
 00D0 F71F              adc R31,R23
 00D2 0081              ldd R16,z+0
 00D4 0E940000          xcall _SpiWrite
 00D8                   .dbline 155
 00D8           L23:
 00D8                   .dbline 152
 00D8 4F5F              subi R20,255  ; offset = 1
 00DA 5F4F              sbci R21,255
 00DC           L25:
 00DC                   .dbline 152
 00DC 4430              cpi R20,4
 00DE E0E0              ldi R30,0
 00E0 5E07              cpc R21,R30
 00E2 A0F3              brlo L22
 00E4                   .dbline 156
 00E4           ;       {
 00E4           ;               SpiWrite(addr[i]);
 00E4           ;       }       
 00E4           ;       PORTE |=(1<<CSN);                                                  // 禁止Spi 
 00E4 199A              sbi 0x3,1
 00E6                   .dbline -2
 00E6           L21:
 00E6 0E940000          xcall pop_gset2
 00EA                   .dbline 0 ; func end
 00EA 0895              ret
 00EC                   .dbsym r i 20 i
 00EC                   .dbsym r addr 22 pc
 00EC                   .dbend
 00EC                   .dbfunc e TxPacket _TxPacket fV
 00EC           ;           temp -> <dead>
 00EC           ;              i -> R20
 00EC           ;         send_d -> R22,R23
                        .even
 00EC           _TxPacket::
 00EC 0E940000          xcall push_gset2
 00F0 B801              movw R22,R16
 00F2                   .dbline -1
 00F2                   .dbline 165
 00F2           ; } 
 00F2           ; 
 00F2           ; /**************************************************************************
 00F2           ; 函数功能:905发送一个数据包
 00F2           ; 输入参数:要发送的数据包的首地址
 00F2           ; 输出参数:无
 00F2           ; **************************************************************************/
 00F2           ; void TxPacket(unsigned char*send_d)
 00F2           ; {
 00F2                   .dbline 168
 00F2           ;       unsigned char temp,i;
 00F2           ;       //Config905();                          
 00F2           ;       PORTE &=~(1<<CSN);                      // CSN置零,Spi 使能
 00F2 1998              cbi 0x3,1
 00F4                   .dbline 169
 00F4           ;       SpiWrite(WTP);                            // 写SPI命令
 00F4 00E2              ldi R16,32
 00F6 0E940000          xcall _SpiWrite
 00FA                   .dbline 171
 00FA           ; //    SpiWrite(serial);
 00FA           ;       for (i=0;i<PACKAGE_LENGTH;i++)
 00FA 4427              clr R20
 00FC 08C0              xjmp L30
 00FE           L27:
 00FE                   .dbline 172
 00FE                   .dbline 173
 00FE E42F              mov R30,R20
 0100 FF27              clr R31
 0102 E60F              add R30,R22
 0104 F71F              adc R31,R23
 0106 0081              ldd R16,z+0
 0108 0E940000          xcall _SpiWrite
 010C                   .dbline 174
 010C           L28:
 010C                   .dbline 171
 010C 4395              inc R20
 010E           L30:
 010E                   .dbline 171
 010E 4531              cpi R20,21
 0110 B0F3              brlo L27
 0112                   .dbline 175
 0112           ;       {         
 0112           ;         SpiWrite(*(send_d+i));                // 写21字节的TX数据
 0112           ;       }
 0112           ;       PORTE |=(1<<CSN);                                               // 禁止Spi                                              
 0112 199A              sbi 0x3,1
 0114                   .dbline 177
 0114           ;       //
 0114           ;       PORTB |=(1<<TRX_CE);                                    // Set TRX_CE high,开始TX数据发送
 0114 C09A              sbi 0x18,0
 0116                   .dbline 179
 0116           ;                                          
 0116           ;       Delay650us();                                // 形成脉冲
 0116 0E940000          xcall _Delay650us
 011A                   .dbline 180
 011A           ;       PORTB &=~(1<<TRX_CE);                           // Set TRX_CE low,进入standby模式
 011A C098              cbi 0x18,0
 011C                   .dbline -2
 011C           L26:
 011C 0E940000          xcall pop_gset2
 0120                   .dbline 0 ; func end
 0120 0895              ret
 0122                   .dbsym l temp 1 c
 0122                   .dbsym r i 20 c
 0122                   .dbsym r send_d 22 pc
 0122                   .dbend
 0122                   .dbfunc e RxPacket _RxPacket fV
 0122           ;              i -> R20
 0122           ;     received_d -> R22,R23
                        .even
 0122           _RxPacket::
 0122 0E940000          xcall push_gset2
 0126 B801              movw R22,R16
 0128                   .dbline -1
 0128                   .dbline 189
 0128           ; }
 0128           ; 
 0128           ; /***************************************************************************
 0128           ; 函数功能:把905接收到的一个数据包放到CPU的接收缓冲区
 0128           ; 输入参数:接收缓冲区的首地址
 0128           ; 输出参数:无
 0128           ; ***************************************************************************/
 0128           ; void RxPacket(unsigned char*received_d)
 0128           ; {
 0128                   .dbline 191
 0128           ;       unsigned char  i;
 0128           ;       PORTB &=~(1<<TRX_CE);                                   // 把nRF905 设置成standby,不再接收无线数据     
 0128 C098              cbi 0x18,0
 012A                   .dbline 192
 012A           ;       PORTE &=~(1<<CSN);                      // Spi enable for write a spi command,Spi 使能
 012A 1998              cbi 0x3,1
 012C                   .dbline 193
 012C           ;       SpiWrite(RRP);                            // Read payload command       
 012C 04E2              ldi R16,36
 012E 0E940000          xcall _SpiWrite
 0132                   .dbline 194
 0132           ;       for (i=0;i<PACKAGE_LENGTH;i++)
 0132 4427              clr R20
 0134 09C0              xjmp L35
 0136           L32:
 0136                   .dbline 195
 0136                   .dbline 196
 0136 0027              clr R16
 0138 0E940000          xcall _SpiWrite
 013C E42F              mov R30,R20
 013E FF27              clr R31
 0140 E60F              add R30,R22
 0142 F71F              adc R31,R23
 0144 0083              std z+0,R16
 0146                   .dbline 197
 0146           L33:
 0146                   .dbline 194
 0146 4395              inc R20
 0148           L35:
 0148                   .dbline 194
 0148 4531              cpi R20,21
 014A A8F3              brlo L32
 014C                   .dbline 198
 014C           ;       {
 014C           ;               *(received_d+i)=SpiWrite(0x00);                 // Read data and save to buffer         
 014C           ;       }
 014C           ;       PORTE |=(1<<CSN);                                               // 禁止Spi
 014C 199A              sbi 0x3,1
 014E                   .dbline 199
 014E           ;     Delay650us();
 014E 0E940000          xcall _Delay650us
 0152                   .dbline 200
 0152           ;       PORTB |=(1<<TRX_CE);             //把nRF905 设置成RX mode
 0152 C09A              sbi 0x18,0
 0154                   .dbline -2
 0154           L31:
 0154 0E940000          xcall pop_gset2
 0158                   .dbline 0 ; func end
 0158 0895              ret
 015A                   .dbsym r i 20 c
 015A                   .dbsym r received_d 22 pc
 015A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\接收端\nrf.c
 0000           _data_conf::
 0000                   .blkb 10
 000A                   .dbsym e data_conf _data_conf A[10:10]c

⌨️ 快捷键说明

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