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

📄 cc2500.asm.bak

📁 cc2500的接收程式,有需的朋友可以参考一下
💻 BAK
字号:
;***************************************************************************
;F: File Name: 	cc2500.asm.
;F: Build Date:	2006/11/3.
;F: Programer:	stone_zen.
;F:
;***************************************************************************





;*****************************************************************
;F: Function Name: F_InitalCC2500.
;F:
;F: Describe:
;F:  configuration the cc2500 registers.
;F:
;*****************************************************************
F_InitalCC2500:
	lds	R_WrkReg1,0;
	lcp	R_SCLKBuf,R_WrkReg1;
	lds	R_WrkReg1,0000b;
	opc	R_WrkReg1;
	lds	R_WrkReg1,0;
	lcp	R_CSnBuf,R_WrkReg1;
	
	lds	R_Delay,4;
	call	F_DelxxUS;
	lds	R_WrkReg1,D_CSn;
	lcp	R_CSnBuf,R_WrkReg1;
	
	lds	R_Delay,10;
	call	F_DelxxUS;
	lds	R_ParLow,CMD_CC2500_SRES%16;
	lds	R_ParHigh,CMD_CC2500_SRES/16;
	call	F_CC2500WRStrobe;
	
	lds	R_Delay,4;
	call	F_DelxxUS;
	lds	R_WrkReg1,0;
	lcp	R_CSnBuf,R_WrkReg1;
L_WaitSOLo01:
	ipa	R_WrkReg1;
	jb0	L_WaitSOLo01;   只有再次检到低时才算RESET 完成。
;================================================
;================================================		
;开始初始化配置寄存器的内容。
	call	F_WRCC2500Bit;
	lds	R_ParHigh,40h/16
	lds	R_ParLow,40h%16;  设为BURST write Mode.
	call	F_WRCC2500_REG_Addr;
;======================================
;Addr 0x00 IOCFG2.
	lds	R_ParLow,47H%16;         当同步字被送出时GDO2 pin产生一个低信号.
	lds	R_ParHigh,47H/16;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x01 IOCFG1.
	lds	R_ParLow,2eh%16;         此脚功能不用。
	lds	R_ParHigh,2eh/16;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x02 IOCFG0.
	lds	R_ParLow,46h%16;
	lds	R_ParHigh,46h/16;
	call	F_WRCC2500_ABYTE;     此脚功能不用。
;======================================
;Addr 0x03 FIFOTHR.
	lds	R_ParLow,7; 	      TX FIFO 超过33个字节产生溢出。	
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x04 SYNC1.
	lds	R_ParLow,03h;
	lds	R_ParHigh,0dh;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x05 SYNC0.
	lds	R_ParLow,01h;        同步字为0xd391.
	lds	R_ParHigh,09h;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x06 PKTLEN.       
	lds	R_ParLow,4;          
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x07 PKTCTRL1.
	lds	R_ParLow,5;
	lds	R_ParHigh,0;         在TX 模式下,保留上电初始设置。
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x08 PKTCTRL0.
	lds	R_ParLow,04h;        固定包,允许CRC功能。
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x09 ADDR.
	;ipd	R_ParLow;            0~15 address.
	lds	R_ParLow,4;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x0A CHANNR.
	;ipd	R_ParLow;	     0~15 AS CHANNER VALUE。	
	lds	R_ParLow,2;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x0B FSCTRL1.
	lds	R_ParLow,0dh;        IF frequency of 254kHz,
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x0C FSCTRL0.
	lds	R_ParLow,0;          Resolution is FXTAL/214 (1.5kHz-1.7kHz); range is ±186kHz to
				    ;±217kHz, dependent of XTAL frequency.
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x0D FREQ2.
	lds	R_ParLow,0ch;       2464MHz-2483.4MHz (0-97)
	lds	R_ParHigh,05h;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x0E FREQ1.
	lds	R_ParLow,01h;
	lds	R_ParHigh,0bh;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x0F FREQ0.
	lds	R_ParLow,0bh;
	lds	R_ParHigh,03h;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x10 MDMCFG4.
	lds	R_ParLow,0dh;
	lds	R_ParHigh,02h;
	call	F_WRCC2500_ABYTE; 203kHz channel filter bandwidth,
;======================================
;Addr 0x11 MDMCFG3.
	lds	R_ParLow,0bh;
	lds	R_ParHigh,03h;
	call	F_WRCC2500_ABYTE; data rate of 115.051kbps.
;======================================
;Addr 0x12 MDMCFG2.
	lds	R_ParLow,02h;
	lds	R_ParHigh,07h;
	call	F_WRCC2500_ABYTE; 2-FSK/disable Manchester encoding/decoding/16/16 sync word bits detected.
;======================================
;Addr 0x13 MDMCFG1.
	lds	R_ParLow,03h;
	lds	R_ParHigh,02h;
	call	F_WRCC2500_ABYTE; disable Forward Error Correction (FEC)/
;======================================
;Addr 0x14 MDMCFG0.
	lds	R_ParLow,0fh;
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE; give 199.951kHz channel spacing.  
;======================================
;Addr 0x15 DEVIATN.
	lds	R_ParLow,01h;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;  give ±47.607kHz deviation,
;======================================
;Addr 0x16 MCSM2.
	lds	R_ParLow,07h;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x17 MCSM1.
	lds	R_ParLow,0;
	lds	R_ParHigh,3;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x18 MCSM0.
	lds	R_ParLow,8;      When going from IDLE to RX or TX (or FSTXON)
	lds	R_ParHigh,1;     Approx. 146μs – 171μs
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x19 FOCCFG. 
	lds	R_ParLow,0eh;      Frequency offset compensation configuration.
	lds	R_ParHigh,1;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x1A BSCFG.
	lds	R_ParLow,0ch;    Bit Synchronization configuration.
	lds	R_ParHigh,6;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x1B AGCTRL2.
	lds	R_ParLow,3;      AGC control register.
	lds	R_ParHigh,0ch;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x1C AGCTRL1.
	lds	R_ParLow,0;      AGC control register.
	lds	R_ParHigh,4;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x1D AGCTRL0.
	lds	R_ParLow,1;      AGC control register.
	lds	R_ParHigh,9;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x1E WOREVT1.
	lds	R_ParLow,7;      High byte of Event 0 timeout register.
	lds	R_ParHigh,8;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x1F WOREVT0.
	lds	R_ParLow,0bh;     Low byte of Event 0 timeout register.
	lds	R_ParHigh,6;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x20 WORCTRL.
	lds	R_ParLow,0bh;    
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x21 FREND1.
	lds	R_ParLow,06h;   Front end RX configuration.
	lds	R_ParHigh,0bh;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x22 FREND0.
	lds	R_ParLow,0;
	lds	R_ParHigh,1;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x23 FSCAL3.
	lds	R_ParLow,0ah;     Frequency synthesizer calibration configuration and result register.
	lds	R_ParHigh,0eh;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x24 FSCAL2.
	lds	R_ParLow,0ah;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x25 FSCAL1.
	lds	R_ParLow,0;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x26 FSCAL0.
	lds	R_ParLow,1;
	lds	R_ParHigh,1;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x27 RCCTRL1.
	lds	R_ParLow,01h;
	lds	R_ParHigh,04h;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x28 RCCTRL0.
	lds	R_ParLow,0;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x29 FSTEST.
	lds	R_ParLow,9;
	lds	R_ParHigh,5;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x2A PTEST.
	lds	R_ParLow,0fh;
	lds	R_ParHigh,07h;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x2B AGCTEST.
	lds	R_ParLow,0fh;
	lds	R_ParHigh,03h;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x2C TEST2.
	lds	R_ParLow,0fh;
	lds	R_ParHigh,8;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x2D TEST1.
	lds	R_ParLow,1;
	lds	R_ParHigh,2;
	call	F_WRCC2500_ABYTE;
;======================================
;Addr 0x2E TETS0.
	lds	R_ParLow,0bh;
	lds	R_ParHigh,0;
	call	F_WRCC2500_ABYTE;
	
	lds	R_WrkReg1,D_CSn;
	lcp	R_CSnBuf,R_WrkReg1;
	
	lds	R_Delay,2;
	call	F_DelxxUS;
	lds	R_WrkReg1,0;
	lcp	R_CSnBuf,R_WrkReg1;
