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

📄 tx.lst

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

⌨️ 快捷键说明

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