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

📄 rx.lst

📁 atmega128单片机上实现的nrf905无线收发程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    0171 DF0A      RCALL	_SpiWrite
    0172 0000      NOP
(0084)   for (i=0;i<10;i++)	// Write configration words  写放配置字
    0173 2744      CLR	R20
    0174 C00A      RJMP	0x017F
(0085)   {
(0086) 	SpiWrite(data_conf[i]);
    0175 E38A      LDI	R24,0x3A
    0176 E091      LDI	R25,1
    0177 2FE4      MOV	R30,R20
    0178 27FF      CLR	R31
    0179 0FE8      ADD	R30,R24
    017A 1FF9      ADC	R31,R25
    017B 8100      LDD	R16,Z+0
    017C DEFF      RCALL	_SpiWrite
    017D 0000      NOP
    017E 9543      INC	R20
    017F 304A      CPI	R20,0xA
    0180 F3A0      BCS	0x0175
(0087)   }
(0088)   PORTE |=(1<<CSN);						// Disable Spi
    0181 9A19      SBI	0x03,1
    0182 D076      RCALL	pop_gset1
    0183 0000      NOP
    0184 9508      RET
(0089) }
(0090) 
(0091) /***************************************************************
(0092) 函数功能:把905配置成发送模式
(0093) 输入参数:无
(0094) 输出参数:无
(0095) ***************************************************************/
(0096) void set_Tmode()
(0097) {	
(0098) 	PORTE |=(1<<PWR_UP);              //905上电
_set_Tmode:
    0185 9A1A      SBI	0x03,2
(0099) 	PORTE |=(1<<TX_EN); 
    0186 9A1B      SBI	0x03,3
(0100) 	PORTB &=~(1<<TRX_CE);
    0187 98C0      CBI	0x18,0
(0101) 	Delay650us(); 					// delay for mode change(>=650us)
    0188 DEFE      RCALL	_Delay650us
    0189 0000      NOP
    018A 9508      RET
(0102) }
(0103) 
(0104) /***************************************************************
(0105) 函数功能:把905配置成接收模式
(0106) 输入参数:无
(0107) 输出参数:无
(0108) ***************************************************************/
(0109) void set_Rmode()
(0110) {
(0111) 	PORTE |=(1<<PWR_UP);              //905上电
_set_Rmode:
    018B 9A1A      SBI	0x03,2
(0112) 	PORTE &=~(1<<TX_EN); 
    018C 981B      CBI	0x03,3
(0113) 	PORTB |=(1<<TRX_CE);
    018D 9AC0      SBI	0x18,0
(0114) 	Delay650us(); 					// delay for mode change(>=650us)				
    018E DEF8      RCALL	_Delay650us
    018F 0000      NOP
    0190 9508      RET
(0115) }
(0116) 
(0117) /***************************************************************
(0118) 函数功能:把905配置成掉电和SPI模式(节省能量)
(0119) 输入参数:无
(0120) 输出参数:无
(0121) ***************************************************************/
(0122) void set_Powerdownmode()
(0123) {
(0124)     PORTE &=~(1<<PWR_UP);                   //掉电
_set_Powerdownmode:
    0191 981A      CBI	0x03,2
(0125) 	Delay650us(); 					// delay for mode change(>=650us)	
    0192 DEF4      RCALL	_Delay650us
    0193 0000      NOP
    0194 9508      RET
(0126) }
(0127) 
(0128) /***************************************************************
(0129) 函数功能:把905配置成STANDBY和SPI模式(节省能量)
(0130) 输入参数:无
(0131) 输出参数:无
(0132) ***************************************************************/
(0133) void set_STmode()
(0134) {
(0135)     PORTE |=(1<<PWR_UP);              //905上电
_set_STmode:
    0195 9A1A      SBI	0x03,2
(0136) 	PORTB &=~(1<<TRX_CE); 
    0196 98C0      CBI	0x18,0
(0137) 	Delay3ms(); 					// delay for mode change(>=650us)	
    0197 DF05      RCALL	_Delay3ms
    0198 0000      NOP
    0199 9508      RET
_set_Taddr:
  i                    --> R20
  addr                 --> R22
    019A D059      RCALL	push_gset2
    019B 0000      NOP
    019C 01B8      MOVW	R22,R16
(0138) }
(0139) 
(0140) 
(0141) 
(0142) /**************************************************************************
(0143) 函数功能:通过SPI设定905的发送地址
(0144) 输入参数:发送地址数据的首地址
(0145) 输出参数:无
(0146) **************************************************************************/
(0147) void set_Taddr(unsigned char*addr)
(0148) {
(0149)     unsigned i;
(0150) 	PORTE &=~(1<<CSN);						// Spi 使能
    019D 9819      CBI	0x03,1
(0151) 	SpiWrite(WTA);				                // Write address command
    019E E202      LDI	R16,0x22
    019F DEDC      RCALL	_SpiWrite
    01A0 0000      NOP
(0152) 	for (i=0;i<4;i++)			                // Write 4 bytes address
    01A1 2744      CLR	R20
    01A2 2755      CLR	R21
    01A3 C008      RJMP	0x01AC
(0153) 	{
(0154) 		SpiWrite(addr[i]);
    01A4 01FA      MOVW	R30,R20
    01A5 0FE6      ADD	R30,R22
    01A6 1FF7      ADC	R31,R23
    01A7 8100      LDD	R16,Z+0
    01A8 DED3      RCALL	_SpiWrite
    01A9 0000      NOP
    01AA 5F4F      SUBI	R20,0xFF
    01AB 4F5F      SBCI	R21,0xFF
    01AC 3044      CPI	R20,4
    01AD E0E0      LDI	R30,0
    01AE 075E      CPC	R21,R30
    01AF F3A0      BCS	0x01A4
(0155) 	}	
(0156) 	PORTE |=(1<<CSN);						   // 禁止Spi 
    01B0 9A19      SBI	0x03,1
    01B1 D039      RCALL	pop_gset2
    01B2 0000      NOP
    01B3 9508      RET
_TxPacket:
  temp                 --> Y+1
  i                    --> R20
  send_d               --> R22
    01B4 D03F      RCALL	push_gset2
    01B5 0000      NOP
    01B6 01B8      MOVW	R22,R16
(0157) } 
(0158) 
(0159) /**************************************************************************
(0160) 函数功能:905发送一个数据包
(0161) 输入参数:要发送的数据包的首地址
(0162) 输出参数:无
(0163) **************************************************************************/
(0164) void TxPacket(unsigned char*send_d)
(0165) {
(0166) 	unsigned char temp,i;
(0167) 	//Config905();				
(0168) 	PORTE &=~(1<<CSN);			// CSN置零,Spi 使能
    01B7 9819      CBI	0x03,1
(0169) 	SpiWrite(WTP);				  // 写SPI命令
    01B8 E200      LDI	R16,0x20
    01B9 DEC2      RCALL	_SpiWrite
    01BA 0000      NOP
(0170) //    SpiWrite(serial);
(0171) 	for (i=0;i<PACKAGE_LENGTH;i++)
    01BB 2744      CLR	R20
    01BC C008      RJMP	0x01C5
(0172) 	{	  
(0173) 	  SpiWrite(*(send_d+i));		// 写21字节的TX数据
    01BD 2FE4      MOV	R30,R20
    01BE 27FF      CLR	R31
    01BF 0FE6      ADD	R30,R22
    01C0 1FF7      ADC	R31,R23
    01C1 8100      LDD	R16,Z+0
    01C2 DEB9      RCALL	_SpiWrite
    01C3 0000      NOP
    01C4 9543      INC	R20
    01C5 3145      CPI	R20,0x15
    01C6 F3B0      BCS	0x01BD
(0174) 	}
(0175) 	PORTE |=(1<<CSN);						// 禁止Spi						
    01C7 9A19      SBI	0x03,1
(0176) 	//
(0177) 	PORTB |=(1<<TRX_CE); 					// Set TRX_CE high,开始TX数据发送
    01C8 9AC0      SBI	0x18,0
(0178) 	                                   
(0179) 	Delay650us();	                             // 形成脉冲
    01C9 DEBD      RCALL	_Delay650us
    01CA 0000      NOP
(0180) 	PORTB &=~(1<<TRX_CE); 				// Set TRX_CE low,进入standby模式
    01CB 98C0      CBI	0x18,0
    01CC D01E      RCALL	pop_gset2
    01CD 0000      NOP
    01CE 9508      RET
_RxPacket:
  i                    --> R20
  received_d           --> R22
    01CF D024      RCALL	push_gset2
    01D0 0000      NOP
    01D1 01B8      MOVW	R22,R16
(0181) }
(0182) 
(0183) /***************************************************************************
(0184) 函数功能:把905接收到的一个数据包放到CPU的接收缓冲区
(0185) 输入参数:接收缓冲区的首地址
(0186) 输出参数:无
(0187) ***************************************************************************/
(0188) void RxPacket(unsigned char*received_d)
(0189) {
(0190) 	unsigned char  i;
(0191) 	PORTB &=~(1<<TRX_CE); 					// 把nRF905 设置成standby,不再接收无线数据	
    01D2 98C0      CBI	0x18,0
(0192) 	PORTE &=~(1<<CSN);			// Spi enable for write a spi command,Spi 使能
    01D3 9819      CBI	0x03,1
(0193) 	SpiWrite(RRP);				  // Read payload command	
    01D4 E204      LDI	R16,0x24
    01D5 DEA6      RCALL	_SpiWrite
    01D6 0000      NOP
(0194) 	for (i=0;i<PACKAGE_LENGTH;i++)
    01D7 2744      CLR	R20
    01D8 C009      RJMP	0x01E2
(0195) 	{
(0196) 		*(received_d+i)=SpiWrite(0x00);			// Read data and save to buffer		
    01D9 2700      CLR	R16
    01DA DEA1      RCALL	_SpiWrite
    01DB 0000      NOP
    01DC 2FE4      MOV	R30,R20
    01DD 27FF      CLR	R31
    01DE 0FE6      ADD	R30,R22
    01DF 1FF7      ADC	R31,R23
    01E0 8300      STD	Z+0,R16
    01E1 9543      INC	R20
    01E2 3145      CPI	R20,0x15
    01E3 F3A8      BCS	0x01D9
(0197) 	}
(0198) 	PORTE |=(1<<CSN);						// 禁止Spi
    01E4 9A19      SBI	0x03,1
(0199)     Delay650us();
    01E5 DEA1      RCALL	_Delay650us
    01E6 0000      NOP
(0200) 	PORTB |=(1<<TRX_CE);             //把nRF905 设置成RX mode
FILE: <library>
    01E7 9AC0      SBI	0x18,0
    01E8 D002      RCALL	pop_gset2
    01E9 0000      NOP
    01EA 9508      RET
pop_gset2:
    01EB E0E2      LDI	R30,2
    01EC C00D      RJMP	pop
    01ED 0000      NOP
push_gset5:
    01EE 92FA      ST	R15,-Y
    01EF 92EA      ST	R14,-Y
push_gset4:
    01F0 92DA      ST	R13,-Y
    01F1 92CA      ST	R12,-Y
push_gset3:
    01F2 92BA      ST	R11,-Y
    01F3 92AA      ST	R10,-Y
push_gset2:
    01F4 937A      ST	R23,-Y
    01F5 936A      ST	R22,-Y
push_gset1:
    01F6 935A      ST	R21,-Y
    01F7 934A      ST	R20,-Y
    01F8 9508      RET
pop_gset1:
    01F9 E0E1      LDI	R30,1
pop:
    01FA 9149      LD	R20,Y+
    01FB 9159      LD	R21,Y+
    01FC FDE0      SBRC	R30,0
    01FD 9508      RET
    01FE 9169      LD	R22,Y+
    01FF 9179      LD	R23,Y+
    0200 FDE1      SBRC	R30,1
    0201 9508      RET
    0202 90A9      LD	R10,Y+
    0203 90B9      LD	R11,Y+
    0204 FDE2      SBRC	R30,2
    0205 9508      RET
    0206 90C9      LD	R12,Y+
    0207 90D9      LD	R13,Y+
    0208 FDE3      SBRC	R30,3
    0209 9508      RET
    020A 90E9      LD	R14,Y+
    020B 90F9      LD	R15,Y+
    020C 9508      RET
push_lset:
    020D 93FA      ST	R31,-Y
    020E 93EA      ST	R30,-Y
    020F 93BA      ST	R27,-Y
    0210 93AA      ST	R26,-Y
    0211 939A      ST	R25,-Y
    0212 938A      ST	R24,-Y
    0213 933A      ST	R19,-Y
    0214 932A      ST	R18,-Y
    0215 931A      ST	R17,-Y
    0216 930A      ST	R16,-Y
    0217 929A      ST	R9,-Y
    0218 928A      ST	R8,-Y
    0219 927A      ST	R7,-Y
    021A 926A      ST	R6,-Y
    021B 925A      ST	R5,-Y
    021C 924A      ST	R4,-Y
    021D 923A      ST	R3,-Y
    021E 922A      ST	R2,-Y
    021F 921A      ST	R1,-Y
    0220 920A      ST	R0,-Y
    0221 B60F      IN	R0,0x3F
    0222 920A      ST	R0,-Y
    0223 9508      RET
pop_lset:
    0224 9009      LD	R0,Y+
    0225 BE0F      OUT	0x3F,R0
    0226 9009      LD	R0,Y+
    0227 9019      LD	R1,Y+
    0228 9029      LD	R2,Y+
    0229 9039      LD	R3,Y+
    022A 9049      LD	R4,Y+
    022B 9059      LD	R5,Y+
    022C 9069      LD	R6,Y+
    022D 9079      LD	R7,Y+
    022E 9089      LD	R8,Y+
    022F 9099      LD	R9,Y+
    0230 9109      LD	R16,Y+
    0231 9119      LD	R17,Y+
    0232 9129      LD	R18,Y+
    0233 9139      LD	R19,Y+
    0234 9189      LD	R24,Y+
    0235 9199      LD	R25,Y+
    0236 91A9      LD	R26,Y+
    0237 91B9      LD	R27,Y+
    0238 91E9      LD	R30,Y+
    0239 91F9      LD	R31,Y+
    023A 9508      RET

⌨️ 快捷键说明

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