📄 nrf.lis
字号:
.module nrf.c
.area data(ram, con, rel)
0000 _broad_addr::
0000 .blkb 2
.area idata
0000 FFFF .byte 255,255
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 FFFF .byte 255,255
.area data(ram, con, rel)
0004 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\nrf.c
0004 .dbsym e broad_addr _broad_addr A[4:4]c
.area text(rom, con, rel)
0000 .dbfile E:\心电监护系统\测试程序\第一阶段\无线测试\发送端\nrf.c
0000 .dbfunc e init_905 _init_905 fV
.even
0000 _init_905::
0000 .dbline -1
0000 .dbline 14
0000 ;
0000 ; #include "spi.h"
0000 ; #include "common.h"
0000 ; #include "nrf.h"
0000 ;
0000 ; unsigned char broad_addr[4]={0xff,0xff,0xff,0xff}; //4字节的广播地址
0000 ; unsigned char data_conf[10];
0000 ; /**************************************************
0000 ; 函数功能:初始化nRF905,
0000 ; 输入参数:无
0000 ; 输出参数:无
0000 ; **************************************************/
0000 ; void init_905(void)
0000 ; {
0000 .dbline 15
0000 ; DDRE|=(1<<CSN)|(1<<PWR_UP)|(1<<TX_EN);//设置端口E的1,2,3引脚为输出引脚
0000 82B1 in R24,0x2
0002 8E60 ori R24,14
0004 82B9 out 0x2,R24
0006 .dbline 16
0006 ; DDRB|=(1<<MOSI)|(1<<SCK)|(1<<TRX_CE);//设置MOSI、SCK和SS 为输出,其他为输入
0006 87B3 in R24,0x17
0008 8760 ori R24,7
000A 87BB out 0x17,R24
000C .dbline 18
000C ;
000C ; PORTE |=(1<<PWR_UP); //905上电
000C 1A9A sbi 0x3,2
000E .dbline 19
000E ; PORTE |=(1<<CSN); //CSN引脚置位,停止SPI操作,
000E 199A sbi 0x3,1
0010 .dbline 21
0010 ;
0010 ; PORTB |=1<<SCK; // Spi clock line init high
0010 C19A sbi 0x18,1
0012 .dbline 23
0012 ;
0012 ; PORTE &=~(1<<TX_EN);
0012 1B98 cbi 0x3,3
0014 .dbline 24
0014 ; PORTB &=~(1<<TRX_CE); // Set nRF905 in standby mode
0014 C098 cbi 0x18,0
0016 .dbline 26
0016 ;
0016 ; Delay3ms();
0016 0E940000 xcall _Delay3ms
001A .dbline -2
001A L1:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbend
001C .dbfunc e set_confword _set_confword fV
001C ; r_addr -> R16,R17
.even
001C _set_confword::
001C .dbline -1
001C .dbline 35
001C ; }
001C ;
001C ; /**************************************************
001C ; 函数功能:设置配置字
001C ; 输入参数:905的接收地址
001C ; 输出参数:无
001C ; **************************************************/
001C ; void set_confword(unsigned char*r_addr)
001C ; {
001C .dbline 37
001C ;
001C ; data_conf[0]=0x01; //
001C 81E0 ldi R24,1
001E 80930000 sts _data_conf,R24
0022 .dbline 38
0022 ; data_conf[1]=0x0c; //不重发数据,接收模式为正常模式,输出功率为10dB("11"),工作在433MHz
0022 8CE0 ldi R24,12
0024 80930100 sts _data_conf+1,R24
0028 .dbline 39
0028 ; data_conf[2]=0x44; //4字节的接收地址和发送地址
0028 84E4 ldi R24,68
002A 80930200 sts _data_conf+2,R24
002E .dbline 41
002E ;
002E ; data_conf[3]=PACKAGE_LENGTH; //RX有效数据长度
002E 85E1 ldi R24,21
0030 80930300 sts _data_conf+3,R24
0034 .dbline 42
0034 ; data_conf[4]=PACKAGE_LENGTH; //TX有效数据长度
0034 80930400 sts _data_conf+4,R24
0038 .dbline 44
0038 ;
0038 ; data_conf[5]=r_addr[0]; //5~8为RX地址
0038 F801 movw R30,R16
003A 2080 ldd R2,z+0
003C 20920500 sts _data_conf+5,R2
0040 .dbline 45
0040 ; data_conf[6]=r_addr[1];
0040 2180 ldd R2,z+1
0042 20920600 sts _data_conf+6,R2
0046 .dbline 46
0046 ; data_conf[7]=r_addr[2];
0046 F801 movw R30,R16
0048 2280 ldd R2,z+2
004A 20920700 sts _data_conf+7,R2
004E .dbline 47
004E ; data_conf[8]=r_addr[3];
004E F801 movw R30,R16
0050 2380 ldd R2,z+3
0052 20920800 sts _data_conf+8,R2
0056 .dbline 49
0056 ;
0056 ; data_conf[9]=0xd8;
0056 88ED ldi R24,216
0058 80930900 sts _data_conf+9,R24
005C .dbline -2
005C L2:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r r_addr 16 pc
005E .dbend
005E .dbfunc e send_conf _send_conf fV
005E ; i -> R20
.even
005E _send_conf::
005E 0E940000 xcall push_gset1
0062 .dbline -1
0062 .dbline 59
0062 ;
0062 ; }
0062 ;
0062 ; /************************************************************
0062 ; 函数功能:发送配置字 ,通过SPI口把设定的配置寄存器的值写入到905
0062 ; 输入参数:无
0062 ; 输出参数:无
0062 ; *************************************************************/
0062 ; void send_conf(void)
0062 ; {
0062 .dbline 62
0062 ; unsigned char i;
0062 ;
0062 ; PORTE &=~(1<<CSN); // Spi enable for write a spi command
0062 1998 cbi 0x3,1
0064 .dbline 63
0064 ; SpiWrite(WC); // Write config command写放配置命令
0064 0027 clr R16
0066 0E940000 xcall _SpiWrite
006A .dbline 65
006A ;
006A ; for (i=0;i<10;i++) // Write configration words 写放配置字
006A 4427 clr R20
006C 0AC0 xjmp L16
006E L13:
006E .dbline 66
006E .dbline 67
006E 80E0 ldi R24,<_data_conf
0070 90E0 ldi R25,>_data_conf
0072 E42F mov R30,R20
0074 FF27 clr R31
0076 E80F add R30,R24
0078 F91F adc R31,R25
007A 0081 ldd R16,z+0
007C 0E940000 xcall _SpiWrite
0080 .dbline 68
0080 L14:
0080 .dbline 65
0080 4395 inc R20
0082 L16:
0082 .dbline 65
0082 4A30 cpi R20,10
0084 A0F3 brlo L13
0086 .dbline 70
0086 ; {
0086 ; SpiWrite(data_conf[i]);
0086 ; }
0086 ;
0086 ; PORTE |=(1<<CSN); // Disable Spi
0086 199A sbi 0x3,1
0088 .dbline -2
0088 L12:
0088 0E940000 xcall pop_gset1
008C .dbline 0 ; func end
008C 0895 ret
008E .dbsym r i 20 c
008E .dbend
008E .dbfunc e set_Tmode _set_Tmode fV
.even
008E _set_Tmode::
008E .dbline -1
008E .dbline 79
008E ; }
008E ;
008E ; /***************************************************************
008E ; 函数功能:把905配置成发送模式
008E ; 输入参数:无
008E ; 输出参数:无
008E ; ***************************************************************/
008E ; void set_Tmode(void)
008E ; {
008E .dbline 80
008E ; PORTE |=(1<<PWR_UP); //905上电
008E 1A9A sbi 0x3,2
0090 .dbline 81
0090 ; PORTE |=(1<<TX_EN);
0090 1B9A sbi 0x3,3
0092 .dbline 82
0092 ; PORTB &=~(1<<TRX_CE);
0092 C098 cbi 0x18,0
0094 .dbline 83
0094 ; Delay650us(); // delay for mode change(>=650us)
0094 0E940000 xcall _Delay650us
0098 .dbline -2
0098 L17:
0098 .dbline 0 ; func end
0098 0895 ret
009A .dbend
009A .dbfunc e set_Rmode _set_Rmode fV
.even
009A _set_Rmode::
009A .dbline -1
009A .dbline 92
009A ; }
009A ;
009A ; /***************************************************************
009A ; 函数功能:把905配置成接收模式
009A ; 输入参数:无
009A ; 输出参数:无
009A ; ***************************************************************/
009A ; void set_Rmode(void)
009A ; {
009A .dbline 93
009A ; PORTE |=(1<<PWR_UP); //905上电
009A 1A9A sbi 0x3,2
009C .dbline 94
009C ; PORTE &=~(1<<TX_EN);
009C 1B98 cbi 0x3,3
009E .dbline 95
009E ; PORTB |=(1<<TRX_CE);
009E C09A sbi 0x18,0
00A0 .dbline 96
00A0 ; Delay650us(); // delay for mode change(>=650us)
00A0 0E940000 xcall _Delay650us
00A4 .dbline -2
00A4 L18:
00A4 .dbline 0 ; func end
00A4 0895 ret
00A6 .dbend
00A6 .dbfunc e set_Powerdownmode _set_Powerdownmode fV
.even
00A6 _set_Powerdownmode::
00A6 .dbline -1
00A6 .dbline 105
00A6 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -