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