📄 nrf905_send.lst
字号:
__start:
__text_start:
00E2 E5CF LDI R28,0x5F
00E3 E0D4 LDI R29,4
00E4 BFCD OUT 0x3D,R28
00E5 BFDE OUT 0x3E,R29
00E6 51C0 SUBI R28,0x10
00E7 40D0 SBCI R29,0
00E8 EA0A LDI R16,0xAA
00E9 8308 STD Y+0,R16
00EA 2400 CLR R0
00EB EFEB LDI R30,0xFB
00EC E0F0 LDI R31,0
00ED E011 LDI R17,1
00EE 36E8 CPI R30,0x68
00EF 07F1 CPC R31,R17
00F0 F011 BEQ 0x00F3
00F1 9201 ST R0,Z+
00F2 CFFB RJMP 0x00EE
00F3 8300 STD Z+0,R16
00F4 E2E9 LDI R30,0x29
00F5 E0F1 LDI R31,1
00F6 E6A0 LDI R26,0x60
00F7 E0B0 LDI R27,0
00F8 E011 LDI R17,1
00F9 3CE4 CPI R30,0xC4
00FA 07F1 CPC R31,R17
00FB F021 BEQ 0x0100
00FC 95C8 LPM
00FD 9631 ADIW R30,1
00FE 920D ST R0,X+
00FF CFF9 RJMP 0x00F9
0100 D033 RCALL _main
_exit:
0101 CFFF RJMP _exit
FILE: E:\公司用\atmega8l\final\nrf905_send1\main.c
(0001) //ICC-AVR application builder : 2006-4-4 11:28:26
(0002) // Target : M16 PTR8000模块简单测试
(0003) // Crystal: 4MHz(11.059Mhz)
(0004)
(0005) //最关键的是SPI的初始化,MSB首位和极性方式00,极性方式错误,数据则不正确
(0006)
(0007) #include "confg.h"
(0008)
(0009)
(0010) #define MASTER //编译控制是主机还是从机
(0011)
(0012)
(0013) void SystemIni(void);
(0014)
(0015) void port_init1(void)
(0016) {
(0017) PORTB = 0xFe;
_port_init1:
0102 EF8E LDI R24,0xFE
0103 BB88 OUT 0x18,R24
(0018) DDRB = 0x00;
0104 2422 CLR R2
0105 BA27 OUT 0x17,R2
(0019) PORTC = 0x00; //m103 output only
0106 BA25 OUT 0x15,R2
(0020) DDRC = 0x00;
0107 BA24 OUT 0x14,R2
(0021) PORTD = 0xFF;
0108 EF8F LDI R24,0xFF
0109 BB82 OUT 0x12,R24
(0022) DDRD = 0x00;
010A BA21 OUT 0x11,R2
(0023) }
010B 9508 RET
(0024)
(0025) void port_init2(void)
(0026) {
(0027)
(0028) PORTB = 0xD7;
_port_init2:
010C ED87 LDI R24,0xD7
010D BB88 OUT 0x18,R24
(0029) DDRB = 0x2C;
010E E28C LDI R24,0x2C
010F BB87 OUT 0x17,R24
(0030) PORTC = 0x00; //m103 output only
0110 2422 CLR R2
0111 BA25 OUT 0x15,R2
(0031) DDRC = 0x00;
0112 BA24 OUT 0x14,R2
(0032) PORTD = 0x1f;
0113 E18F LDI R24,0x1F
0114 BB82 OUT 0x12,R24
(0033) DDRD = 0xe0;
0115 EE80 LDI R24,0xE0
0116 BB81 OUT 0x11,R24
(0034) }
0117 9508 RET
(0035)
(0036) //SPI initialize
(0037) void spi_init(void)
(0038) {uchar temp;
(0039)
(0040) //SPCR = 0xD1; //SPI中断允许,SPI允许,主机模式,MSB,极性方式00,1/16系统时钟速率
(0041) SPCR = 0x51; //不使用SPI中断,其它同上
_spi_init:
temp --> R16
0118 E581 LDI R24,0x51
0119 B98D OUT 0x0D,R24
(0042) SPSR = 0x00; //setup SPI
011A 2422 CLR R2
011B B82E OUT 0x0E,R2
(0043)
(0044) temp = SPSR; //!!!
011C B10E IN R16,0x0E
(0045) temp = SPDR; //清空SPI,和中断标志,使SPI空闲
011D B10F IN R16,0x0F
(0046) }
011E 9508 RET
(0047)
(0048)
(0049)
(0050)
(0051) //call this routine to initialize all peripherals
(0052) void init_devices(void)
(0053) {
(0054) //stop errant interrupts until set up
(0055) CLI(); //disable all interrupts
_init_devices:
011F 94F8 BCLR 7
(0056) port_init1();
0120 DFE1 RCALL _port_init1
(0057) // spi_init();
(0058) uart_init();
0121 D184 RCALL _uart_init
(0059)
(0060) // MCUCR = 0x0c;
(0061) //GICR|= 0x80;//enable INT1 interrupt
(0062)
(0063) GIFR = 0xc0;// 清除INT0、INT1 中断标志位
0122 EC80 LDI R24,0xC0
0123 BF8A OUT 0x3A,R24
(0064) SEI(); //re-enable interrupts
0124 9478 BSET 7
(0065) //all peripherals are now initialized
(0066) }
0125 9508 RET
(0067)
(0068) void init_devices2(void)
(0069) {
(0070) //stop errant interrupts until set up
(0071) CLI(); //disable all interrupts
_init_devices2:
0126 94F8 BCLR 7
(0072) port_init2();
0127 DFE4 RCALL _port_init2
(0073) spi_init();
0128 DFEF RCALL _spi_init
(0074) //uart_init();
(0075)
(0076) //MCUCR = 0x00;
(0077) //GICR = 0x00;
(0078)
(0079) SEI(); //re-enable interrupts
0129 9478 BSET 7
(0080) //all peripherals are now initialized
(0081) }
012A 9508 RET
(0082)
(0083) void port_init3(void)
(0084) {
(0085) PORTB = 0x00;
_port_init3:
012B 2422 CLR R2
012C BA28 OUT 0x18,R2
(0086) DDRB = 0x00;
012D BA27 OUT 0x17,R2
(0087) //PORTB = 0xD7;
(0088) // DDRB = 0x2C;
(0089) PORTC = 0x00; //m103 output only
012E BA25 OUT 0x15,R2
(0090) DDRC = 0x00;
012F BA24 OUT 0x14,R2
(0091) PORTD = 0x00;
0130 BA22 OUT 0x12,R2
(0092) DDRD = 0x20;
0131 E280 LDI R24,0x20
0132 BB81 OUT 0x11,R24
(0093) }
0133 9508 RET
(0094)
(0095) void main(void)
(0096) {
(0097) uchar *string;
(0098) int i;
(0099) init_devices();
_main:
string --> Y+1
i --> R20
0134 DFEA RCALL _init_devices
(0100) SystemIni();
0135 D038 RCALL _SystemIni
(0101) puts_hh("test start!");
0136 EA03 LDI R16,0xA3
0137 E010 LDI R17,0
0138 D15B RCALL _puts_hh
(0102) init_devices2();
0139 DFEC RCALL _init_devices2
013A C031 RJMP 0x016C
(0103) /*
(0104) // spi_init();
(0105) port_init3();
(0106) //nrf905_Init();
(0107) nrf905_Off();//断开电源
(0108)
(0109) ACSR=0x80; //别忘了关掉模拟比较器的电源哦
(0110) MCUCR=(0<<SM2)|(1<<SM1)|(1<<SM0);//0 1 1 省电模式
(0111) MCUCR|=(1<<SE);//仅在SLEEP 指令的前一条指令置位SE
(0112) while(1){
(0113) asm( "sleep" );}
(0114) //*/
(0115)
(0116) //*
(0117) while(1) {
(0118)
(0119) delay_10ms(150);
013B E906 LDI R16,0x96
013C E010 LDI R17,0
013D D10A RCALL _delay_10ms
(0120) init_devices();
013E DFE0 RCALL _init_devices
(0121) ad_convert();//开始AD转换
013F D537 RCALL _ad_convert
(0122) init_devices2();
0140 DFE5 RCALL _init_devices2
(0123) Read_nrf905Add();//读取nrf905的接受和发送地址
0141 D03F RCALL _Read_nrf905Add
(0124) nrf905_Init();
0142 D07C RCALL _nrf905_Init
(0125) RfSendProc();//发送数据
0143 D0C4 RCALL _RfSendProc
(0126) printf("slave add is %d\r\n",Tx_Buf[0]);
0144 9120011B LDS R18,_Tx_Buf
0146 2733 CLR R19
0147 E901 LDI R16,0x91
0148 E010 LDI R17,0
0149 D8E4 RCALL _printf
(0127) printf("command is %x\r\n",Tx_Buf[1]);
014A 9120011C LDS R18,_Tx_Buf+1
014C 2733 CLR R19
014D E801 LDI R16,0x81
014E E010 LDI R17,0
014F D8DE RCALL _printf
(0128) i=Tx_Buf[2]+(Tx_Buf[3]<<8);
0150 9020011E LDS R2,_Tx_Buf+3
0152 2433 CLR R3
0153 2C32 MOV R3,R2
0154 2422 CLR R2
0155 9140011D LDS R20,_Tx_Buf+2
0157 2755 CLR R21
0158 0D42 ADD R20,R2
0159 1D53 ADC R21,R3
(0129) printf("temperlature is %d\r\n",i);
015A 019A MOVW R18,R20
015B E60C LDI R16,0x6C
015C E010 LDI R17,0
015D D8D0 RCALL _printf
(0130) i=Tx_Buf[4]+(Tx_Buf[5]<<8);
015E 90200120 LDS R2,0x120
0160 2433 CLR R3
0161 2C32 MOV R3,R2
0162 2422 CLR R2
0163 9140011F LDS R20,0x11F
0165 2755 CLR R21
0166 0D42 ADD R20,R2
0167 1D53 ADC R21,R3
(0131) printf("vcc is %d\r\n",i);
0168 019A MOVW R18,R20
0169 E600 LDI R16,0x60
016A E010 LDI R17,0
016B D8C2 RCALL _printf
016C CFCE RJMP 0x013B
(0132)
(0133) }
(0134) //*/
(0135)
(0136) }
016D 9508 RET
(0137)
(0138)
(0139) void SystemIni()
(0140) {
(0141) delay_10ms(20);
_SystemIni:
016E E104 LDI R16,0x14
016F E010 LDI R17,0
(0142) }
0170 C0D7 RJMP _delay_10ms
FILE: E:\公司用\atmega8l\final\nrf905_send1\nrf905.c
(0001) #include "confg.h"
(0002) uchar Tx_Buf[SIZE];
(0003) uchar Rx_Buf[SIZE];
(0004)
(0005) //extern void delay_us(uint us);
(0006) uchar nrf905_SpiRW(uchar val);
(0007) void nrf905_SpiTest(void);
(0008)
(0009) #define SIZE 32
(0010)
(0011) //unsigned long TX_ADDRESS=0x11111111;
(0012) /*-------------------------------------------------------------------------------------------
(0013) nrf905配置寄存器宏定义 author:HotPower
(0014) nrf905配置寄存器(10Byte)
(0015) 工作频率f=(422.4+CH_NO/10)*(1+HFREQ_PLL)MHz
(0016) -------------------------------------------------------------------------------------------*/
(0017) #define RX_ADDRESS 0x11111101 //接收有效地址(本方)
(0018) #define TX_ADDRESS 0x11111111 //发送有效地址(对方)
(0019)
(0020) #define CH_NO_FREQ_422_4MHz 0x000 //工作频率422.4MHz(433MHz频段最低频率)
(0021) #define CH_NO_FREQ_422_5MHz 0x001 //工作频率422.5MHz
(0022) #define CH_NO_FREQ_425_0MHz 0x01a //工作频率425.0MHz
(0023) #define CH_NO_FREQ_427_5MHz 0x033 //工作频率427.5MHz
(0024)
(0025) #define CH_NO_FREQ_430_0MHz 0x04c //工作频率430.0MHz
(0026) #define CH_NO_FREQ_433_0MHz 0x06a //工作频率433.0MHz(433MHz频段基准频率)
(0027) #define CH_NO_FREQ_433_1MHz 0x06b //工作频率433.1MHz
(0028) #define CH_NO_FREQ_433_2MHz 0x06c //工作频率433.2MHz
(0029) #define CH_NO_FREQ_434_7MHz 0x07b //工作频率434.7MHz
(0030) #define CH_NO_FREQ_473_5MHz 0x1ff //工作频率473.5MHz(433MHz频段最高频率)
(0031)
(0032) #define CH_NO_FREQ_844_8MHz 0x000 //工作频率844.8MHz(868MHz频段最低频率)
(0033)
(0034) #define CH_NO_FREQ_862_0MHz 0x056 //工作频率862.0MHz
(0035) #define CH_NO_FREQ_868_0MHz 0x074 //工作频率868.0MHz(868MHz频段基准频率)
(0036) #define CH_NO_FREQ_868_2MHz 0x075 //工作频率868.2MHz
(0037) #define CH_NO_FREQ_868_4MHz 0x076 //工作频率868.4MHz
(0038) #define CH_NO_FREQ_869_8MHz 0x07d //工作频率869.8MHz
(0039) #define CH_NO_FREQ_895_8MHz 0x0ff //工作频率895.8MHz
(0040) #define CH_NO_FREQ_896_0MHz 0x100 //工作频率896.0MHz
(0041) #define CH_NO_FREQ_900_0MHz 0x114 //工作频率900.0MHz
(0042) #define CH_NO_FREQ_902_2MHz 0x11f //工作频率902.2MHz
(0043) #define CH_NO_FREQ_902_4MHz 0x120 //工作频率902.4MHz
(0044) #define CH_NO_FREQ_915_0MHz 0x15f //工作频率915.0MHz(915MHz频段基准频率)
(0045) #define CH_NO_FREQ_927_8MHz 0x19f //工作频率927.8MHz
(0046)
(0047) #define CH_NO_FREQ_947_0MHz 0x1ff //工作频率947.0MHz(915MHz频段最高频率)
(0048)
(0049) #define CH_NO_FREQ CH_NO_FREQ_430_0MHz //工作频率433.0MHz
(0050)
(0051)
(0052) #define CH_NO_BYTE CH_NO_FREQ & 0xff //工作频率低8位 Byte0 01101100
(0053)
(0054) #define AUTO_RETRAN 0x20 //重发数据包 Byte1.5 0
(0055) #define RX_RED_PWR 0x10 //接收低功耗模式 Byte1.4 0
(0056) #define PA_PWR__10dBm 0x00 //输出功率-10dBm Byte1.3~2 00
(0057) #define PA_PWR_2dBm 0x04 //输出功率+2dBm Byte1.3~2
(0058) #define PA_PWR_6dBm 0x08 //输出功率+6dBm Byte1.3~2
(0059) #define PA_PWR_10dBm 0x0c //输出功率+10dBm Byte1.3~2
(0060) #define HFREQ_PLL_433MHz 0x00 //工作在433MHz频段 Byte1.1 0
(0061) #define HFREQ_PLL_868MHz 0x02 //工作在868MHz频段 Byte1.1
(0062) #define HFREQ_PLL_915MHz 0x02 //工作在915MHz频段 Byte1.1
(0063) #define CH_NO_BIT8 CH_NO_FREQ >> 8 //工作频率第9位 Byte1.0 0
(0064)
(0065) #define TX_AFW_1BYTE 1 * 16 //发送地址宽度1字节 Byte2.7~4
(0066) #define TX_AFW_2BYTE 2 * 16 //发送地址宽度2字节 Byte2.7~4
(0067) #define TX_AFW_3BYTE 3 * 16 //发送地址宽度3字节 Byte2.7~4
(0068) #define TX_AFW_4BYTE 4 * 16 //发送地址宽度4字节 Byte2.7~4 100
(0069) #define RX_AFW_1BYTE 1 //接收地址宽度1字节 Byte2.3~0
(0070) #define RX_AFW_2BYTE 2 //接收地址宽度2字节 Byte2.3~0
(0071) #define RX_AFW_3BYTE 3 //接收地址宽度3字节 Byte2.3~0
(0072) #define RX_AFW_4BYTE 4 //接收地址宽度4字节 Byte2.3~0 100
(0073)
(0074) #define RX_PW_1BYTE 1 //接收数据宽度1字节 Byte3.5~0
(0075) #define RX_PW_32BYTE 32 //接收数据宽度32字节 Byte3.5~0 00100000
(0076) #define TX_PW_1BYTE 1 //发送数据宽度1字节 Byte4.5~0
(0077) #define TX_PW_32BYTE 32 //发送数据宽度32字节 Byte4.5~0 00100000
(0078)
(0079) #define RX_ADDRESS_0 RX_ADDRESS >> 24 //接收有效地址第1字节 Byte5 11100111
(0080) #define RX_ADDRESS_1 (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6 11100111
(0081) #define RX_ADDRESS_2 (RX_ADDRESS >> 8) & 0xff //接收有效地址第3字节 Byte7 11100111
(0082) #define RX_ADDRESS_3 RX_ADDRESS & 0xff //接收有效地址第4字节 Byte8 11100111
(0083)
(0084) #define CRC_MODE_16BIT 0x80 //CRC16模式 Byte9.7 1
(0085) #define CRC_MODE_8BIT 0x00 //CRC8模式 Byte9.7
(0086) #define CRC_EN 0x40 //CRC使能 Byte9.6 1
(0087) #define CRC16_EN 0xc0 //CRC16模式使能 Byte9.7~6 11
(0088) #define CRC8_EN 0x40 //CRC8模式使能 Byte9.7~6
(0089) #define XOF_20MHz 0x20 //晶体振荡器频率20MHz Byte9.5~3
(0090) #define XOF_16MHz 0x18 //晶体振荡器频率16MHz Byte9.5~3 100
(0091) #define XOF_12MHz 0x10 //晶体振荡器频率12MHz Byte9.5~3
(0092) #define XOF_8MHz 0x08 //晶体振荡器频率8MHz Byte9.5~3
(0093) #define XOF_4MHz 0x00 //晶体振荡器频率4MHz Byte9.5~3
(0094) #define UP_CLK_EN 0x40 //输出时钟使能 Byte9.2 1
(0095) #define UP_CLK_FREQ_500kHz 0x03 //输出时钟频率500kHz Byte9.1~0 11
(0096) #define UP_CLK_FREQ_1MHz 0x02 //输出时钟频率1MHz Byte9.1~0
(0097) #define UP_CLK_FREQ_2MHz 0x01 //输出时钟频率2MHz Byte9.1~0
(0098) #define UP_CLK_FREQ_4MHz 0x00 //输出时钟频率4MHz Byte9.1~0
(0099)
(0100) #define UP_CLK_EN_500kHz 0x43 //输出时钟频率500kHz Byte9.2~0 111
(0101) #define UP_CLK_EN_1MHz 0x42 //输出时钟频率1MHz Byte9.2~0
(0102) #define UP_CLK_EN_2MHz 0x41 //输出时钟频率2MHz Byte9.2~0
(0103) #define UP_CLK_EN_4MHz 0x40 //输出时钟频率4MHz Byte9.2~0
(0104)
(0105) #define TX_ADDRESS_0 TX_ADDRESS >> 24 //发送有效地址第1字节
(0106) #define TX_ADDRESS_1 (TX_ADDRESS >> 16) & 0xff //发送有效地址第2字节
(0107) #define TX_ADDRESS_2 (TX_ADDRESS >> 8) & 0xff //发送有效地址第3字节
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -