?? recorderrx.asm.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 + -