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

📄 nrf2401a.lis

📁 PTR4000模块的源文件
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module nrf2401A.C
                        .area text(rom, con, rel)
 0000                   .dbfile D:\IccAvr\Pei\PTR4000\nrf2401A.C
 0000                   .dbfunc e nrf2401A_WR _nrf2401A_WR fV
 0000           ;              i -> R20
 0000           ;           temp -> R22
 0000           ;            val -> R16
                        .even
 0000           _nrf2401A_WR::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 74
 0004           ; #include "config.h"
 0004           ; 
 0004           ; extern void DelayMs(uchar ms);
 0004           ; extern void DelayUs(uint us);
 0004           ; 
 0004           ; //注意:
 0004           ; //1、nef2401A配置字是先写第15字节的!!
 0004           ; //2、发送后要延时等发送结束后才能转回接收模式,否则数据发送不出
 0004           ; 
 0004           ; 
 0004           ; #define SIZE 25     //最大数据包长度 32-ADDR4-CRC2=26Byte
 0004           ; #define ADDRSIZE 4  //地址长度Byte
 0004           ; 
 0004           ; #define CH_NO 2     //频段编号
 0004           ; 
 0004           ; #define BPS_1M      //编译控制:1M or 250Kbps
 0004           ; 
 0004           ; uchar TxBuf[SIZE],RxBuf[SIZE];
 0004           ; 
 0004           ; /*-------------------------------------------------------------------------------------------
 0004           ; nrf2401A配置寄存器宏定义 
 0004           ; nrf2401A配置寄存器(15Byte)
 0004           ; 工作频率f=2.4G+CH_NO*1MHz
 0004           ; -------------------------------------------------------------------------------------------*/
 0004           ; #define RX_ADDRESS           0xCCCCCCCC               //接收有效地址(本方)
 0004           ; #define TX_ADDRESS           0xCCCCCCCC               //发送有效地址(对方)
 0004           ; 
 0004           ; #define CH_NO_FREQ           CH_NO<<1                 //工作频段       Byte1.7-2
 0004           ; #define RX_EN                          1                                                //接收发送切换   Byte1.0 1接收 0发送
 0004           ; 
 0004           ; #define RX2EN_YES            128                       //第2接收通道使能1    Byte2.7
 0004           ; #define RX2EN_NO             0                         //第2接收通道使能0    Byte2.7
 0004           ; #define CM_SHOCK             64                        //收发模式ShockBurst  Byte2.6
 0004           ; #define CM_DIRECT            0                         //收发模式DirectMode  Byte2.6
 0004           ; #define RFDR_1M              32                        //空中Baud=1M         Byte2.5
 0004           ; #define RFDR_250K            0                         //空中Baud=250K       Byte2.5
 0004           ; #define XOF_20MHz            4*4                       //晶体振荡器频率20MHz Byte2.4~2
 0004           ; #define XOF_16MHz            3*4                       //晶体振荡器频率16MHz 
 0004           ; #define XOF_12MHz            2*4                       //晶体振荡器频率12MHz 
 0004           ; #define XOF_8MHz             1*4                       //晶体振荡器频率8MHz  
 0004           ; #define XOF_4MHz             0*4                       //晶体振荡器频率4MHz  
 0004           ; #define PA_PWR_0               0                         //输出功率-20dBm      Byte2.1~0 
 0004           ; #define PA_PWR_1               1                         //输出功率-10dBm      
 0004           ; #define PA_PWR_2               2                         //输出功率-5dBm       
 0004           ; #define PA_PWR_3               3                         //输出功率 0dBm          
 0004           ; 
 0004           ; #define ADDR_W                                 (ADDRSIZE<<5)                     //地址位数                    Byte3.7~2
 0004           ; #define CRC_MODE_16BIT       2                         //CRC16模式           Byte3.1     1
 0004           ; #define CRC_MODE_8BIT        0                         //CRC8模式            Byte3.1     
 0004           ; #define CRC_EN               1                         //CRC使能             Byte3.0     1
 0004           ; #define CRC16_EN             3                         //CRC16模式使能       
 0004           ; #define CRC8_EN              1                         //CRC8模式使能        
 0004           ; 
 0004           ; #define RX_ADDRESS_0         RX_ADDRESS & 0xff         //通道1接收有效地址第1字节 Byte4
 0004           ; #define RX_ADDRESS_1         (RX_ADDRESS >> 8) & 0xff  //通道1接收有效地址第2字节 Byte5
 0004           ; #define RX_ADDRESS_2         (RX_ADDRESS >> 16) & 0xff //通道1接收有效地址第3字节 Byte6
 0004           ; #define RX_ADDRESS_3         RX_ADDRESS >> 24          //通道1接收有效地址第4字节 Byte7 
 0004           ; #define RX_ADDRESS_4         0                                       //通道1接收有效地址第5字节 Byte8 
 0004           ;   
 0004           ; #define RX_ADDRESS2          0                                                   //Byte9,10,11,12,13字节为通道2接收地址
 0004           ; 
 0004           ; #define DATA1_W                                SIZE*8                                    //接收通道1数据包长度,Bit计算 Byte14
 0004           ; #define DATA2_W                                SIZE*8                                    //接收通道2数据包长度,Bit计算 Byte15 
 0004           ; 
 0004           ; #define TX_ADDRESS_4           0                                                 //发送有效地址第5字节
 0004           ; #define TX_ADDRESS_3         TX_ADDRESS >> 24          //发送有效地址第4字节
 0004           ; #define TX_ADDRESS_2         (TX_ADDRESS >> 16) & 0xff //发送有效地址第3字节
 0004           ; #define TX_ADDRESS_1         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第2字节
 0004           ; #define TX_ADDRESS_0         TX_ADDRESS & 0xff         //发送有效地址第1字节
 0004           ; 
 0004           ; 
 0004           ; //写1Byte
 0004           ; void nrf2401A_WR(uchar val) 
 0004           ; {uchar temp,i;
 0004                   .dbline 76
 0004           ;   //MSB first 高位开始,先输出DATA,然后CLK_Up,再CLK_Dn
 0004           ;   SET(DDRA,DATA);//置DATA输出
 0004 D59A              sbi 0x1a,5
 0006                   .dbline 77
 0006           ;   temp=val;
 0006 602F              mov R22,R16
 0008                   .dbline 79
 0008           ;   
 0008           ;   for (i=0;i<8;i++)
 0008 4427              clr R20
 000A 0EC0              xjmp L5
 000C           L2:
 000C                   .dbline 80
 000C           ;   {
 000C                   .dbline 81
 000C           ;     if ((temp&0x80)>0) 
 000C 2224              clr R2
 000E 862F              mov R24,R22
 0010 8078              andi R24,128
 0012 2816              cp R2,R24
 0014 10F4              brsh L6
 0016                   .dbline 82
 0016           ;         SET(PORTA,DATA);
 0016 DD9A              sbi 0x1b,5
 0018 01C0              xjmp L7
 001A           L6:
 001A                   .dbline 84
 001A           ;       else
 001A           ;       CLR(PORTA,DATA);
 001A DD98              cbi 0x1b,5
 001C           L7:
 001C                   .dbline 86
 001C 0000              nop
 001E                   .dbline 87
 001E DC9A              sbi 0x1b,4
 0020                   .dbline 88
 0020 0000              nop
 0022                   .dbline 89
 0022 DC98              cbi 0x1b,4
 0024                   .dbline 91
 0024 660F              lsl R22
 0026                   .dbline 92
 0026           L3:
 0026                   .dbline 79
 0026 4395              inc R20
 0028           L5:
 0028                   .dbline 79
 0028 4830              cpi R20,8
 002A 80F3              brlo L2
 002C                   .dbline -2
 002C           L1:
 002C 0E940000          xcall pop_gset2
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r i 20 c
 0032                   .dbsym r temp 22 c
 0032                   .dbsym r val 16 c
 0032                   .dbend
 0032                   .dbfunc e nrf2401A_RD _nrf2401A_RD fc
 0032           ;              i -> R16
 0032           ;           temp -> R18
                        .even
 0032           _nrf2401A_RD::
 0032                   .dbline -1
 0032                   .dbline 97
 0032           ;       
 0032           ;       NOP(); 
 0032           ;       SET(PORTA,CLK);
 0032           ;       NOP();
 0032           ;       CLR(PORTA,CLK);
 0032           ;   
 0032           ;       temp=temp<<1;
 0032           ;   }
 0032           ; }
 0032           ; 
 0032           ; //读1Byte
 0032           ; uchar nrf2401A_RD() 
 0032           ; {uchar temp,i;
 0032                   .dbline 99
 0032           ;   //MSB first 高位开始,先读入DATA,然后CLK_Up,再CLK_Dn
 0032           ;   CLR(DDRA,DATA);//置DATA输入
 0032 D598              cbi 0x1a,5
 0034                   .dbline 100
 0034           ;   temp=0;
 0034 2227              clr R18
 0036                   .dbline 102
 0036           ;   
 0036           ;   for (i=0;i<8;i++)
 0036 0027              clr R16
 0038 0CC0              xjmp L12
 003A           L9:
 003A                   .dbline 103
 003A           ;   {
 003A                   .dbline 104
 003A           ;     temp=temp<<1;
 003A 220F              lsl R18
 003C                   .dbline 105
 003C           ;     if ((PINA&(1<<DATA))>0)
 003C 2224              clr R2
 003E 89B3              in R24,0x19
 0040 8072              andi R24,32
 0042 2816              cp R2,R24
 0044 08F4              brsh L13
 0046                   .dbline 106
 0046           ;        temp=temp|1; 
 0046 2160              ori R18,1
 0048           L13:
 0048                   .dbline 108
 0048 0000              nop
 004A                   .dbline 109
 004A DC9A              sbi 0x1b,4
 004C                   .dbline 110
 004C 0000              nop
 004E                   .dbline 111
 004E DC98              cbi 0x1b,4
 0050                   .dbline 112
 0050           L10:
 0050                   .dbline 102
 0050 0395              inc R16
 0052           L12:
 0052                   .dbline 102
 0052 0830              cpi R16,8
 0054 90F3              brlo L9
 0056                   .dbline 114
 0056           ;       
 0056           ;       NOP();
 0056           ;       SET(PORTA,CLK);
 0056           ;       NOP();
 0056           ;       CLR(PORTA,CLK);
 0056           ;   }
 0056           ;   
 0056           ;       return temp;
 0056 022F              mov R16,R18
 0058                   .dbline -2
 0058           L8:
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbsym r i 16 c
 005A                   .dbsym r temp 18 c
 005A                   .dbend
 005A                   .dbfunc e nrf2401A_StandBy _nrf2401A_StandBy fV
                        .even
 005A           _nrf2401A_StandBy::
 005A                   .dbline -1
 005A                   .dbline 119
 005A           ; }
 005A           ; 
 005A           ; //PwrDown->StandBy
 005A           ; void nrf2401A_StandBy()
 005A           ; {
 005A                   .dbline 120
 005A           ;    SET(PORTA,PWR2);
 005A D89A              sbi 0x1b,0
 005C                   .dbline 121
 005C           ;    CLR(PORTA,CE);
 005C D998              cbi 0x1b,1
 005E                   .dbline 122
 005E           ;    CLR(PORTA,CS);
 005E DA98              cbi 0x1b,2
 0060                   .dbline -2
 0060           L15:
 0060                   .dbline 0 ; func end
 0060 0895              ret
 0062                   .dbend
 0062                   .dbfunc e nrf2401A_Off _nrf2401A_Off fV
                        .even
 0062           _nrf2401A_Off::
 0062                   .dbline -1
 0062                   .dbline 127
 0062           ; }
 0062           ; 
 0062           ; //->PwrDown
 0062           ; void nrf2401A_Off()
 0062           ; {
 0062                   .dbline 128
 0062           ;   CLR(PORTA,PWR2);
 0062 D898              cbi 0x1b,0
 0064                   .dbline 129
 0064           ;   CLR(PORTA,CE);
 0064 D998              cbi 0x1b,1
 0066                   .dbline 130
 0066           ;   CLR(PORTA,CS);
 0066 DA98              cbi 0x1b,2
 0068                   .dbline -2
 0068           L16:
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbend
 006A                   .dbfunc e nrf2401A_RwOn _nrf2401A_RwOn fV
                        .even
 006A           _nrf2401A_RwOn::
 006A                   .dbline -1
 006A                   .dbline 135
 006A           ; }
 006A           ; 
 006A           ; //配置模式
 006A           ; void nrf2401A_RwOn()
 006A           ; {
 006A                   .dbline 136
 006A           ;   SET(PORTA,PWR2);
 006A D89A              sbi 0x1b,0
 006C                   .dbline 137
 006C           ;   CLR(PORTA,CE);
 006C D998              cbi 0x1b,1
 006E                   .dbline 138
 006E           ;   SET(PORTA,CS);
 006E DA9A              sbi 0x1b,2
 0070                   .dbline -2
 0070           L17:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbend
 0072                   .dbfunc e nrf2401A_Run _nrf2401A_Run fV
                        .even
 0072           _nrf2401A_Run::
 0072                   .dbline -1
 0072                   .dbline 144
 0072           ; 
 0072           ; }
 0072           ; 
 0072           ; //工作模式
 0072           ; void nrf2401A_Run()
 0072           ; {
 0072                   .dbline 145
 0072           ;   SET(PORTA,PWR2);
 0072 D89A              sbi 0x1b,0
 0074                   .dbline 146
 0074           ;   CLR(PORTA,CS);//first
 0074 DA98              cbi 0x1b,2
 0076                   .dbline 147
 0076           ;   SET(PORTA,CE);
 0076 D99A              sbi 0x1b,1
 0078                   .dbline -2
 0078           L18:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
 007A                   .dbfunc e nrf2401A_Config _nrf2401A_Config fV
                        .even
 007A           _nrf2401A_Config::
 007A                   .dbline -1

⌨️ 快捷键说明

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