L_WaitSOLow03:
	ipa	R_WrkReg1;          waiting for the SO pin of cc2500 get low.
	jb0	L_WaitSOLow03;	
	
	call	F_WRCC2500Bit;     设置发射功率。
	lds	R_ParLow,0eh;
	lds	R_ParHigh,07h;
	call	F_WRCC2500_REG_Addr;  地址3EH为功率控制寄存器。 
	
	lds	R_ParLow,0fh;      PATABLE byte0.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE

	lds	R_ParLow,0fh;      PATABLE byte1.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_ParLow,0fh;      PATABLE byte2.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_ParLow,0fh;      PATABLE byte3.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_ParLow,0fh;      PATABLE byte4.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_ParLow,0fh;      PATABLE byte5.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_ParLow,0fh;      PATABLE byte6.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_ParLow,0fh;      PATABLE byte7.
	lds	R_ParHigh,0fh;
	call	F_WRCC2500_ABYTE
	
	lds	R_WrkReg1,D_CSn;
	lcp	R_CSnBuf,R_WrkReg1;
;=========================================================
;=========================================================	
	lds	R_ParLow,CMD_CC2500_SFTX%16;
	lds	R_ParHigh,CMD_CC2500_SFTX/16;
	call	F_CC2500WRStrobe;
	
	
	lds	R_ParLow,CMD_CC2500_SFRX%16;
	lds	R_ParHigh,CMD_CC2500_SFRX/16;
	call	F_CC2500WRStrobe;
	
	lds	R_ParLow,CMD_CC2500_SCAL%16;
	lds	R_ParHigh,CMD_CC2500_SCAL/16;
	call	F_CC2500WRStrobe;
	
	lds	R_Delay,10;
	call	F_DelxxUS;
	lds	R_ParLow,CMD_CC2500_SIDLE%16;
	lds	R_ParHigh,CMD_CC2500_SIDLE/16;
	call	F_CC2500WRStrobe;
	
	
	lds	R_Delay,10;
	call	F_DelxxUS;
	lds	R_ParLow,CMD_CC2500_SRX%16;
	lds	R_ParHigh,CMD_CC2500_SRX/16;
	call	F_CC2500WRStrobe;
	lds	R_Delay,10;
	call	F_DelxxUS;
	rts;
;*********************************************************************
;F: Function Name: F_DelxxUs.
;F: Input:
;F:	R_Delay.
;F:
;F:
;*********************************************************************
F_DelxxUS:
	nop;
	nop;
	nop;
	nop;
	nop;
	dec*	R_Delay;
	jnz	F_DelxxUS;
	rts;
;*********************************************************************
;F: Function Name: F_CC2500WRStrobe.
;F: Input:
;F:  	R_ParLow,R_ParHigh.
;F: Output:
;F:	None:
;F:
;**********************************************************************	
F_CC2500WRStrobe:
	lds	R_WrkReg1,0;
	lcp	R_CSnBuf,R_WrkReg1;  CSn ouput low.
L_WaitSOLO00:
	ipa	R_WrkReg1;
	jb0	L_WaitSOLO00;
	
	call	F_WRCC2500Bit;
	call	F_WRCC2500_REG_Addr;
	lds	R_WrkReg1,0001b;
	lcp	R_CSnBuf,R_WrkReg1;
	rts;
;***********************************************************************
;F: Function Name: F_WRCC2500Bit.
;F: 
;F: 送出一位写信号位。
;F:
;F:	
;************************************************************************	
F_WRCC2500Bit:
	lds	R_WrkReg1,0;
	opc	R_WrkReg1;
	
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,D_SCLK;
	lcp	R_SCLKBuf,R_WrkReg1;
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,0;
	lcp	R_SCLKBuf,R_WrkReg1;
	rts;
;************************************************************************
;F: Function Name: F_RDCC2500Bit.
;F:
;F: 送出一位读信号位。
;F:
;F:
;F:
;*************************************************************************	
F_RDCC2500Bit:
	lds	R_WrkReg1,1000b;
	opc	R_WrkReg1;
	
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,D_SCLK;
	lcp	R_SCLKBuf,R_WrkReg1;
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,0;
	lcp	R_SCLKBuf,R_WrkReg1;
	rts;
;*************************************************************************
;F: Function Name: F_WRCC2500_REG_Addr.
;F:
;F: Write 7bit register address.
;F:
;F:
;*************************************************************************
F_WRCC2500_REG_Addr:
	lds	R_cc2500Count,7;
	lda	R_ParLow;
	add*	R_ParLow;
	lda	R_ParHigh;
	adc*	R_ParHigh;
L_LoopWR00:
	lda	R_ParLow;
	add*	R_ParLow;
	lda	R_ParHigh;
	adc*	R_ParHigh;
	jc	L_WRHi00;
L_WRLo00:			
	lds	R_WrkReg1,0;
	opc	R_WrkReg1;
	jmp	L_WRClk00;
L_WRHi00:
	lds	R_WrkReg1,1000b;
	opc	R_WrkReg1;
L_WRClk00:
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,D_SCLK;
	lcp	R_SCLKBuf,R_WrkReg1;
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,0;
	lcp	R_SCLKBuf,R_WrkReg1;
	
	dec*	R_cc2500Count;
	jnz	L_LoopWR00;
	
	lds	R_WrkReg1,0;
	opc	R_WrkReg1;
	rts;
;**************************************************************************
;F: Function Name: F_WRCC2500_ABYTE.
;F: Write 8bit data to register.
;F:
;F: Input:
;F:	R_ParLow,R_ParHigh.
;F:
;**************************************************************************
F_WRCC2500_ABYTE:
	lds	R_cc2500Count,8;	
L_LoopWR02:
	lda	R_ParLow;
	add*	R_ParLow;
	lda	R_ParHigh;
	adc*	R_ParHigh;
	jnc	L_WRLO02;
L_WRHi02:	
	lds	R_WrkReg1,D_SI;
	opc	R_WrkReg1;
	jmp	L_Clk02;	
L_WRLO02:
	lds	R_WrkReg1,0;
	opc	R_WrkReg1;
L_Clk02:
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,D_SCLK;
	lcp	R_SCLKBuf,R_WrkReg1;
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,0;
	lcp	R_SCLKBuf,R_WrkReg1;
	
	dec*	R_cc2500Count;
	jnz	L_LoopWR02;
	
	lds	R_WrkReg1,0;
	opc	R_WrkReg1;
	rts;	
;**********************************************************************
;F: Function Name: F_ReadCC2500AByte.
;F:
;F:
;F:
;F:
;**********************************************************************
F_ReadCC2500AByte:
	lds	R_cc2500Count,8;
	lds	R_ParLow,0;
	lds	R_ParHigh,0;
L_LoopReadByte:
	ipa	R_WrkReg1;
	jb0	L_SetHighRead;
L_ClrLowRead:			
	lds	R_WrkReg1,0;
	mra	R_WrkReg1;
	jmp	L_TotalRotate00;
;=====================================
L_SetHighRead:
	lds	R_WrkReg1,1000b;
	mra	R_WrkReg1;
L_TotalRotate00:
	lda	R_ParLow;
	adc*	R_ParLow;
	lda	R_ParHigh;
	adc*	R_ParHigh;
	
	lds	R_WrkReg1,D_SCLK;
	lcp	R_SCLKBuf,R_WrkReg1;
	nop;
	nop;
	nop;
	nop;
	lds	R_WrkReg1,0;
	lcp	R_SCLKBuf,R_WrkReg1;
	
	dec*	R_cc2500Count;
	jnz	L_LoopReadByte;
L_Readcc2500Ret:
	rts;	
;**************************************************************************
;F: Function Name: F_ReadCC2500Reg.
;F:
;F:
;F:
;F:
;***************************************************************************	
F_ReadCC2500Reg:
	lds	R_WrkReg1,0;
	lcp	R_CSnBuf,R_WrkReg1;  CSn ouput low.
L_WaitSOLO14:
	ipa	R_WrkReg1;
	jb0	L_WaitSOLO14;

	call	F_RDCC2500Bit;
	lda	R_ReadAddrLow;
	sta	R_ParLow;
	lda	R_ReadAddrHigh;
	sta	R_ParHigh;
	call	F_WRCC2500_REG_Addr;
	

	lds	R_Delay,4;
	call	F_DelxxUS;
	call	F_ReadCC2500AByte;
	
	lds	R_WrkReg1,0001b;
	lcp	R_CSnBuf,R_WrkReg1;
	rts;	

⌨️ 快捷键说明

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