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

📄 nrf905.lis

📁 基于m16的nrf905接收发送程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -