📄 nrf905.lis
字号:
.module nrf905.C
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\nrftest\nrf905.C
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; i -> R10
0000 ; ms -> R12
.even
0000 _DelayMs::
0000 AA92 st -y,R10
0002 CA92 st -y,R12
0004 C02E mov R12,R16
0006 .dbline -1
0006 .dbline 7
0006 ; #define _nrf905_c_
0006 ; #include "nrf905.h"
0006 ; #include "LCD.h"
0006 ;
0006 ; //延时--------------------------------------------------
0006 ; void DelayMs( uchar ms )
0006 ; {
0006 .dbline 10
0006 ; char i;
0006 ;
0006 ; for( i = 0; i < ms; i++ )
0006 AA24 clr R10
0008 04C0 xjmp L5
000A L2:
000A .dbline 11
000A ; {
000A .dbline 12
000A ; DelayUs( 1000 );
000A 08EE ldi R16,1000
000C 13E0 ldi R17,3
000E 06D0 xcall _DelayUs
0010 .dbline 13
0010 ; }
0010 L3:
0010 .dbline 10
0010 A394 inc R10
0012 L5:
0012 .dbline 10
0012 AC14 cp R10,R12
0014 D0F3 brlo L2
0016 X0:
0016 .dbline 15
0016 ;
0016 ; return;
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 C990 ld R12,y+
0018 A990 ld R10,y+
001A 0895 ret
001C .dbsym r i 10 c
001C .dbsym r ms 12 c
001C .dbend
001C .dbfunc e DelayUs _DelayUs fV
001C ; i -> R20,R21
001C ; us -> R16,R17
.even
001C _DelayUs::
001C 4A93 st -y,R20
001E 5A93 st -y,R21
0020 .dbline -1
0020 .dbline 19
0020 ; }
0020 ;
0020 ; void DelayUs(uint us)
0020 ; {
0020 .dbline 21
0020 ; uint i;
0020 ; for( i = 0; i < us; i++ )
0020 4427 clr R20
0022 5527 clr R21
0024 08C0 xjmp L10
0026 L7:
0026 .dbline 22
0026 ; { NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); }
0026 .dbline 22
0026 0000 nop
0028 .dbline 22
0028 0000 nop
002A .dbline 22
002A 0000 nop
002C .dbline 22
002C 0000 nop
002E .dbline 22
002E 0000 nop
0030 .dbline 22
0030 0000 nop
0032 .dbline 22
0032 L8:
0032 .dbline 21
0032 4F5F subi R20,255 ; offset = 1
0034 5F4F sbci R21,255
0036 L10:
0036 .dbline 21
0036 4017 cp R20,R16
0038 5107 cpc R21,R17
003A A8F3 brlo L7
003C X1:
003C .dbline -2
003C L6:
003C .dbline 0 ; func end
003C 5991 ld R21,y+
003E 4991 ld R20,y+
0040 0895 ret
0042 .dbsym r i 20 i
0042 .dbsym r us 16 i
0042 .dbend
0042 .dbfunc e nrf905_Config _nrf905_Config fV
.even
0042 _nrf905_Config::
0042 .dbline -1
0042 .dbline 28
0042 ; }
0042 ; //-----------------------------------------------------------------
0042 ;
0042 ; //配置nRF905
0042 ; void nrf905_Config(void)
0042 ; {
0042 .dbline 29
0042 ; CLR( PORT_SPI, CSN ); // Spi 片选开
0042 C498 cbi 0x18,4
0044 .dbline 30
0044 ; nrf905_SpiRW(WC); // Write config command
0044 0027 clr R16
0046 27D0 xcall _nrf905_SpiRW
0048 .dbline 31
0048 ; nrf905_SpiRW(CH_NO_BYTE); //中心频率低8位
0048 0CE4 ldi R16,76
004A 25D0 xcall _nrf905_SpiRW
004C .dbline 32
004C ; nrf905_SpiRW(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
004C 0CE0 ldi R16,12
004E 23D0 xcall _nrf905_SpiRW
0050 .dbline 33
0050 ; nrf905_SpiRW(TX_AFW_4BYTE | RX_AFW_4BYTE); //接收地址宽度4字节,发送地址宽度4字节
0050 04E4 ldi R16,68
0052 21D0 xcall _nrf905_SpiRW
0054 .dbline 34
0054 ; nrf905_SpiRW(RX_PW_1BYTE); //接收数据宽度32字节
0054 01E0 ldi R16,1
0056 1FD0 xcall _nrf905_SpiRW
0058 .dbline 35
0058 ; nrf905_SpiRW(TX_PW_1BYTE); //发送数据宽度32字节
0058 01E0 ldi R16,1
005A 1DD0 xcall _nrf905_SpiRW
005C .dbline 36
005C ; nrf905_SpiRW(RX_ADDRESS_0); //接收有效地址第1字节
005C 02E1 ldi R16,18
005E 1BD0 xcall _nrf905_SpiRW
0060 .dbline 37
0060 ; nrf905_SpiRW(RX_ADDRESS_1); //接收有效地址第2字节
0060 04E3 ldi R16,52
0062 19D0 xcall _nrf905_SpiRW
0064 .dbline 38
0064 ; nrf905_SpiRW(RX_ADDRESS_2); //接收有效地址第3字节
0064 06E5 ldi R16,86
0066 17D0 xcall _nrf905_SpiRW
0068 .dbline 39
0068 ; nrf905_SpiRW(RX_ADDRESS_3); //接收有效地址第4字节
0068 08E7 ldi R16,120
006A 15D0 xcall _nrf905_SpiRW
006C .dbline 40
006C ; nrf905_SpiRW(CRC16_EN | XOF_16MHz); //CRC16模式使能,晶体振荡器频率16MHz
006C 08ED ldi R16,216
006E 13D0 xcall _nrf905_SpiRW
0070 .dbline 41
0070 ; SET( PORT_SPI, CSN ); // Disable Spi
0070 C49A sbi 0x18,4
0072 .dbline -2
0072 L11:
0072 .dbline 0 ; func end
0072 0895 ret
0074 .dbend
0074 .dbfunc e SPI_Init _SPI_Init fV
.even
0074 _SPI_Init::
0074 .dbline -1
0074 .dbline 46
0074 ; }
0074 ;
0074 ; //spi寄存器以及端口初始化
0074 ; void SPI_Init(void)
0074 ; {
0074 .dbline 47
0074 ; DDR_SPI |= ( 1 << MOSI ) | ( 1 << MISO ) | ( 1 << SCK ) | ( 1 << CSN ); // 设置MOSI和SCK、SS为输出,其他为输入
0074 87B3 in R24,0x17
0076 806F ori R24,240
0078 87BB out 0x17,R24
007A .dbline 48
007A ; PORT_SPI |= ( 1 << MOSI ) | ( 1 << SCK ) | ( 1 << CSN );
007A 88B3 in R24,0x18
007C 806B ori R24,176
007E 88BB out 0x18,R24
0080 .dbline 49
0080 ; SPCR |= ( 1 << SPE ) | ( 1 << MSTR ) | ( 0 << CPOL ) | ( 0 << SPR0); // 主机模式,fck/16, SPI方式0
0080 8DB1 in R24,0xd
0082 8065 ori R24,80
0084 8DB9 out 0xd,R24
0086 .dbline -2
0086 L12:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e nrfport_init _nrfport_init fV
.even
0088 _nrfport_init::
0088 .dbline -1
0088 .dbline 54
0088 ; }
0088 ;
0088 ; //nRF端口初始化
0088 ; void nrfport_init( void )
0088 ; {
0088 .dbline 55
0088 ; DDR_NRF |= ( 1 << TX_EN ) | ( 1 << TRXCE ) | ( 0 << DR ) | ( 1 << PWR );
0088 87B3 in R24,0x17
008A 8760 ori R24,7
008C 87BB out 0x17,R24
008E .dbline 56
008E ; PORT_NRF |= ( 1 << TX_EN ) | ( 1 << TRXCE ) | ( 1 << DR ) | ( 1 << PWR );
008E 88B3 in R24,0x18
0090 8F60 ori R24,15
0092 88BB out 0x18,R24
0094 .dbline -2
0094 L13:
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbend
0096 .dbfunc e nrf905_SpiRW _nrf905_SpiRW fc
0096 ; val -> R16
.even
0096 _nrf905_SpiRW::
0096 .dbline -1
0096 .dbline 61
0096 ; }
0096 ;
0096 ; //spi读写函数
0096 ; uchar nrf905_SpiRW( uchar val )
0096 ; {
0096 .dbline 62
0096 ; SPDR = val;
0096 0FB9 out 0xf,R16
0098 L15:
0098 .dbline 63
0098 ; while ( ( SPSR & ( 1 << SPIF ) ) == 0 );
0098 L16:
0098 .dbline 63
0098 779B sbis 0xe,7
009A FECF rjmp L15
009C X2:
009C .dbline 64
009C ; return SPDR;
009C 0FB1 in R16,0xf
009E .dbline -2
009E L14:
009E .dbline 0 ; func end
009E 0895 ret
00A0 .dbsym r val 16 c
00A0 .dbend
00A0 .dbfunc e nrf905_StandBy _nrf905_StandBy fV
.even
00A0 _nrf905_StandBy::
00A0 .dbline -1
00A0 .dbline 69
00A0 ; }
00A0 ;
00A0 ; //Standby 和SPI 编程模式, 一般在初始化写配置信息时用到。
00A0 ; void nrf905_StandBy( void )
00A0 ; {
00A0 .dbline 70
00A0 ; SET( PORT_NRF, PWR ); //PWR_UP = 1 上电
00A0 C29A sbi 0x18,2
00A2 .dbline 71
00A2 ; CLR( PORT_NRF, TRXCE ); //TRX_CE = 0 关闭发送或接收
00A2 C198 cbi 0x18,1
00A4 .dbline 72
00A4 ; CLR( PORT_NRF, TX_EN ); //TX_EN = X 任意值, 当TRX_CE = 1时起作用
00A4 C098 cbi 0x18,0
00A6 .dbline -2
00A6 L18:
00A6 .dbline 0 ; func end
00A6 0895 ret
00A8 .dbend
00A8 .dbfunc e nrf905_Off _nrf905_Off fV
.even
00A8 _nrf905_Off::
00A8 .dbline -1
00A8 .dbline 77
00A8 ; }
00A8 ;
00A8 ; //掉电和SPI 编程
00A8 ; void nrf905_Off( void )
00A8 ; {
00A8 .dbline 78
00A8 ; CLR( PORT_NRF, PWR );
00A8 C298 cbi 0x18,2
00AA .dbline -2
00AA L19:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -