📄 nrf905.lis
字号:
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 + -