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

📄 nrf2401.lis

📁 著名的RF射频芯片nRF2401应用程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module nrf2401.c
                        .area data(ram, con, rel)
 0000           _TxBuf::
 0000                   .blkb 2
                        .area idata
 0000 6566              .byte 'e,'f
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 6768              .byte 'g,'h
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 696A              .byte 'i,'j
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 6B6C              .byte 'k,'l
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 6D6E              .byte 'm,'n
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 6F70              .byte 'o,'p
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C 7172              .byte 'q,'r
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E 7374              .byte 's,'t
                        .area data(ram, con, rel)
 0010                   .blkb 2
                        .area idata
 0010 7576              .byte 'u,'v
                        .area data(ram, con, rel)
 0012                   .blkb 2
                        .area idata
 0012 7778              .byte 'w,'x
                        .area data(ram, con, rel)
 0014                   .dbfile F:\programme\nrf2401\nrf2401.c
 0014                   .dbsym e TxBuf _TxBuf A[20:20]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\programme\nrf2401\nrf2401.c
 0000                   .dbfunc e nrf2401A_WR _nrf2401A_WR fV
 0000           ;              i -> R20
 0000           ;           temp -> R22
 0000           ;            val -> R16
                        .even
 0000           _nrf2401A_WR::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 76
 0002           ; #include "config.h"
 0002           ; 
 0002           ; //extern void DelayMs(uchar ms);
 0002           ; //extern void DelayUs(uint us);
 0002           ; 
 0002           ; //注意:
 0002           ; //1、nef2401A配置字是先写第15字节的!!
 0002           ; //2、发送后要延时等发送结束后才能转回接收模式,否则数据发送不出
 0002           ; 
 0002           ; 
 0002           ; #define SIZE 20     //最大数据包长度 32-ADDR4-CRC2=26Byte   25
 0002           ; #define ADDRSIZE 4  //地址长度Byte
 0002           ; 
 0002           ; #define CH_NO 2     //频段编号
 0002           ; 
 0002           ; #define BPS_1M      //编译控制:1M or 250Kbps
 0002           ; 
 0002           ; uchar TxBuf[SIZE]={101,102,103,104,105,106,107,108,109,110,
 0002           ;                    111,112,113,114,115,116,117,118,119,120};
 0002           ; uchar RxBuf[SIZE];
 0002           ; 
 0002           ; /*-------------------------------------------------------------------------------------------
 0002           ; nrf2401A配置寄存器宏定义 
 0002           ; nrf2401A配置寄存器(15Byte)
 0002           ; 工作频率f=2.4G+CH_NO*1MHz
 0002           ; -------------------------------------------------------------------------------------------*/
 0002           ; #define RX_ADDRESS           0xCCCCCCCC               //接收有效地址(本方)
 0002           ; #define TX_ADDRESS           0xCCCCCCCC               //发送有效地址(对方)
 0002           ; 
 0002           ; #define CH_NO_FREQ           CH_NO<<1                 //工作频段       Byte1.7-2
 0002           ; #define RX_EN                          1                                                //接收发送切换   Byte1.0 1接收 0发送
 0002           ; 
 0002           ; #define RX2EN_YES            128                       //第2接收通道使能1    Byte2.7
 0002           ; #define RX2EN_NO             0                         //第2接收通道使能0    Byte2.7
 0002           ; #define CM_SHOCK             64                        //收发模式ShockBurst  Byte2.6
 0002           ; #define CM_DIRECT            0                         //收发模式DirectMode  Byte2.6
 0002           ; #define RFDR_1M              32                        //空中Baud=1M         Byte2.5
 0002           ; #define RFDR_250K            0                         //空中Baud=250K       Byte2.5
 0002           ; #define XOF_20MHz            4*4                       //晶体振荡器频率20MHz Byte2.4~2
 0002           ; #define XOF_16MHz            3*4                       //晶体振荡器频率16MHz 
 0002           ; #define XOF_12MHz            2*4                       //晶体振荡器频率12MHz 
 0002           ; #define XOF_8MHz             1*4                       //晶体振荡器频率8MHz  
 0002           ; #define XOF_4MHz             0*4                       //晶体振荡器频率4MHz  
 0002           ; #define PA_PWR_0               0                         //输出功率-20dBm      Byte2.1~0 
 0002           ; #define PA_PWR_1               1                         //输出功率-10dBm      
 0002           ; #define PA_PWR_2               2                         //输出功率-5dBm       
 0002           ; #define PA_PWR_3               3                         //输出功率 0dBm          
 0002           ; 
 0002           ; #define ADDR_W                                 (ADDRSIZE<<5)                     //地址位数                    Byte3.7~2
 0002           ; #define CRC_MODE_16BIT       2                         //CRC16模式           Byte3.1     1
 0002           ; #define CRC_MODE_8BIT        0                         //CRC8模式            Byte3.1     
 0002           ; #define CRC_EN               1                         //CRC使能             Byte3.0     1
 0002           ; #define CRC16_EN             3                         //CRC16模式使能       
 0002           ; #define CRC8_EN              1                         //CRC8模式使能        
 0002           ; 
 0002           ; #define RX_ADDRESS_0         RX_ADDRESS & 0xff         //通道1接收有效地址第1字节 Byte4
 0002           ; #define RX_ADDRESS_1         (RX_ADDRESS >> 8) & 0xff  //通道1接收有效地址第2字节 Byte5
 0002           ; #define RX_ADDRESS_2         (RX_ADDRESS >> 16) & 0xff //通道1接收有效地址第3字节 Byte6
 0002           ; #define RX_ADDRESS_3         RX_ADDRESS >> 24          //通道1接收有效地址第4字节 Byte7 
 0002           ; #define RX_ADDRESS_4         0                                       //通道1接收有效地址第5字节 Byte8 
 0002           ;   
 0002           ; #define RX_ADDRESS2          0                                                   //Byte9,10,11,12,13字节为通道2接收地址
 0002           ; 
 0002           ; #define DATA1_W                                SIZE*8                                    //接收通道1数据包长度,Bit计算 Byte14
 0002           ; #define DATA2_W                                SIZE*8                                    //接收通道2数据包长度,Bit计算 Byte15 
 0002           ; 
 0002           ; #define TX_ADDRESS_4           0                                                 //发送有效地址第5字节
 0002           ; #define TX_ADDRESS_3         TX_ADDRESS >> 24          //发送有效地址第4字节
 0002           ; #define TX_ADDRESS_2         (TX_ADDRESS >> 16) & 0xff //发送有效地址第3字节
 0002           ; #define TX_ADDRESS_1         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第2字节
 0002           ; #define TX_ADDRESS_0         TX_ADDRESS & 0xff         //发送有效地址第1字节
 0002           ; 
 0002           ; 
 0002           ; //写1Byte
 0002           ; void nrf2401A_WR(uchar val) 
 0002           ; {uchar temp,i;
 0002                   .dbline 78
 0002           ;   //MSB first 高位开始,先输出DATA,然后CLK_Up,再CLK_Dn
 0002           ;   SET(DDRC,DATA);//置DATA输出
 0002 A39A              sbi 0x14,3
 0004                   .dbline 79
 0004           ;   temp=val;
 0004 602F              mov R22,R16
 0006                   .dbline 81
 0006           ;   
 0006           ;   for (i=0;i<8;i++)
 0006 4427              clr R20
 0008 11C0              rjmp L5
 000A           L2:
 000A                   .dbline 82
 000A           ;   {
 000A                   .dbline 83
 000A           ;     if ((temp&0x80)>0) 
 000A 2224              clr R2
 000C 862F              mov R24,R22
 000E 8078              andi R24,128
 0010 2816              cp R2,R24
 0012 10F4              brsh L6
 0014                   .dbline 84
 0014           ;         SET(PORTC,DATA);
 0014 AB9A              sbi 0x15,3
 0016 01C0              rjmp L7
 0018           L6:
 0018                   .dbline 86
 0018           ;       else
 0018           ;       CLR(PORTC,DATA);
 0018 AB98              cbi 0x15,3
 001A           L7:
 001A                   .dbline 88
 001A 0000              nop
 001C                   .dbline 89
 001C A99A              sbi 0x15,1
 001E                   .dbline 90
 001E 0000              nop
 0020                   .dbline 91
 0020 0000              nop
 0022                   .dbline 92
 0022 0000              nop
 0024                   .dbline 93
 0024 0000              nop
 0026                   .dbline 94
 0026 A998              cbi 0x15,1
 0028                   .dbline 96
 0028 660F              lsl R22
 002A                   .dbline 97
 002A           L3:
 002A                   .dbline 81
 002A 4395              inc R20
 002C           L5:
 002C                   .dbline 81
 002C 4830              cpi R20,8
 002E 68F3              brlo L2
 0030                   .dbline -2
 0030           L1:
 0030 00D0              rcall pop_gset2
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r i 20 c
 0034                   .dbsym r temp 22 c
 0034                   .dbsym r val 16 c
 0034                   .dbend
 0034                   .dbfunc e nrf2401A_RD _nrf2401A_RD fc
 0034           ;              i -> R16
 0034           ;           temp -> R18
                        .even
 0034           _nrf2401A_RD::
 0034                   .dbline -1
 0034                   .dbline 102
 0034           ;       
 0034           ;       NOP(); 
 0034           ;       SET(PORTC,CLK1);
 0034           ;       NOP();
 0034           ;       NOP();
 0034           ;       NOP();
 0034           ;       NOP();
 0034           ;       CLR(PORTC,CLK1);
 0034           ;   
 0034           ;       temp=temp<<1;
 0034           ;   }
 0034           ; }
 0034           ; 
 0034           ; //读1Byte
 0034           ; uchar nrf2401A_RD() 
 0034           ; {uchar temp=0,i;
 0034                   .dbline 102
 0034 2227              clr R18
 0036                   .dbline 104
 0036           ;   //MSB first 高位开始,先读入DATA,然后CLK_Up,再CLK_Dn
 0036           ;   CLR(DDRC,DATA);//置DATA输入
 0036 A398              cbi 0x14,3
 0038                   .dbline 105
 0038           ;   temp=0;
 0038                   .dbline 107
 0038           ;   
 0038           ;   for (i=0;i<8;i++)
 0038 0027              clr R16
 003A 0CC0              rjmp L12
 003C           L9:
 003C                   .dbline 108
 003C           ;   {
 003C                   .dbline 109
 003C           ;     temp=temp<<1;
 003C 220F              lsl R18
 003E                   .dbline 110
 003E           ;     if ((PINC&(1<<DATA)))
 003E 9B9B              sbis 0x13,3
 0040 02C0              rjmp L13
 0042                   .dbline 111
 0042           ;        temp=temp|0x01; 
 0042 2160              ori R18,1
 0044 01C0              rjmp L14
 0046           L13:
 0046                   .dbline 112
 0046           ;       else temp=temp&0xfe;
 0046 2E7F              andi R18,254
 0048           L14:
 0048                   .dbline 114
 0048 A99A              sbi 0x15,1
 004A                   .dbline 115
 004A 0000              nop
 004C                   .dbline 116
 004C 0000              nop
 004E                   .dbline 117
 004E 0000              nop
 0050                   .dbline 118
 0050 A998              cbi 0x15,1

⌨️ 快捷键说明

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