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

📄 recorderrx.asm.bak

📁 cc2500的接收程式,有需的朋友可以参考一下
💻 BAK
字号:
;*************************************************************************
;P: Project Name:	recorderRX.
;P: Build Date:		2006/11/6.	  
;P: Version:		v1.0
;P:
;*************************************************************************
.CHIP TM8706
.data
	org	000h;
R_TempAcc	dn		1;
R_TempStatus	dn		1;

R_CurrentMode	dn		1;
D_PlayMode	equ		0;
D_RecorderMode	equ		1;	

R_KeyWakeDel	dn		1;
D_KeyWakeDel	equ		10; 10 x 15.625ms=156.25ms.


R_DelALMLo	dn		2;
R_DelALMHi	equ		R_DelALMLo+1;
D_DelALMLo	equ		30%16;
D_DelALMHi	equ		30/16;	

R_ParLow	dn		2;
R_ParHigh	equ		R_ParLow+1;

R_Delay		dn		1;

R_cc2500Count	dn		1;

R_DelChk	dn		1;

R_TempWrk1	dn		1;

R_CountTimeLow	dn		2;
R_CountTimeHigh	equ		R_CountTimeLow+1;


R_ReadAddrLow	dn		2;
R_ReadAddrHigh	equ		R_ReadAddrLow+1;

;=============================================================
;=============================================================
	org	070h;
R_WrkReg1	dn		1;

R_IntWrk	dn		1;

R_Flags1	dn		1;
B_HaltNormal	equ		0001b; 0: normal mode. 1: halt mode.
B_Recording	equ		0010b;
B_Playing	equ		0100b;
B_ALMStart	equ		1000b;

R_Flags2	dn		1;
B_RFCmd		equ		0001b; 

R_KeyVal	dn		1;
D_SelKey	equ		1;
D_RecorderKey	equ		2;
D_PlayKey	equ		4;

R_KeyStep	dn		1;
D_DelStep	equ		1;
D_WaitStep	equ		2;
D_RelaseStep	equ		3;

R_CurrentMusic	dn		1; 0~3.


R_RecCommandLow	dn		2;
R_RecCommandHigh equ		R_RecCommandLow+1;
D_ScanCommand	equ		0ffh;
D_K1Command	equ		01h;
D_K2Command	equ		02h;
D_K3Command	equ		04h;
D_K4Command	equ		08h;
;=============================================================
;=============================================================
R_LED1Buf	equ		1;
R_LED2Buf	equ		2;
R_LED3Buf	equ		3;
R_LED4Buf	equ		4;
R_RFLEDBuf	equ		5;
R_PlayLEDBuf	equ		6;
R_RecLEDBuf	equ		7;
R_LoBatLEDBuf	equ		8;
R_CSnBuf	equ		9;
R_REnBuf	equ		10;
R_CEnBuf	equ		11;
R_M1Buf		equ		12;
R_M2Buf		equ		13;
R_M3Buf		equ		14;
R_M4Buf		equ		15;
R_SCLKBuf	equ		16;
R_VoicePWBuf	equ		17;

SEG1		equ             0001b;
SEG2		equ	        0001b;
SEG3		equ	        0001b;
SEG4		equ	        0001b;
SEG5		equ	        0001b;
SEG6		equ             0001b;
SEG7		equ             0001b;
SEG8		equ             0001b;
SEG9		equ	        0001b;
SEG10		equ             0001b;
SEG11		equ             0001b;
SEG12		equ             0001b;
SEG13		equ             0001b;
SEG14		equ             0001b;
SEG15		equ             0001b;
SEG16		equ		0001b;


IOA1		equ		0001b;
IOA2		equ		0010b;
IOA3		equ		0100b;
IOA4		equ		1000b;

IOB1		equ		0001b;
IOB2		equ		0010b;
IOB3		equ		0100b;
IOB4		equ		1000b;


IOC1		equ		0001b;
IOC2		equ		0010b;
IOC3		equ		0100b;
IOC4		equ		1000b;

IOD1		equ		0001b;
IOD2		equ		0010b;
IOD3		equ		0100b;
IOD4		equ		1000b;

D_CSn		equ		SEG9;
D_GDO0		equ		IOB1;
D_SO		equ		IOA1;
D_SCLK		equ		SEG16;
D_SI		equ		IOC4;
D_BUSYn		equ		IOA2;
D_LowBat	equ		IOA3;
D_Strobe	equ		IOA4;
D_END		equ		IOB2;
D_KeySel	equ		IOC1;
D_KeyRecord	equ		IOC2;
D_KeyPlay	equ		IOC3;

D_LED1		equ		SEG1;
D_LED2		equ		SEG2;
D_LED3		equ		SEG3;
D_LED4		equ		SEG4;
D_RFLED		equ		SEG5;
D_PlayLED	equ		SEG6;
D_RecorderLED	equ		SEG7;
D_LowBatLED	equ		SEG8;
D_REn		equ		SEG10;
D_CEn		equ		SEG11;
D_M1		equ		SEG12;
D_M2		equ		SEG13;
D_M3		equ		SEG14;
D_M4		equ		SEG15;

D_PreIntEnable	equ	00001000b; Enable the pre-divider interrupt.
D_Tmr1IntEnable	equ	00000010b; Enable the timer1 interrupt.
D_ExtIntEnable	equ	00000100b; Enable the Ext-INT interrupt.

	.INCLUDE	cc2500.inc
.endd
;*************************************************************
.CODE
	org	000h;
	jmp	V_Reset;
	org	010h;
	jmp	V_IntPinInt;
	org	014h;
	jmp	V_IOC_DInt;
	org	018h;
	jmp	V_Tmr1Int;
	org	01ch;
	jmp	V_PreDiverInt;
	org	020h;
	jmp	V_Tmr2Int;
	org	024h;
	jmp	V_KeyMatrixInt;
	org	028h;
V_RFCInt:
V_IOC_DInt:
V_Tmr2Int:
V_KeyMatrixInt:
	rts;
;==============================================================
;==============================================================
V_Reset:
	fast;
	sie*	0;
	call	F_InitContrlPin;
	call	F_ClrAllRAM;
	call	F_InitalPort;
	lds	R_DelALMLo,D_DelALMLo;
	lds	R_DelALMHi,D_DelALMHi;	
	call	F_InitalCC2500;
	
	lds	R_Delay,15;
	call	F_DelxxUS;
	sie*	D_Tmr1IntEnable+D_PreIntEnable+D_ExtIntEnable;	
	
	;lds	R_Delay,15;
	;call	F_DelxxUS;
	
	;lds	R_ReadAddrLow,08
	;lds	R_ReadAddrHigh,0fh;
	;call	F_ReadCC2500Reg;
	
	;lda	R_ParHigh;
	;jb3	L_ProReadDate;
	;jmp	L_LoopRed;
;L_ProReadDate:	
;	lds	R_IntWrk,0;
;	lcp	R_CSnBuf,R_IntWrk;  CSn ouput low.
;L_WaitSOLow16:
;	ipa	R_IntWrk;
;	jb0	L_WaitSOLow16;
;	
;	call	F_RDCC2500Bit;
;	lds	R_ParLow,0ffh%16;
;	lds	R_ParHigh,0ffh/16;
;	call	F_WRCC2500_REG_Addr;
;	
;	call	F_ReadCC2500AByte;	
;	lda	R_ParHigh;
;	jnz	L_ExiteIs;
;	
;	call	F_ReadCC2500AByte;	
;	lda	R_ParLow;
;	sta	R_RecCommandLow;
;	lda	R_ParHigh;
;	sta	R_RecCommandHigh;
;	
;	call	F_ReadCC2500AByte;
;	nop;
;	nop;
;	call	F_ReadCC2500AByte;
;L_ExiteIs:	
;	lds	R_IntWrk,D_CSn;
;	lcp	R_CSnBuf,R_IntWrk;  CSn ouput High.
;	
;	lds	R_ParLow,CMD_CC2500_SIDLE%16;
;	lds	R_ParHigh,CMD_CC2500_SIDLE/16;
;	call	F_CC2500WRStrobe;
;	
;	lds	R_Delay,15;
;	call	F_DelxxUS;
;	lds	R_ParLow,CMD_CC2500_SFRX%16;
;	lds	R_ParHigh,CMD_CC2500_SFRX/16;
;	call	F_CC2500WRStrobe;
;	
;	lds	R_ParLow,CMD_CC2500_SRX%16;
;	lds	R_ParHigh,CMD_CC2500_SRX/16;
;	call	F_CC2500WRStrobe;
;	sie*	D_ExtIntEnable;
;	rts;
	
L_MainLoop:
	call	F_ChkRFCMD;
	lda	R_KeyVal;
	jz	L_ChkSleep;
	
	call	F_ProKeyVal;
L_ChkSleep:	
	jmp	L_MainLoop;
	
	lda	R_KeyWakeDel;
	jnz	L_MainLoop;
	lda	R_Flags1;
	jb1	L_MainLoop;
	jb2	L_MainLoop;
;=================================================
;=================================================				
L_HaltIs:	
	ori*	R_Flags1,B_HaltNormal;
	sca	10h;
	she	0;
	sie*	D_PreIntEnable+D_ExtIntEnable;
	nop;
	nop;
	halt;
	
	nop;
	nop;
   	fast;
   	msb	R_WrkReg1;
   	jb1	L_IOCWake;
	jmp	L_WakeUpPro;
L_IOCWake:
	lds	R_KeyWakeDel,D_KeyWakeDel;	
L_WakeUpPro:	
	andi*	R_Flags1,1110b;
	call	F_InitalPort;
	jmp	L_MainLoop;
;*************************************************************
;V: Vector Name: V_IntPinInt.
;V:
;V:
;V:
;V:
;*************************************************************
V_IntPinInt:
	sta	R_TempAcc;
	maf	R_TempStatus;	
	mwr	R_TempWrk1,R_WrkReg1;
	
	lds	R_IntWrk,0;
	lcp	R_CSnBuf,R_IntWrk;  CSn ouput low.
L_WaitSOLow10:
	ipa	R_IntWrk;
	jb0	L_WaitSOLow10;
	
	call	F_RDCC2500Bit;
	lds	R_ParLow,0ffh%16;
	lds	R_ParHigh,0ffh/16;
	call	F_WRCC2500_REG_Addr;
	
	call	F_ReadCC2500AByte;
	
	call	F_ReadCC2500AByte;	
	lda	R_ParLow;
	sta	R_RecCommandLow;
	lda	R_ParHigh;
	sta	R_RecCommandHigh;
	
	call	F_ReadCC2500AByte;
	lds	R_IntWrk,55h%16;
	sub	R_ParLow;
	jnz	L_ErrorCMD;
	lds	R_IntWrk,55H/16;
	sbc	R_ParHigh;
	jnz	L_ErrorCMD;
	
	call	F_ReadCC2500AByte;
	lds	R_IntWrk,aah%16;
	sub	R_ParLow;
	jnz	L_ErrorCMD;
	lds	R_IntWrk,aah/16;
	sbc	R_ParHigh;
	jz	L_RightCMD:
L_ErrorCMD:	
	lds	R_RecCommandLow,0;
	lds	R_RecCommandHigh,0;

L_RightCMD:
	lds	R_IntWrk,D_CSn;
	lcp	R_CSnBuf,R_IntWrk;  CSn ouput High.
	
	lds	R_ParLow,CMD_CC2500_SFRX%16;
	lds	R_ParHigh,CMD_CC2500_SFRX/16;
	call	F_CC2500WRStrobe;
	
	lds	R_ParLow,CMD_CC2500_SIDLE%16;
	lds	R_ParHigh,CMD_CC2500_SIDLE/16;
	call	F_CC2500WRStrobe;
	
	lds	R_ParLow,CMD_CC2500_SRX%16;
	lds	R_ParHigh,CMD_CC2500_SRX/16;
	call	F_CC2500WRStrobe;
	
	alm	0;
	ori*	R_Flags2,B_RFCmd;
	lds	R_DelALMLo,D_DelALMLo;
	lds	R_DelALMHi,D_DelALMHi;	
	
	lda	R_Flags1;
	jb0	L_HaltRFInt;
	jmp	L_ExitIntTotal;
L_HaltRFInt:
	she	0ah;     允许定时器1与0.5s时基中断。
	tmsx	001111111b;   15.625ms interrupt.
	sf	80h;          Enable the re-load function.
	mrw	R_WrkReg1,R_TempWrk1;
	mra	R_TempStatus;
	lda	R_TempAcc;		
	sie*	D_PreIntEnable+D_ExtIntEnable;		
	rts;
;*************************************************************
;V: Vector Name: V_Tmr1Int.
;V: Describe:
;V:   15.625ms Interrupt for key scan or delay time base.
;V:
;*************************************************************	
V_Tmr1Int:
	sta	R_TempAcc;
	maf	R_TempStatus;	
	mwr	R_TempWrk1,R_WrkReg1;
		
	call	F_ScanKey;	
	call	F_ChkSNDStatus;
	lda	R_KeyWakeDel;
	jz	L_Tmr1IntRet;	
		
	dec*	R_KeyWakeDel;	
L_Tmr1IntRet:
	mrw	R_WrkReg1,R_TempWrk1;
	mra	R_TempStatus;
	lda	R_TempAcc;		
	sie*	D_Tmr1IntEnable+D_PreIntEnable+D_ExtIntEnable;	
	rts;		
;**************************************************************
;V: Vector name: V_PreDiverInt.
;V: Describe:
;V:	0.5S Interrupt for timer trammsist check signal.
;V:
;**************************************************************		
V_PreDiverInt:
	sta	R_TempAcc;
	maf	R_TempStatus;	
	mwr	R_TempWrk1,R_WrkReg1;
	
	lds	R_ParLow,CMD_CC2500_SRX%16;
	lds	R_ParHigh,CMD_CC2500_SRX/16;
	call	F_CC2500WRStrobe;
	
	dec*	R_DelALMLo;
	jc	L_ExitIntTotal;
	dec*	R_DelALMHi;
	jc	L_ExitIntTotal;
	
	lds	R_DelALMLo,D_DelALMLo;
	lds	R_DelALMHi,D_DelALMHi;
	alm	010010000b;  2kHZ&2Hz;
L_ExitIntTotal:	
	lda	R_Flags1;
	jb0	L_STOPModeRet;
L_NormalModeRet:
	mrw	R_WrkReg1,R_TempWrk1;
	mra	R_TempStatus;
	lda	R_TempAcc;
	sie*	D_Tmr1IntEnable+D_PreIntEnable+D_ExtIntEnable;
	rts;
L_STOPModeRet:
	mrw	R_WrkReg1,R_TempWrk1;
	mra	R_TempStatus;
	lda	R_TempAcc;
	sie*	D_PreIntEnable+D_ExtIntEnable;
	rts;
;*************************************************************
;*************************************************************
;The include file.	
	.INCLUDE	function.asm
	.INCLUDE	cc2500.asm


.endc
;*************************************************************
.table



.endt

⌨️ 快捷键说明

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