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

📄 function.asm

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



;*****************************************************************
;F: Function Name: F_ClrAllRAM.
;F:
;F:
;F:
;F:
;******************************************************************
F_ClrAllRAM:
	lds	R_WrkReg1,0;
	mvl	R_WrkReg1;
	mvh	R_WrkReg1;
	mvu	R_WrkReg1;
L_LoopClr:
	lds	R_WrkReg1,0;
	sta#	@HL;
	cphl	0ffh;
	jmp	L_LoopClr;
	rts;
;******************************************************************
;F: Function Name: F_InitalPort.
;F: 
;F:
;F:
;F:
;F:
;*******************************************************************
F_InitalPort:
	lds	R_WrkReg1,0;
	opa	R_WrkReg1;
	spa	0;
	
	lds	R_WrkReg1,0;
	opb	R_WrkReg1;
	spb	1000b;
	
	opc	R_WrkReg1;
	spc	11000b;
	
	opd	R_WrkReg1;
	spd	10000b;

	tmsx	001111111b;   15.625ms interrupt.
	sf	80h;          Enable the re-load function.			
	rts;		
;***********************************************************************
;F: File Name: F_InitContrlPin.
;F:
;F:
;F:
;F:
;***********************************************************************
F_InitContrlPin:
	lds	R_WrkReg1,0001b;
	lcp	1,R_WrkReg1;
	lcp	2,R_WrkReg1;
	lcp	3,R_WrkReg1;
	lcp	4,R_WrkReg1;
	lcp	5,R_WrkReg1;
	lcp	6,R_WrkReg1;
	lcp	7,R_WrkReg1;
	lcp	8,R_WrkReg1;
	lcp	9,R_WrkReg1;
	lcp	10,R_WrkReg1;
	lcp	11,R_WrkReg1;
	lcp	12,R_WrkReg1;
	lcp	13,R_WrkReg1;
	lcp	14,R_WrkReg1;
	lcp	15,R_WrkReg1;
	lcp	16,R_WrkReg1;
	lds	R_WrkReg1,0;
	lcp	17,R_WrkReg1;
	rts;	
;*********************************************************************
;F: Function Name: F_ScanKey.
;F:
;F:
;F:
;F:
;*********************************************************************
F_ScanKey:
	subi	R_KeyStep,D_DelStep;
	jz	L_DelStepPro;
	subi	R_KeyStep,D_WaitStep;
	jz	L_WaitStepPro;
	subi	R_KeyStep,D_RelaseStep;
	jz	L_RelaseStepPro;
L_ChkStepPro:
	ipc	R_IntWrk;
	jz	L_ScanKeyRet;

	lds	R_KeyStep,D_DelStep;
	jmp	L_ScanKeyRet;
;=============================================
;=============================================
L_DelStepPro:
	lds	R_KeyStep,D_WaitStep;
	ipc	R_IntWrk;
	jb0	L_K1Is;
	jb1	L_K2Is;
	jb2	L_K3Is;
	jmp	L_ErrKey;
L_K1Is:
	lds	R_KeyVal,1;
	jmp	L_ScanKeyRet;
L_K2Is:
	lds	R_KeyVal,2;
	jmp	L_ScanKeyRet;
L_K3Is:
	lds	R_KeyVal,4;
	jmp	L_ScanKeyRet;
;=============================================
;=============================================
L_WaitStepPro:	
	ipc	R_IntWrk;
	jnz	L_ScanKeyRet;
	
	lds	R_KeyStep,D_RelaseStep;
	jmp	L_ScanKeyRet;
;=============================================
;=============================================	
L_RelaseStepPro:
	ipc	R_IntWrk;
	jz	L_ErrKey;

	lds	R_KeyStep,D_WaitStep;
	jmp	L_ScanKeyRet;
L_ErrKey:
	lds	R_KeyStep,0;
L_ScanKeyRet:
	rts;	
;*****************************************************************
;F: Function Name: F_ProKeyVal.
;F:
;F:
;F: 
;F:		
;******************************************************************
F_ProKeyVal:
	subi	R_KeyVal,D_SelKey;
	jz	L_ProSelKey;
	subi	R_KeyVal,D_RecorderKey;
	jz	L_ProRecordKey;
	subi	R_KeyVal,D_PlayKey;
	jz	L_ProPlayKey;
	jmp	L_ProKeyValRet;	
;=========================================
;=========================================
L_ProSelKey:
	lds	R_CountTimeLow,0;
	lds	R_CountTimeHigh,0;
	call	F_StopAll;
	lds	R_WrkReg1,3;
	sub	R_CurrentMusic;
	jc	L_ResetFirtMusic;

	inc*	R_CurrentMusic;
	jmp	L_TotalLighLedSel;
L_ResetFirtMusic:
	lds	R_CurrentMusic,0;
L_TotalLighLedSel:	
	call	F_CloseLED1;
	call	F_LighLEDSel;
	jmp	L_ProKeyValRet;	
;=========================================
;=========================================
L_ProRecordKey:
	lds	R_CountTimeLow,0;
	lds	R_CountTimeHigh,0;

	lda	R_Flags1;
	jb1	L_CloseRecord;
L_OpenRecord:
	call	F_OpenVoicePW;
	ori*	R_Flags1,B_Recording;
	andi*	R_Flags1,1011b;
	call	F_CloseSelPin;
	call	F_RecordStart;
	call	F_LighLEDSel;
	lds	R_DelChk,15;
	jmp	L_ProKeyValRet;
;=================================
L_CloseRecord:	
	andi*	R_Flags1,1001b;
	call	F_StopAll;
	call	F_CloseLED1;
	call	F_CloseVoicePW;
	jmp	L_ProKeyValRet;
;=========================================
;=========================================
L_ProPlayKey:
	lds	R_CountTimeLow,0;
	lds	R_CountTimeHigh,0;

	lda	R_Flags1;
	jb2	L_ClosePlay;
L_OpenPlay:	
	call	F_OpenVoicePW;
	andi*	R_Flags1,1101b;
	call	F_CloseSelPin;
	call	F_PlayStart;
	call	F_CloseSelPin;
	call	F_LighLEDSel;
	ori*	R_Flags1,B_Playing;
	lds	R_DelChk,15;
	jmp	L_ProKeyValRet;
;=================================
L_ClosePlay:
	andi*	R_Flags1,1001b;
	call	F_StopAll;
	call	F_CloseLED1;
	call	F_CloseVoicePW;
L_ProKeyValRet:
	lds	R_KeyVal,0;
	rts;
;****************************************************************
;F: Function Name: F_RecordStart.
;F:
;F:
;F:
;F:
;****************************************************************
F_RecordStart:
	lds	R_WrkReg1,0;
	lcp	R_REnBuf,R_WrkReg1;
	
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_WrkReg1,0;
	lcp	R_CEnBuf,R_WrkReg1;
	
	
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	call	F_StrobeSel;
	
	lds	R_WrkReg1,0001;
	lcp	R_PlayLEDBuf,R_WrkReg1;
	lds	R_WrkReg1,0;
	lcp	R_RecLEDBuf,R_WrkReg1;
L_StaRedRet:
	rts;
;****************************************************************
;F: Function Name: F_PlayStart.
;F:
;F:
;F:
;F:
;****************************************************************
F_PlayStart:
	lds	R_WrkReg1,D_REn;
	lcp	R_REnBuf,R_WrkReg1;
	
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_WrkReg1,0;
	lcp	R_CEnBuf,R_WrkReg1;
	
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	call	F_StrobeSel;
	
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;

	lds	R_WrkReg1,0;
	lcp	R_PlayLEDBuf,R_WrkReg1;
	lds	R_WrkReg1,D_RecorderLED;
	lcp	R_RecLEDBuf,R_WrkReg1;
L_PlayStaRet:
	rts;	
;*****************************************************************
;F: Function Name: F_StrobeSel.
;F:
;F:
;F:
;*****************************************************************
F_StrobeSel:
	lds	R_WrkReg1,0001B;
	lcp	R_M1Buf,R_WrkReg1;
	lcp	R_M2Buf,R_WrkReg1;
	lcp	R_M3Buf,R_WrkReg1;
	lcp	R_M4Buf,R_WrkReg1;

	subi	R_CurrentMusic,0;
	jz	L_SelSeg1;
	subi	R_CurrentMusic,1;
	jz	L_SelSeg2;
	subi	R_CurrentMusic,2;
	jz	L_SelSeg3;
L_SelSeg4:
	lds	R_CurrentMusic,3;
	lds	R_WrkReg1,0;
	lcp	R_M4Buf,R_WrkReg1;
	jmp	L_StrobeRet;
;=====================================	
L_SelSeg3:
	lds	R_WrkReg1,0;
	lcp	R_M3Buf,R_WrkReg1;
	jmp	L_StrobeRet;
;=====================================	
L_SelSeg2:
	lds	R_WrkReg1,0;
	lcp	R_M2Buf,R_WrkReg1;
	jmp	L_StrobeRet;
;=====================================	
L_SelSeg1:	
	lds	R_WrkReg1,0;
	lcp	R_M1Buf,R_WrkReg1;	
L_StrobeRet:
	rts;		
;*****************************************************************
;F: Function Name: F_ChkSNDStatus.
;F:
;F:
;F:
;*****************************************************************
F_ChkSNDStatus:
	lda	R_DelChk;
	jz	L_DelLaterChk;
	
	dec*	R_DelChk;
	jmp	L_ChkStatusRet;
L_DelLaterChk:
	lda	R_Flags1;
	jb1	L_ResetSleepTime;
	jb2	L_ResetSleepTime;
	jmp	L_ChkStatusRet;		
L_ResetSleepTime:
	lds	R_KeyWakeDel,D_KeyWakeDel;
	ipa	R_WrkReg1;
	jb3	L_ChkCountHigh;
	jmp	L_ClrLowCount;
L_ChkCountHigh:	
	inc*	R_CountTimeLow;
	jnz	L_CmpLowOvr;
	inc*	R_CountTimeHigh;
L_CmpLowOvr:
	lds	R_IntWrk,80%16;
	sub	R_CountTimeLow;
	lds	R_IntWrk,80/16;
	sbc	R_CountTimeHigh;
	jc	L_RandomStop;
	jmp	L_ChkStatusRet;
L_ClrLowCount:
	lds	R_CountTimeLow,0;
	lds	R_CountTimeHigh,0;	
	jmp	L_ChkStatusRet;
L_RandomStop:	
	call	F_StopAll;
	call	F_CloseLED1;
	call	F_CloseVoicePW;
L_ChkStatusRet:
	rts;
;*****************************************************************
;F: Function Name: F_LighLEDSel.
;F:
;F:
;F:
;F:
;*****************************************************************
F_LighLEDSel:
	call	F_CloseLED;
	subi	R_CurrentMusic,0;
	jz	L_LighLED1;
	subi	R_CurrentMusic,1;
	jz	L_LighLED2;
	subi	R_CurrentMusic,2;
	jz	L_LighLED3;
L_LighLED4:
	lds	R_CurrentMusic,3;
	lds	R_WrkReg1,0;
	lcp	R_LED4Buf,R_WrkReg1;
	jmp	L_LighLEDRet;
;=====================================	
L_LighLED3:
	lds	R_WrkReg1,0;
	lcp	R_LED3Buf,R_WrkReg1;
	jmp	L_LighLEDRet;
;=====================================	
L_LighLED2:
	lds	R_WrkReg1,0;
	lcp	R_LED2Buf,R_WrkReg1;
	jmp	L_LighLEDRet;
;=====================================	
L_LighLED1:	
	lds	R_WrkReg1,0;
	lcp	R_LED1Buf,R_WrkReg1;	
L_LighLEDRet:
	rts;	
;************************************************************
;F: Function Name: F_CloseLED.
;F:
;F:
;F:
;F:
;************************************************************
F_CloseLED1:
	lds	R_WrkReg1,D_RecorderLED;
	lcp	R_PlayLEDBuf,R_WrkReg1;
	lcp	R_RecLEDBuf,R_WrkReg1;
F_CloseLED:
	lds	R_WrkReg1,0001b;
	lcp	R_LED1Buf,R_WrkReg1;
	lcp	R_LED2Buf,R_WrkReg1;
	lcp	R_LED3Buf,R_WrkReg1;
	lcp	R_LED4Buf,R_WrkReg1;	
	rts;
;************************************************************
;F: Function Name: F_StopAll.
;F:
;F:
;F:
;F:
;F:
;*************************************************************
F_StopAll:
	andi*	R_Flags1,1001b;
	lds	R_WrkReg1,D_CEn;
	lcp	R_CEnBuf,R_WrkReg1;
	lcp	R_REnBuf,R_WrkReg1;
F_CloseSelPin:	
	lds	R_WrkReg1,0001B;
	lcp	R_M1Buf,R_WrkReg1;
	lcp	R_M2Buf,R_WrkReg1;
	lcp	R_M3Buf,R_WrkReg1;
	lcp	R_M4Buf,R_WrkReg1;
	rts;		
;*************************************************************
;F: Function Name: F_ChkRFCMD.
;F:
;F:
;F:
;F:
;*************************************************************
F_ChkRFCMD:
	lda	R_Flags2;
	jb0	L_ProRFCMD;	
	jmp	L_ChkRFCMDRet;	
L_ProRFCMD:
	andi*	R_Flags2,1110b;
	lda	R_RecCommandHigh;
	jnz	L_ChkRFCMDRet;

	subi	R_RecCommandLow,D_K1Command;
	jz	L_ProRFK1;
	subi	R_RecCommandLow,D_K2Command;
	jz	L_ProRFK2;
	subi	R_RecCommandLow,D_K3Command;
	jz	L_ProRFK3;
	subi	R_RecCommandLow,D_K4Command;
	jnz	L_ChkRFCMDRet;
L_ProRFK4:
	lds	R_CurrentMusic,3;
	jmp	L_TotalRFPlay;
;=============================================
;=============================================
L_ProRFK3:
	lds	R_CurrentMusic,2;
	jmp	L_TotalRFPlay;
;=============================================
;=============================================
L_ProRFK2:
	lds	R_CurrentMusic,1;
	jmp	L_TotalRFPlay;
;=============================================
;=============================================
L_ProRFK1:
	lds	R_CurrentMusic,0;
L_TotalRFPlay:
	jmp	L_ProPlayKey;
L_ChkRFCMDRet:
	rts;	
;*********************************************************
;F; Function Name: F_CloseVoicePW.
;F:
;F:
;F:
;F:
;*********************************************************
F_CloseVoicePW:
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_WrkReg1,0;
	lcp	R_VoicePWBuf,R_WrkReg1;
	rts;
;**********************************************************
;F: Function Name: F_OpenVoicePW.
;F:
;F:
;F:
;F:
;**********************************************************	
F_OpenVoicePW:
	lds	R_WrkReg1,1;
	lcp	R_VoicePWBuf,R_WrkReg1;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	lds	R_Delay,15;
	call	F_DelxxUS;
	rts;




		

⌨️ 快捷键说明

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