📄 main.lis
字号:
0006 .blkb 2
.area idata
0006 1CCC .byte 28,204
.area data(ram, con, rel)
0008 .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
0008 .blkb 2
.area idata
0008 CCCC .byte 204,204
.area data(ram, con, rel)
000A .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
000A .blkb 2
.area idata
000A 00CC .byte 0,204
.area data(ram, con, rel)
000C .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
000C .blkb 2
.area idata
000C CCCC .byte 204,204
.area data(ram, con, rel)
000E .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
000E .blkb 2
.area idata
000E CC43 .byte 204,'C
.area data(ram, con, rel)
0010 .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
0010 .blkb 2
.area idata
0010 4F04 .byte 'O,4
.area data(ram, con, rel)
0012 .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
0012 .dbsym e nRF2401_Conf _nRF2401_Conf A[18:18]c
.area text(rom, con, rel)
019C .dbfile C:\DOCUME~1\haolxy\桌面\smartcar\smartcar\main.c
019C .dbfunc e delay_1us _delay_1us fV
.even
019C _delay_1us::
019C .dbline -1
019C .dbline 381
019C ; }
019C ;
019C ;
019C ;
019C ; ///////////////////////////////////////////////////////////////////////////////////////////////////////
019C ;
019C ; #define BYTE_BIT0 0x01
019C ; #define BYTE_BIT1 0x02
019C ; #define BYTE_BIT2 0x04
019C ; #define BYTE_BIT3 0x08
019C ; #define BYTE_BIT4 0x10
019C ; #define BYTE_BIT5 0x20
019C ; #define BYTE_BIT6 0x40
019C ; #define BYTE_BIT7 0x80
019C ; //<nRF2401_Pins 对应引脚>
019C ; /*sbit PWR_UP = P1^6;
019C ; sbit CE = P1^2;
019C ; //sbit DR2 = P3^5; //暂时没有用到
019C ; //sbit CLK2 = P3^4;
019C ; //sbit OUT2 = P3^3;
019C ; sbit CS = P1^1;
019C ; sbit DR1 = P1^0;
019C ; sbit CLK1 = P3^7;
019C ; sbit DATA = P3^3;
019C ; sbit LED0 = P3^4;
019C ; sbit LED1 = P3^5;
019C ; sbit KEY0 = P3^0;
019C ; sbit KEY1 = P3^1;
019C ; */
019C ; #define NRF_PORT PORTC
019C ; #define NRF_DDR DDRC
019C ; #define NRF_PIN PINC
019C ;
019C ; #define PWR_UP PC0
019C ; #define CE PC1
019C ; #define CS PC4
019C ; #define DR1 PC2
019C ; #define CLK1 PC3
019C ; #define DATA PC5
019C ;
019C ; #define PWR_UP_STATE (NRF_PIN&(1<<PWR_UP))==(1<<PWR_UP)
019C ; #define CE_STATE (NRF_PIN&(1<<CE))==(1<<CE)
019C ; #define CS_STATE (NRF_PIN&(1<<CS))==(1<<CS)
019C ; #define DR1_STATE (NRF_PIN&(1<<DR1))==(1<<DR1)
019C ; #define CLK1_STATE (NRF_PIN&(1<<CLK1))==(1<<CLK1)
019C ; #define DATA_STATE (NRF_PIN&(1<<DATA))==(1<<DATA)
019C ;
019C ; #define PWR_UP_SET() {NRF_PORT|=1<<PWR_UP;}
019C ; #define PWR_UP_CLR() {NRF_PORT&=~(1<<PWR_UP);}
019C ; #define CE_SET() {NRF_PORT|=1<<CE;}
019C ; #define CE_CLR() {NRF_PORT&=~(1<<CE);}
019C ; #define CS_SET() {NRF_PORT|=1<<CS;}
019C ; #define CS_CLR() {NRF_PORT&=~(1<<CS);}
019C ; #define DR1_SET() {NRF_PORT|=1<<DR1;}
019C ; #define DR1_CLR() {NRF_PORT&=~(1<<DR1);}
019C ; #define CLK1_SET() {NRF_PORT|=1<<CLK1;}
019C ; #define CLK1_CLR() {NRF_PORT&=~(1<<CLK1);}
019C ; #define DATA_SET() {NRF_PORT|=1<<DATA;}
019C ; #define DATA_CLR() {NRF_PORT&=~(1<<DATA);}
019C ; /*
019C ; #define LED0_SET() {PORTC|=1<<PC0;DDRC|=1<<PC0;}
019C ; #define LED0_CLR() {PORTC&=~(1<<PC0);}
019C ; #define LED1_SET() {PORTC|=1<<PC1;DDRC|=1<<PC1;}
019C ; #define LED1_CLR() {PORTC&=~(1<<PC1);}
019C ;
019C ; #define KEY0 (PINB&(1<<PB0))
019C ; #define KEY1 (PINB&(1<<PB1))
019C ; #define KEY_INIT() {PORTB|=((1<<PB0)|(1<<PB1));DDRB&=~((1<<PB0)|(1<<PB1));}
019C ;
019C ; /*
019C ; *************************************************************
019C ; * nRF2401 Configuration *
019C ; * 保存2401 的配置信息 *
019C ; *************************************************************
019C ; */
019C ; /*=====<RF-Configuration-Register 配置信息>=====*/
019C ; //芯片测试用,无需修改
019C ; #define TEST_2 0x8E //MSB D143~D136
019C ; #define TEST_1 0x08 // D135~D128
019C ; #define TEST_0 0x1C // D127~D120
019C ; /* 注意: DATAx_W + ADDRx_W + CRC 的值必须小于256 !
019C ; 单个数据包的大小必须小于32 字节(256 位) */
019C ; #define DATA2_W 0x10 //0x10=2 字节 //频道2 发送/接收数据长度(单位:Bit)
019C ; #define DATA1_W 0xE0 //0x20=28 字节 //频道1 发送/接收数据长度(单位:Bit)
019C ; /* 注意:2401 忽略ADDR 中超过ADDR_W 设定宽度的那些位,同时地址不能全部设置为0 */
019C ; //频道2 接收地址 < - 频道2 未启用
019C ; #define ADDR2_4 0x00
019C ; #define ADDR2_3 0x1c
019C ; #define ADDR2_2 0xcc
019C ; #define ADDR2_1 0xcc
019C ; #define ADDR2_0 0xcc
019C ; //频道 1 接收地址 (当前模块地址) <- 只使用到频道 1
019C ; #define ADDR1_4 0x00
019C ; #define ADDR1_3 0xcc
019C ; #define ADDR1_2 0xcc
019C ; #define ADDR1_1 0xcc
019C ; #define ADDR1_0 0xcc
019C ; #define ADDR_W 0x10 //0x10=2 字节 //发送/接收地址宽度(单位:Bit)
019C ; #define CRC_L 0x1 //CRC 模式 0:8 位 1:16 位
019C ; #define CRC_EN 0x1 //CRC 校验 0:禁用 1:启用
019C ; #define RX2_EN 0x0 //双频道功能 0:禁用 1:启用
019C ; #define CM 0x1 //0:Direct mode 1:ShockBurst mode
019C ; #define RFDR_SB 0x0 //传输速率0:250kbps/1:1Mbps(250kbps比1Mbps传输距离更远)
019C ; #define XO_F 0x3 //16M //nRF2401 晶振频率(具体设置见下图)
019C ; #define RF_PWR 0x3 //信号发射功率(具体设置见下图)
019C ; #define RF_CH 0x2 //Channel RF 频率设置
019C ; //Channel = 2400MHz + RF_CH * 1.0MHz
019C ; #define RXEN_NRF 0x0 //0:Tx 1:Rx
019C ; //程序会通过 SetTxMode/SetRxMode 重新设置此项参数
019C ; //<将设置信息组合成每个字节的数据信息,此区域无需修改>
019C ; #define RFConfig_Bit0 TEST_2
019C ; #define RFConfig_Bit1 TEST_1
019C ; #define RFConfig_Bit2 TEST_0
019C ; #define RFConfig_Bit3 DATA2_W
019C ; #define RFConfig_Bit4 DATA1_W
019C ; #define RFConfig_Bit5 ADDR2_4
019C ; #define RFConfig_Bit6 ADDR2_3
019C ; #define RFConfig_Bit7 ADDR2_2
019C ; #define RFConfig_Bit8 ADDR2_1
019C ; #define RFConfig_Bit9 ADDR2_0
019C ; #define RFConfig_Bit10 ADDR1_4
019C ; #define RFConfig_Bit11 ADDR1_3
019C ; #define RFConfig_Bit12 ADDR1_2
019C ; #define RFConfig_Bit13 ADDR1_1
019C ; #define RFConfig_Bit14 ADDR1_0
019C ; #define RFConfig_Bit15 (ADDR_W<<2 | CRC_L<<1 | CRC_EN)
019C ; #define RFConfig_Bit16 (RX2_EN<<7 | CM<<6 | RFDR_SB<<5 | XO_F <<2 | RF_PWR)
019C ; #define RFConfig_Bit17 (RF_CH<<1 | RXEN_NRF)
019C ;
019C ; //------------------------------------------------------
019C ; //通过宏定义将 18 字节的寄存器参数按照各个功能分解,以便于参数的调整
019C ; unsigned char /*code*/ nRF2401_Conf[18] =
019C ; {
019C ; RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
019C ; RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9,
019C ; RFConfig_Bit10, RFConfig_Bit11, RFConfig_Bit12, RFConfig_Bit13,
019C ; RFConfig_Bit14, RFConfig_Bit15, RFConfig_Bit16, RFConfig_Bit17
019C ; };
019C ; //------------------------------------------------------------
019C ;
019C ; /*
019C ; *************************************************************
019C ; * nRF2401 Tx/Rx functions
019C ; *
019C ; *
019C ; * void Delay100(void);
019C ; * void Config2401(void); //配置2401,写入初始化设置
019C ; * void SetTxMode(void); //设置为发送模式
019C ; * void SetRxMode(void); //设置为接收模式
019C ; * void nRF2401_TxPacket(unsigned char TxBuf[]);
019C ; * //发送TxBuf[] 内的数据 长度由 DATA1_W 决定
019C ; * unsigned char nRF2401_RxPacket(unsigned char *RxBuf);
019C ; * //检查是否有数据需要接受 如果有,则保存至RxBuf[]
019C ; * //返回值 0:没有接收到数据 1:接收到数据
019C ; *************************************************************
019C ; */
019C ; //16M 晶振 600us 左右
019C ; /*void Delay100(void)
019C ; {
019C ; unsigned int i;
019C ; for (i=0;i<100;i++);
019C ; }*/
019C ;
019C ; /*==================================================
019C ; nRF2401 设置配置寄存器时序
019C ; =====================================================*/
019C ; //bdata
019C ; unsigned char DATA_BUF; //用于ByteRead和ByteWrite函数
019C ; #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
019C ; #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
019C ;
019C ;
019C ; void delay_1us(void) //1us延时函数
019C ; {
019C .dbline 382
019C ; asm("nop");
019C 0000 nop
019E .dbline -2
019E L33:
019E .dbline 0 ; func end
019E 0895 ret
01A0 .dbend
01A0 .dbfunc e delay_nus _delay_nus fV
01A0 ; i -> R20,R21
01A0 ; n -> R22,R23
.even
01A0 _delay_nus::
01A0 0E940000 xcall push_gset2
01A4 B801 movw R22,R16
01A6 .dbline -1
01A6 .dbline 386
01A6 ; }
01A6 ;
01A6 ; void delay_nus(unsigned int n) //N us延时函数
01A6 ; {
01A6 .dbline 387
01A6 ; unsigned int i=0;
01A6 4427 clr R20
01A8 5527 clr R21
01AA .dbline 388
01AA ; for (i=0;i<n;i++)
01AA 03C0 xjmp L38
01AC L35:
01AC .dbline 389
01AC F7DF xcall _delay_1us
01AE L36:
01AE .dbline 388
01AE 4F5F subi R20,255 ; offset = 1
01B0 5F4F sbci R21,255
01B2 L38:
01B2 .dbline 388
01B2 4617 cp R20,R22
01B4 5707 cpc R21,R23
01B6 D0F3 brlo L35
01B8 .dbline -2
01B8 L34:
01B8 0E940000 xcall pop_gset2
01BC .dbline 0 ; func end
01BC 0895 ret
01BE .dbsym r i 20 i
01BE .dbsym r n 22 i
01BE .dbend
01BE .dbfunc e delay_1ms _delay_1ms fV
01BE ; i -> R16,R17
.even
01BE _delay_1ms::
01BE .dbline -1
01BE .dbline 393
01BE ; delay_1us();
01BE ; }
01BE ;
01BE ; void delay_1ms(void) //1ms延时函数
01BE ; {
01BE .dbline 395
01BE 0027 clr R16
01C0 1127 clr R17
01C2 02C0 xjmp L43
01C4 L40:
01C4 .dbline 395
01C4 L41:
01C4 .dbline 395
01C4 0F5F subi R16,255 ; offset = 1
01C6 1F4F sbci R17,255
01C8 L43:
01C8 .dbline 395
01C8 ; unsigned int i;
01C8 ; for (i=0;i<1140;i++);
01C8 0437 cpi R16,116
01CA E4E0 ldi R30,4
01CC 1E07 cpc R17,R30
01CE D0F3 brlo L40
01D0 .dbline -2
01D0 L39:
01D0 .dbline 0 ; func end
01D0 0895 ret
01D2 .dbsym r i 16 i
01D2 .dbend
01D2 .dbfunc e delay_nms _delay_nms fV
01D2 ; i -> R20,R21
01D2 ; n -> R22,R23
.even
01D2 _delay_nms::
01D2 0E940000 xcall push_gset2
01D6 B801 movw R22,R16
01D8 .dbline -1
01D8 .dbline 399
01D8 ; }
01D8 ;
01D8 ; void delay_nms(unsigned int n) //N ms延时函数
01D8 ; {
01D8 .dbline 400
01D8 ; unsigned int i=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -