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

📄 nrf905.lis

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 00A6                   .dbline 0 ; func end
 00A6 0895              ret
 00A8                   .dbsym r RX_ADD 16 c
 00A8                   .dbend
 00A8                   .dbfunc e Change_TX_ADD _Change_TX_ADD fV
 00A8           ;         TX_ADD -> R16
                        .even
 00A8           _Change_TX_ADD::
 00A8 00D0              rcall push_gset2
 00AA                   .dbline -1
 00AA                   .dbline 156
 00AA           ; 
 00AA           ; //改变nrf905的发送地址
 00AA           ; void Change_TX_ADD(unsigned char TX_ADD)
 00AA           ; {
 00AA                   .dbline 157
 00AA           ;        TX_ADDRESS=TX_ADDRESS&0xffffff00;//先清除最低8位
 00AA 40E0              ldi R20,0
 00AC 5FEF              ldi R21,255
 00AE 6FEF              ldi R22,255
 00B0 7FEF              ldi R23,255
 00B2 40900600          lds R4,_TX_ADDRESS+2
 00B6 50900700          lds R5,_TX_ADDRESS+2+1
 00BA 20900400          lds R2,_TX_ADDRESS
 00BE 30900500          lds R3,_TX_ADDRESS+1
 00C2 2422              and R2,R20
 00C4 3522              and R3,R21
 00C6 4622              and R4,R22
 00C8 5722              and R5,R23
 00CA 30920500          sts _TX_ADDRESS+1,R3
 00CE 20920400          sts _TX_ADDRESS,R2
 00D2 50920700          sts _TX_ADDRESS+2+1,R5
 00D6 40920600          sts _TX_ADDRESS+2,R4
 00DA                   .dbline 158
 00DA           ;      TX_ADDRESS=TX_ADDRESS|TX_ADD;//再将新地址送到发送地址
 00DA 202E              mov R2,R16
 00DC 3324              clr R3
 00DE 4424              clr R4
 00E0 5524              clr R5
 00E2 80900600          lds R8,_TX_ADDRESS+2
 00E6 90900700          lds R9,_TX_ADDRESS+2+1
 00EA 60900400          lds R6,_TX_ADDRESS
 00EE 70900500          lds R7,_TX_ADDRESS+1
 00F2 6228              or R6,R2
 00F4 7328              or R7,R3
 00F6 8428              or R8,R4
 00F8 9528              or R9,R5
 00FA 70920500          sts _TX_ADDRESS+1,R7
 00FE 60920400          sts _TX_ADDRESS,R6
 0102 90920700          sts _TX_ADDRESS+2+1,R9
 0106 80920600          sts _TX_ADDRESS+2,R8
 010A                   .dbline -2
 010A                   .dbline 159
 010A           ; }
 010A           L12:
 010A 00D0              rcall pop_gset2
 010C                   .dbline 0 ; func end
 010C 0895              ret
 010E                   .dbsym r TX_ADD 16 c
 010E                   .dbend
 010E                   .dbfunc e nrf905_Config _nrf905_Config fV
                        .even
 010E           _nrf905_Config::
 010E 00D0              rcall push_gset2
 0110                   .dbline -1
 0110                   .dbline 163
 0110           ; 
 0110           ; //配置nRF905
 0110           ; void nrf905_Config(void)//通过向spi 向905写寄存器从而配置寄存器
 0110           ; {
 0110                   .dbline 165
 0110           ;  
 0110           ;   CLR(PORTB,CSN);                   // Spi 片选开,使能spi
 0110 C298              cbi 0x18,2
 0112                   .dbline 166
 0112           ;   nrf905_SpiRW(WC);                // Write config command ,
 0112 0027              clr R16
 0114 5FD0              rcall _nrf905_SpiRW
 0116                   .dbline 167
 0116           ;   nrf905_SpiRW(CH_NO_BYTE);                      //中心频率低8位
 0116 0CE4              ldi R16,76
 0118 5DD0              rcall _nrf905_SpiRW
 011A                   .dbline 168
 011A           ;   nrf905_SpiRW(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
 011A 0CE0              ldi R16,12
 011C 5BD0              rcall _nrf905_SpiRW
 011E                   .dbline 169
 011E           ;   nrf905_SpiRW(TX_AFW_4BYTE | RX_AFW_4BYTE);     //接收地址宽度4字节,发送地址宽度4字节
 011E 04E4              ldi R16,68
 0120 59D0              rcall _nrf905_SpiRW
 0122                   .dbline 170
 0122           ;   nrf905_SpiRW(RX_PW_32BYTE);                    //接收数据宽度32字节
 0122 00E2              ldi R16,32
 0124 57D0              rcall _nrf905_SpiRW
 0126                   .dbline 171
 0126           ;   nrf905_SpiRW(TX_PW_32BYTE);                    //发送数据宽度32字节
 0126 00E2              ldi R16,32
 0128 55D0              rcall _nrf905_SpiRW
 012A                   .dbline 172
 012A           ;   nrf905_SpiRW(RX_ADDRESS_0);                    //接收有效地址第1字节
 012A 88E1              ldi R24,24
 012C 90E0              ldi R25,0
 012E 40900200          lds R4,_RX_ADDRESS+2
 0132 50900300          lds R5,_RX_ADDRESS+2+1
 0136 20900000          lds R2,_RX_ADDRESS
 013A 30900100          lds R3,_RX_ADDRESS+1
 013E 8A93              st -y,R24
 0140 8101              movw R16,R2
 0142 9201              movw R18,R4
 0144 00D0              rcall lsr32
 0146 46D0              rcall _nrf905_SpiRW
 0148                   .dbline 173
 0148           ;   nrf905_SpiRW(RX_ADDRESS_1);                    //接收有效地址第2字节
 0148 4FEF              ldi R20,255
 014A 50E0              ldi R21,0
 014C 60E0              ldi R22,0
 014E 70E0              ldi R23,0
 0150 40900200          lds R4,_RX_ADDRESS+2
 0154 50900300          lds R5,_RX_ADDRESS+2+1
 0158 20900000          lds R2,_RX_ADDRESS
 015C 30900100          lds R3,_RX_ADDRESS+1
 0160 1201              movw R2,R4
 0162 4424              clr R4
 0164 5524              clr R5
 0166 2422              and R2,R20
 0168 3522              and R3,R21
 016A 4622              and R4,R22
 016C 5722              and R5,R23
 016E 022D              mov R16,R2
 0170 31D0              rcall _nrf905_SpiRW
 0172                   .dbline 174
 0172           ;   nrf905_SpiRW(RX_ADDRESS_2);                    //接收有效地址第3字节
 0172 88E0              ldi R24,8
 0174 90E0              ldi R25,0
 0176 40900200          lds R4,_RX_ADDRESS+2
 017A 50900300          lds R5,_RX_ADDRESS+2+1
 017E 20900000          lds R2,_RX_ADDRESS
 0182 30900100          lds R3,_RX_ADDRESS+1
 0186 8A93              st -y,R24
 0188 8101              movw R16,R2
 018A 9201              movw R18,R4
 018C 00D0              rcall lsr32
 018E 1801              movw R2,R16
 0190 2901              movw R4,R18
 0192 4FEF              ldi R20,255
 0194 50E0              ldi R21,0
 0196 60E0              ldi R22,0
 0198 70E0              ldi R23,0
 019A 2422              and R2,R20
 019C 3522              and R3,R21
 019E 4622              and R4,R22
 01A0 5722              and R5,R23
 01A2 022D              mov R16,R2
 01A4 17D0              rcall _nrf905_SpiRW
 01A6                   .dbline 175
 01A6           ;   nrf905_SpiRW(RX_ADDRESS_3);                    //接收有效地址第4字节
 01A6 4FEF              ldi R20,255
 01A8 50E0              ldi R21,0
 01AA 60E0              ldi R22,0
 01AC 70E0              ldi R23,0
 01AE 40900200          lds R4,_RX_ADDRESS+2
 01B2 50900300          lds R5,_RX_ADDRESS+2+1
 01B6 20900000          lds R2,_RX_ADDRESS
 01BA 30900100          lds R3,_RX_ADDRESS+1
 01BE 2422              and R2,R20
 01C0 3522              and R3,R21
 01C2 4622              and R4,R22
 01C4 5722              and R5,R23
 01C6 022D              mov R16,R2
 01C8 05D0              rcall _nrf905_SpiRW
 01CA                   .dbline 176
 01CA           ;   nrf905_SpiRW(CRC16_EN | XOF_16MHz);            //CRC16模式使能,晶体振荡器频率16MHz
 01CA 08ED              ldi R16,216
 01CC 03D0              rcall _nrf905_SpiRW
 01CE                   .dbline 177
 01CE           ;   SET(PORTB,CSN);                 // Disable Spi
 01CE C29A              sbi 0x18,2
 01D0                   .dbline -2
 01D0                   .dbline 178
 01D0           ; }
 01D0           L13:
 01D0 00D0              rcall pop_gset2
 01D2                   .dbline 0 ; func end
 01D2 0895              ret
 01D4                   .dbend
 01D4                   .dbfunc e nrf905_SpiRW _nrf905_SpiRW fc
 01D4           ;           temp -> R20
 01D4           ;            val -> R16
                        .even
 01D4           _nrf905_SpiRW::
 01D4 00D0              rcall push_gset1
 01D6                   .dbline -1
 01D6                   .dbline 184
 01D6           ; 
 01D6           ; /*-----------------------------------------------
 01D6           ;     控制nrf905的 SPI读写一体化函数  
 01D6           ; ------------------------------------------------*/ 
 01D6           ; uchar nrf905_SpiRW(uchar val) 
 01D6           ; {
 01D6                   .dbline 187
 01D6           ;     uchar temp;
 01D6           ; 
 01D6           ;     SPDR=val;
 01D6 0FB9              out 0xf,R16
 01D8           L15:
 01D8                   .dbline 188
 01D8           L16:
 01D8                   .dbline 188
 01D8           ;       while ((SPSR&(1<<SPIF))==0);//置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全局中断使能位置位,就会引发SPI 中断
 01D8 779B              sbis 0xe,7
 01DA FECF              rjmp L15
 01DC                   .dbline 189
 01DC           ;       temp=SPDR;
 01DC 4FB1              in R20,0xf
 01DE                   .dbline 190
 01DE           ;       return temp;
 01DE 042F              mov R16,R20
 01E0                   .dbline -2
 01E0           L14:
 01E0 00D0              rcall pop_gset1
 01E2                   .dbline 0 ; func end
 01E2 0895              ret
 01E4                   .dbsym r temp 20 c
 01E4                   .dbsym r val 16 c
 01E4                   .dbend
 01E4                   .dbfunc e nrf905_StandBy _nrf905_StandBy fV
                        .even
 01E4           _nrf905_StandBy::
 01E4                   .dbline -1
 01E4                   .dbline 197
 01E4           ; }
 01E4           ; 
 01E4           ; /*-----------------------------------------------
 01E4           ;      设置为StandBy模式  
 01E4           ; ------------------------------------------------*/ 
 01E4           ; void nrf905_StandBy(void)
 01E4           ; {
 01E4                   .dbline 198
 01E4           ;    SET(PORTD,PWR);//上电
 01E4 959A              sbi 0x12,5
 01E6                   .dbline 199
 01E6           ;    CLR(PORTD,TRXCE);
 01E6 9698              cbi 0x12,6
 01E8                   .dbline 200
 01E8           ;    CLR(PORTD,TX_EN);
 01E8 9798              cbi 0x12,7
 01EA                   .dbline -2
 01EA                   .dbline 201
 01EA           ; }
 01EA           L18:
 01EA                   .dbline 0 ; func end
 01EA 0895              ret
 01EC                   .dbend
 01EC                   .dbfunc e nrf905_Off _nrf905_Off fV
                        .even
 01EC           _nrf905_Off::
 01EC                   .dbline -1
 01EC                   .dbline 205
 01EC           ; 
 01EC           ; //->PwrDown
 01EC           ; void nrf905_Off(void)
 01EC           ; {
 01EC                   .dbline 206
 01EC           ;   CLR(PORTD,PWR);
 01EC 9598              cbi 0x12,5
 01EE                   .dbline -2
 01EE                   .dbline 207
 01EE           ; }
 01EE           L19:
 01EE                   .dbline 0 ; func end
 01EE 0895              ret
 01F0                   .dbend
 01F0                   .dbfunc e nrf905_RxOn _nrf905_RxOn fV
                        .even
 01F0           _nrf905_RxOn::
 01F0                   .dbline -1
 01F0                   .dbline 214
 01F0           ; 
 01F0           ; 
 01F0           ; /*-----------------------------------------------
 01F0           ;      设置为接收模式  
 01F0           ; ------------------------------------------------*/ 
 01F0           ; void nrf905_RxOn(void)
 01F0           ; {
 01F0                   .dbline 215

⌨️ 快捷键说明

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