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

📄 nrf905_send.lst

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -