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

📄 905receive.lst

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0030) 
(0031) #define CH_NO_FREQ_422_4MHz  0x000                     //工作频率422.4MHz(433MHz频段最低频率)
(0032) #define CH_NO_FREQ_422_5MHz  0x001                     //工作频率422.5MHz
(0033) #define CH_NO_FREQ_425_0MHz  0x01a                     //工作频率425.0MHz
(0034) #define CH_NO_FREQ_427_5MHz  0x033                     //工作频率427.5MHz
(0035) 
(0036) #define CH_NO_FREQ_430_0MHz  0x04c                     //工作频率430.0MHz
(0037) #define CH_NO_FREQ_433_0MHz  0x06a                     //工作频率433.0MHz(433MHz频段基准频率)
(0038) #define CH_NO_FREQ_433_1MHz  0x06b                     //工作频率433.1MHz
(0039) #define CH_NO_FREQ_433_2MHz  0x06c                     //工作频率433.2MHz
(0040) #define CH_NO_FREQ_434_7MHz  0x07b                     //工作频率434.7MHz
(0041) #define CH_NO_FREQ_473_5MHz  0x1ff                     //工作频率473.5MHz(433MHz频段最高频率)
(0042) 
(0043) #define CH_NO_FREQ_844_8MHz  0x000                     //工作频率844.8MHz(868MHz频段最低频率)
(0044) 
(0045) #define CH_NO_FREQ_862_0MHz  0x056                     //工作频率862.0MHz
(0046) #define CH_NO_FREQ_868_0MHz  0x074                     //工作频率868.0MHz(868MHz频段基准频率)
(0047) #define CH_NO_FREQ_868_2MHz  0x075                     //工作频率868.2MHz
(0048) #define CH_NO_FREQ_868_4MHz  0x076                     //工作频率868.4MHz
(0049) #define CH_NO_FREQ_869_8MHz  0x07d                     //工作频率869.8MHz
(0050) #define CH_NO_FREQ_895_8MHz  0x0ff                     //工作频率895.8MHz
(0051) #define CH_NO_FREQ_896_0MHz  0x100                     //工作频率896.0MHz
(0052) #define CH_NO_FREQ_900_0MHz  0x114                     //工作频率900.0MHz
(0053) #define CH_NO_FREQ_902_2MHz  0x11f                     //工作频率902.2MHz
(0054) #define CH_NO_FREQ_902_4MHz  0x120                     //工作频率902.4MHz
(0055) #define CH_NO_FREQ_915_0MHz  0x15f                     //工作频率915.0MHz(915MHz频段基准频率)
(0056) #define CH_NO_FREQ_927_8MHz  0x19f                     //工作频率927.8MHz
(0057) 
(0058) #define CH_NO_FREQ_947_0MHz  0x1ff                     //工作频率947.0MHz(915MHz频段最高频率)
(0059) 
(0060) #define CH_NO_FREQ           CH_NO_FREQ_430_0MHz       //工作频率433.0MHz
(0061) 
(0062) 
(0063) #define CH_NO_BYTE           CH_NO_FREQ & 0xff         //工作频率低8位       Byte0       01101100
(0064) 
(0065) #define AUTO_RETRAN          0x20                      //重发数据包          Byte1.5     0
(0066) #define RX_RED_PWR           0x10                      //接收低功耗模式      Byte1.4     0
(0067) #define PA_PWR__10dBm        0x00                      //输出功率-10dBm      Byte1.3~2   00
(0068) #define PA_PWR_2dBm          0x04                      //输出功率+2dBm       Byte1.3~2
(0069) #define PA_PWR_6dBm          0x08                      //输出功率+6dBm       Byte1.3~2
(0070) #define PA_PWR_10dBm         0x0c                      //输出功率+10dBm      Byte1.3~2   
(0071) #define HFREQ_PLL_433MHz     0x00                      //工作在433MHz频段    Byte1.1     0
(0072) #define HFREQ_PLL_868MHz     0x02                      //工作在868MHz频段    Byte1.1
(0073) #define HFREQ_PLL_915MHz     0x02                      //工作在915MHz频段    Byte1.1
(0074) #define CH_NO_BIT8           CH_NO_FREQ >> 8           //工作频率第9位       Byte1.0     0
(0075) 
(0076) #define TX_AFW_1BYTE         1 * 16                    //发送地址宽度1字节   Byte2.7~4
(0077) #define TX_AFW_2BYTE         2 * 16                    //发送地址宽度2字节   Byte2.7~4
(0078) #define TX_AFW_3BYTE         3 * 16                    //发送地址宽度3字节   Byte2.7~4
(0079) #define TX_AFW_4BYTE         4 * 16                    //发送地址宽度4字节   Byte2.7~4   100
(0080) #define RX_AFW_1BYTE         1                         //接收地址宽度1字节   Byte2.3~0
(0081) #define RX_AFW_2BYTE         2                         //接收地址宽度2字节   Byte2.3~0
(0082) #define RX_AFW_3BYTE         3                         //接收地址宽度3字节   Byte2.3~0
(0083) #define RX_AFW_4BYTE         4                         //接收地址宽度4字节   Byte2.3~0   100
(0084) 
(0085) #define RX_PW_1BYTE          1                         //接收数据宽度1字节   Byte3.5~0
(0086) #define RX_PW_32BYTE         32                        //接收数据宽度32字节  Byte3.5~0   00100000
(0087) #define TX_PW_1BYTE          1                         //发送数据宽度1字节   Byte4.5~0 
(0088) #define TX_PW_32BYTE         32                        //发送数据宽度32字节  Byte4.5~0   00100000
(0089) 
(0090) #define RX_ADDRESS_0         RX_ADDRESS >> 24          //接收有效地址第1字节 Byte5       11100111
(0091) #define RX_ADDRESS_1         (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6       11100111 
(0092) #define RX_ADDRESS_2         (RX_ADDRESS >> 8) & 0xff  //接收有效地址第3字节 Byte7       11100111
(0093) #define RX_ADDRESS_3         RX_ADDRESS & 0xff         //接收有效地址第4字节 Byte8       11100111
(0094)        
(0095) #define CRC_MODE_16BIT       0x80                      //CRC16模式           Byte9.7     1
(0096) #define CRC_MODE_8BIT        0x00                      //CRC8模式            Byte9.7     
(0097) #define CRC_EN               0x40                      //CRC使能             Byte9.6     1
(0098) #define CRC16_EN             0xc0                      //CRC16模式使能       Byte9.7~6   11
(0099) #define CRC8_EN              0x40                      //CRC8模式使能        Byte9.7~6
(0100) #define XOF_20MHz            0x20                      //晶体振荡器频率20MHz Byte9.5~3
(0101) #define XOF_16MHz            0x18                      //晶体振荡器频率16MHz Byte9.5~3   100
(0102) #define XOF_12MHz            0x10                      //晶体振荡器频率12MHz Byte9.5~3
(0103) #define XOF_8MHz             0x08                      //晶体振荡器频率8MHz  Byte9.5~3
(0104) #define XOF_4MHz             0x00                      //晶体振荡器频率4MHz  Byte9.5~3
(0105) #define UP_CLK_EN            0x40                      //输出时钟使能        Byte9.2     1
(0106) #define UP_CLK_FREQ_500kHz   0x03                      //输出时钟频率500kHz  Byte9.1~0   11
(0107) #define UP_CLK_FREQ_1MHz     0x02                      //输出时钟频率1MHz    Byte9.1~0
(0108) #define UP_CLK_FREQ_2MHz     0x01                      //输出时钟频率2MHz    Byte9.1~0
(0109) #define UP_CLK_FREQ_4MHz     0x00                      //输出时钟频率4MHz    Byte9.1~0
(0110) 
(0111) #define UP_CLK_EN_500kHz     0x43                      //输出时钟频率500kHz  Byte9.2~0   111
(0112) #define UP_CLK_EN_1MHz       0x42                      //输出时钟频率1MHz    Byte9.2~0
(0113) #define UP_CLK_EN_2MHz       0x41                      //输出时钟频率2MHz    Byte9.2~0
(0114) #define UP_CLK_EN_4MHz       0x40                      //输出时钟频率4MHz    Byte9.2~0
(0115) 
(0116) #define TX_ADDRESS_0         TX_ADDRESS >> 24          //发送有效地址第1字节
(0117) #define TX_ADDRESS_1         (TX_ADDRESS >> 16) & 0xff //发送有效地址第2字节
(0118) #define TX_ADDRESS_2         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第3字节
(0119) #define TX_ADDRESS_3         TX_ADDRESS & 0xff         //发送有效地址第4字节
(0120) 
(0121) /*-----------------------------------------------
(0122)         nrf905命令控制字 author:HotPower
(0123) ------------------------------------------------*/
(0124) #define WC        0x00            // Write configuration register command
(0125) #define RC        0x10            // Read  configuration register command
(0126) #define WTP       0x20            // Write TX Payload  command
(0127) #define RTP       0x21            // Read  TX Payload  command
(0128) #define WTA       0x22            // Write TX Address  command
(0129) #define RTA       0x23            // Read  TX Address  command
(0130) #define RRP       0x24            // Read  RX Payload  command
(0131)  
(0132) void clear_Tx_Buf(void) //清空发送缓冲
(0133)   {
(0134)   int i;
(0135)   for (i=0;i<SIZE;i++) 
_clear_Tx_Buf:
  i                    --> R16
    019B 2700      CLR	R16
    019C 2711      CLR	R17
(0136)   Tx_Buf[i]='';
    019D EF8B      LDI	R24,0xFB
    019E E090      LDI	R25,0
    019F 01F8      MOVW	R30,R16
    01A0 0FE8      ADD	R30,R24
    01A1 1FF9      ADC	R31,R25
    01A2 2422      CLR	R2
    01A3 8220      STD	Z+0,R2
    01A4 5F0F      SUBI	R16,0xFF
    01A5 4F1F      SBCI	R17,0xFF
    01A6 3200      CPI	R16,0x20
    01A7 E0E0      LDI	R30,0
    01A8 071E      CPC	R17,R30
    01A9 F39C      BLT	0x019D
(0137)   }
    01AA 9508      RET
(0138) void clear_Rx_Buf(void)//清空接收缓冲
(0139)   {
(0140)   int i;
(0141)   for (i=0;i<SIZE;i++) 
_clear_Rx_Buf:
  i                    --> R16
    01AB 2700      CLR	R16
    01AC 2711      CLR	R17
(0142)   Rx_Buf[i]='';
    01AD ED8B      LDI	R24,0xDB
    01AE E090      LDI	R25,0
    01AF 01F8      MOVW	R30,R16
    01B0 0FE8      ADD	R30,R24
    01B1 1FF9      ADC	R31,R25
    01B2 2422      CLR	R2
    01B3 8220      STD	Z+0,R2
    01B4 5F0F      SUBI	R16,0xFF
    01B5 4F1F      SBCI	R17,0xFF
    01B6 3200      CPI	R16,0x20
    01B7 E0E0      LDI	R30,0
    01B8 071E      CPC	R17,R30
    01B9 F39C      BLT	0x01AD
(0143)   }
    01BA 9508      RET
_Read_nrf905Add:
  RX_ADD               --> R16
    01BB D3B5      RCALL	push_gset2
(0144)   
(0145) //读取EEPROM的内容,0x00处开始一个字节为主机地址,当启用EEPROM时请把注释去掉
(0146) void Read_nrf905Add(void)
(0147) {
(0148)  	 unsigned char RX_ADD=0xAA;
    01BC EA0A      LDI	R16,0xAA
(0149)   // EEPROM_READ(0x00,RX_ADD);//从0x00开始读取主机地址
(0150)      RX_ADDRESS=RX_ADDRESS&0x11111100;//先清除最低8位
    01BD E040      LDI	R20,0
    01BE E151      LDI	R21,0x11
    01BF E161      LDI	R22,0x11
    01C0 E171      LDI	R23,0x11
    01C1 9040008D  LDS	R4,0x8D
    01C3 9050008E  LDS	R5,0x8E
    01C5 9020008B  LDS	R2,0x8B
    01C7 9030008C  LDS	R3,0x8C
    01C9 2224      AND	R2,R20
    01CA 2235      AND	R3,R21
    01CB 2246      AND	R4,R22
    01CC 2257      AND	R5,R23
    01CD 9230008C  STS	0x8C,R3
    01CF 9220008B  STS	0x8B,R2
    01D1 9250008E  STS	0x8E,R5
    01D3 9240008D  STS	0x8D,R4
(0151)      RX_ADDRESS=RX_ADDRESS|RX_ADD;//再将新地址送到接收地址
    01D5 2E20      MOV	R2,R16
    01D6 2433      CLR	R3
    01D7 2444      CLR	R4
    01D8 2455      CLR	R5
    01D9 9080008D  LDS	R8,0x8D
    01DB 9090008E  LDS	R9,0x8E
    01DD 9060008B  LDS	R6,0x8B
    01DF 9070008C  LDS	R7,0x8C
    01E1 2862      OR	R6,R2
    01E2 2873      OR	R7,R3
    01E3 2884      OR	R8,R4
    01E4 2895      OR	R9,R5
    01E5 9270008C  STS	0x8C,R7
    01E7 9260008B  STS	0x8B,R6
    01E9 9290008E  STS	0x8E,R9
    01EB 9280008D  STS	0x8D,R8
(0152) }
    01ED D368      RCALL	pop_gset2
    01EE 9508      RET
_Change_TX_ADD:
  TX_ADD               --> R16
    01EF D381      RCALL	push_gset2
(0153) 
(0154) //改变nrf905的发送地址
(0155) void Change_TX_ADD(unsigned char TX_ADD)
(0156) {
(0157)  	 TX_ADDRESS=TX_ADDRESS&0xffffff00;//先清除最低8位
    01F0 E040      LDI	R20,0
    01F1 EF5F      LDI	R21,0xFF
    01F2 EF6F      LDI	R22,0xFF
    01F3 EF7F      LDI	R23,0xFF
    01F4 90400091  LDS	R4,0x91
    01F6 90500092  LDS	R5,0x92
    01F8 9020008F  LDS	R2,0x8F
    01FA 90300090  LDS	R3,0x90
    01FC 2224      AND	R2,R20
    01FD 2235      AND	R3,R21
    01FE 2246      AND	R4,R22
    01FF 2257      AND	R5,R23
    0200 92300090  STS	0x90,R3
    0202 9220008F  STS	0x8F,R2
    0204 92500092  STS	0x92,R5
    0206 92400091  STS	0x91,R4
(0158)      TX_ADDRESS=TX_ADDRESS|TX_ADD;//再将新地址送到发送地址
    0208 2E20      MOV	R2,R16
    0209 2433      CLR	R3
    020A 2444      CLR	R4
    020B 2455      CLR	R5
    020C 90800091  LDS	R8,0x91
    020E 90900092  LDS	R9,0x92
    0210 9060008F  LDS	R6,0x8F
    0212 90700090  LDS	R7,0x90
    0214 2862      OR	R6,R2
    0215 2873      OR	R7,R3
    0216 2884      OR	R8,R4
    0217 2895      OR	R9,R5
    0218 92700090  STS	0x90,R7
    021A 9260008F  STS	0x8F,R6
    021C 92900092  STS	0x92,R9
    021E 92800091  STS	0x91,R8
(0159) }
    0220 D335      RCALL	pop_gset2
    0221 9508      RET
_nrf905_Config:
    0222 D34E      RCALL	push_gset2
(0160) 
(0161) //配置nRF905
(0162) void nrf905_Config(void)//通过向spi 向905写寄存器从而配置寄存器
(0163) {
(0164)  
(0165)   CLR(PORTB,CSN);                   // Spi 片选开,使能spi
    0223 98C2      CBI	0x18,2
(0166)   nrf905_SpiRW(WC);                // Write config command ,
    0224 2700      CLR	R16
    0225 D05F      RCALL	_nrf905_SpiRW
(0167)   nrf905_SpiRW(CH_NO_BYTE);                      //中心频率低8位
    0226 E40C      LDI	R16,0x4C
    0227 D05D      RCALL	_nrf905_SpiRW
(0168)   nrf905_SpiRW(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
    0228 E00C      LDI	R16,0xC
    0229 D05B      RCALL	_nrf905_SpiRW
(0169)   nrf905_SpiRW(TX_AFW_4BYTE | RX_AFW_4BYTE);     //接收地址宽度4字节,发送地址宽度4字节
    022A E404      LDI	R16,0x44
    022B D059      RCALL	_nrf905_SpiRW
(0170)   nrf905_SpiRW(RX_PW_32BYTE);                    //接收数据宽度32字节
    022C E200      LDI	R16,0x20
    022D D057      RCALL	_nrf905_SpiRW
(0171)   nrf905_SpiRW(TX_PW_32BYTE);                    //发送数据宽度32字节
    022E E200      LDI	R16,0x20
    022F D055      RCALL	_nrf905_SpiRW
(0172)   nrf905_SpiRW(RX_ADDRESS_0);                    //接收有效地址第1字节
    0230 E188      LDI	R24,0x18
    0231 E090      LDI	R25,0
    0232 9040008D  LDS	R4,0x8D
    0234 9050008E  LDS	R5,0x8E
    0236 9020008B  LDS	R2,0x8B
    0238 9030008C  LDS	R3,0x8C
    023A 938A      ST	R24,-Y
    023B 0181      MOVW	R16,R2
    023C 0192      MOVW	R18,R4
    023D D376      RCALL	lsr32
    023E D046      RCALL	_nrf905_SpiRW
(0173)   nrf905_SpiRW(RX_ADDRESS_1);                    //接收有效地址第2字节
    023F EF4F      LDI	R20,0xFF
    0240 E050      LDI	R21,0
    0241 E060      LDI	R22,0
    0242 E070      LDI	R23,0
    0243 9040008D  LDS	R4,0x8D
    0245 9050008E  LDS	R5,0x8E
    0247 9020008B  LDS	R2,0x8B
    0249 9030008C  LDS	R3,0x8C
    024B 0112      MOVW	R2,R4
    024C 2444      CLR	R4
    024D 2455      CLR	R5
    024E 2224      AND	R2,R20
    024F 2235      AND	R3,R21
    0250 2246      AND	R4,R22
    0251 2257      AND	R5,R23
    0252 2D02      MOV	R16,R2
    0253 D031      RCALL	_nrf905_SpiRW
(0174)   nrf905_SpiRW(RX_ADDRESS_2);                    //接收有效地址第3字节
    0254 E088      LDI	R24,0x8
    0255 E090      LDI	R25,0
    0256 9040008D  LDS	R4,0x8D
    0258 9050008E  LDS	R5,0x8E
    025A 9020008B  LDS	R2,0x8B
    025C 9030008C  LDS	R3,0x8C
    025E 938A      ST	R24,-Y
    025F 0181      MOVW	R16,R2
    0260 0192      MOVW	R18,R4
    0261 D352      RCALL	lsr32
    0262 0118      MOVW	R2,R16
    0263 0129      MOVW	R4,R18
    0264 EF4F      LDI	R20,0xFF
    0265 E050      LDI	R21,0
    0266 E060      LDI	R22,0
    0267 E070      LDI	R23,0
    0268 2224      AND	R2,R20
    0269 2235      AND	R3,R21
    026A 2246      AND	R4,R22
    026B 2257      AND	R5,R23
    026C 2D02      MOV	R16,R2
    026D D017      RCALL	_nrf905_SpiRW
(0175)   nrf905_SpiRW(RX_ADDRESS_3);                    //接收有效地址第4字节
    026E EF4F      LDI	R20,0xFF
    026F E050      LDI	R21,0
    0270 E060      LDI	R22,0
    0271 E070      LDI	R23,0
    0272 9040008D  LDS	R4,0x8D
    0274 9050008E  LDS	R5,0x8E
    0276 9020008B  LDS	R2,0x8B
    0278 9030008C  LDS	R3,0x8C
    027A 2224      AND	R2,R20
    027B 2235      AND	R3,R21
    027C 2246      AND	R4,R22
    027D 2257      AND	R5,R23
    027E 2D02      MOV	R16,R2
    027F D005      RCALL	_nrf905_SpiRW
(0176)   nrf905_SpiRW(CRC16_EN | XOF_16MHz);            //CRC16模式使能,晶体振荡器频率16MHz
    0280 ED08      LDI	R16,0xD8
    0281 D003      RCALL	_nrf905_SpiRW
(0177)   SET(PORTB,CSN);                 // Disable Spi
    0282 9AC2      SBI	0x18,2
(0178) }
    0283 D2D2      RCALL	pop_gset2
    0284 9508      RET
_nrf905_SpiRW:
  temp                 --> R20
  val                  --> R16
    0285 D2D4      RCALL	push_gset1
(0179) 
(0180) /*-----------------------------------------------
(0181)     控制nrf905的 SPI读写一体化函数  
(0182) ------------------------------------------------*/ 
(0183) uchar nrf905_SpiRW(uchar val) 
(0184) {
(0185)     uchar temp;
(0186) 
(0187)     SPDR=val;
    0286 B90F      OUT	0x0F,R16
(0188) 	while ((SPSR&(1<<SPIF))==0);//置位后,只要SPSR 寄存器的SPIF 和SREG 寄存器的全局中断使能位置位,就会引发SPI 中断
    0287 9B77      SBIS	0x0E,7
    0288 CFFE      RJMP	0x0287
(0189) 	temp=SPDR;
    0289 B14F      IN	R20,0x0F
(0190) 	return temp;
    028A 2F04      MOV	R16,R20
    028B D2D1      RCALL	pop_gset1
    028C 9508      RET
(0191) }
(0192) 
(0193) /*-----------------------------------------------
(0194)      设置为StandBy模式  
(0195) ------------------------------------------------*/ 
(0196) void nrf905_StandBy(void)
(0197) {
(0198)    SET(PORTD,PWR);//上电
_nrf905_StandBy:
    028D 9A95      SBI	0x12,5
(0199)    CLR(PORTD,TRXCE);
    028E 9896      CBI	0x12,6
(0200)    CLR(PORTD,TX_EN);
    028F 9897      CBI	0x12,7
(0201) }
    0290 9508      RET
(0202) 
(0203) //->PwrDown
(0204) void nrf905_Off(void)
(0205) {
(0206)   CLR(PORTD,PWR);
_nrf905_Off:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -