📄 recordertx.asm.bak
字号:
;*********************************************************************
;P: Project Name: recorderTX.
;P: Body: TM8706+CC2500.
;P: Build Date: 2006/11/2.
;P: Version: v1.0
;*********************************************************************
.CHIP TM8706
.data
org 000h;
R_AddrCode dn 1;
R_KeyWakeDel dn 1;
D_KeyWakeDel equ 6; 15.625ms x 6 =93.7ms.
R_TempAcc dn 1;
R_TempStatus dn 1;
R_TimerSendLo dn 2;
R_TimerSendHi equ R_TimerSendLo+1;
D_TimerSendLo equ 10;
D_TimerSendHi equ 0;
R_SendCommandLo dn 2;
R_SendCommandHi equ R_SendCommandLo+1;
D_ScanCommand equ 0ffh;
D_K1Command equ 01h;
D_K2Commnad equ 02h;
D_K3Command equ 04h;
D_K4Command equ 08h;
R_Delay dn 1;
R_cc2500WRBuf dn 1;
R_cc2500Count dn 1;
R_ParLow dn 2;
R_ParHigh equ R_ParLow+1;
R_LoopSend dn 1;
R_RdAddrLow dn 2;
R_RdAddrHigh equ R_RdAddrLow+1;
R_TempWrk dn 1;
org 070h;
R_IntWrk dn 1;Only use in interrupt for temp variay.
R_WrkReg1 dn 1;
R_WrkReg2 dn 2;
R_WrkReg3 dn 3;
R_Flags1 dn 1;
B_NormalStop equ 0001b; 0: normal mode; 1: STOP Mode.
B_KeySend equ 0010b;
R_KeyStep dn 1;
D_ChkStep equ 0;
D_DelStep equ 1;
D_WaitStep equ 2;
D_RelaseStep equ 3;
R_KeyVal dn 1;
D_K1Key equ 1;
D_K2Key equ 2;
D_K3Key equ 4;
D_K4Key equ 8;
R_PortA dn 1;
;==================================================
;==================================================
;Define the constrant.
D_CSn equ 0100b; PortA Bit3.
D_NCSn equ 1011b;
D_SCLK equ 0010b; PortA Bit2.
D_NSCLK equ 1101b;
D_SI equ 0001b; PortA Bit1. cc2500 input port.
D_NSI equ 1110b;
D_SO equ 1000b; PortB bIT4. cc2500 output port.
D_NSO equ 0111b;
D_LowBat equ 0100b; PortB bit3.
D_NLowBat equ 1011b;
D_GDO2 equ 0010b; PortB bit2. cc2500 GDO2 Port.
D_NGDO2 equ 1101b;
D_GDO1 equ 0001b; PortB Bit1. cc2500 GDO1 Port.
D_NGDO1 equ 1110b;
D_PreIntEnable equ 00001000b; Enable the pre-divider interrupt.
D_Tmr1IntEnable equ 00000010b; Enable the timer1 interrupt.
D_RFLED equ 0001b;
D_LowBatLED equ 0001b;
R_RFLEDBuf equ 1;
R_LowBatLEDBuf equ 2;
.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_IntPinInt:
V_IOC_DInt:
V_Tmr2Int:
V_KeyMatrixInt:
rts;
;=============================================
;=============================================
V_Reset:
fast;
call F_ClrAllRAM;
call F_InitalPort;
call F_InitalCC2500;
; sie* 0;
;L_Loopssfd:
; lds R_RdAddrLow,10;
; lds R_RdAddrHigh,0;
; call F_ReadCC2500Reg;
;
; nop;
; nop;
; jmp L_Loopssfd
L_MainLoop:
lda R_KeyWakeDel;
jz L_EntryHalt;
lda R_KeyVal;
jz L_MainLoop;
lds R_LoopSend,1;3;
ori* R_Flags1,B_KeySend;
lds R_WrkReg1,0;
lcp R_RFLEDBuf,R_WrkReg1;
L_LoopKeySend:
lda R_KeyVal;
sta R_SendCommandLo;
lds R_SendCommandHi,0;
call F_SendRFCommand;
dec* R_LoopSend;
jnz L_LoopKeySend;
lds R_WrkReg1,D_RFLED;
lcp R_RFLEDBuf,R_WrkReg1;
andi* R_Flags1,1101b;
lds R_KeyVal,0;
lds R_TimerSendLo,D_TimerSendLo;
lds R_TimerSendHi,D_TimerSendHi;
jmp L_MainLoop;
;=======================================
L_EntryHalt:
sca 10h;
rf 80h;
ori* R_Flags1,B_NormalStop;
sie* D_PreIntEnable;
halt;
nop;
nop;
nop;
lds R_KeyStep,0;
andi* R_Flags1,1110b;
lds R_KeyWakeDel,D_KeyWakeDel;
tmsx 001111111b; 15.625ms interrupt.
sf 80h; Enable the re-load function.
sie* D_Tmr1IntEnable+D_PreIntEnable;
jmp L_MainLoop;
;*************************************************************
;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_TempWrk,R_WrkReg1;
call F_ScanKey;
lda R_KeyWakeDel;
jz L_Tmr1IntRet;
dec* R_KeyWakeDel;
L_Tmr1IntRet:
mrw R_WrkReg1,R_TempWrk;
mra R_TempStatus;
lda R_TempAcc;
sie* D_Tmr1IntEnable+D_PreIntEnable;
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_TempWrk,R_WrkReg1;
call F_ChkLowBatter;
dec* R_TimerSendLo;
jc L_PreIntRet;
dec* R_TimerSendHi;
jc L_PreIntRet;
lds R_TimerSendLo,D_TimerSendLo;
lds R_TimerSendHi,D_TimerSendHi;
lda R_Flags1;
jb1 L_PreIntRet; 主程式正在发射中断不发射。
lds R_WrkReg1,0;
lcp R_RFLEDBuf,R_WrkReg1;
lds R_LoopSend,3;
L_LoopSendIs:
lds R_IntWrk,D_ScanCommand%16;
sta R_SendCommandLo;
lds R_IntWrk,D_ScanCommand/16;
sta R_SendCommandHi;
call F_SendRFCommand;
dec* R_LoopSend;
jnz L_LoopSendIs;
lds R_WrkReg1,D_RFLED;
lcp R_RFLEDBuf,R_WrkReg1;
L_PreIntRet:
lda R_Flags1;
jb0 L_STOPModeRet;
L_NormalModeRet:
mrw R_WrkReg1,R_TempWrk;
mra R_TempStatus;
lda R_TempAcc;
sie* D_Tmr1IntEnable+D_PreIntEnable;
rts;
L_STOPModeRet:
mrw R_WrkReg1,R_TempWrk;
mra R_TempStatus;
lda R_TempAcc;
sie* D_PreIntEnable;
rts;
;**************************************************************
;The Inlude file.
.INCLUDE function.asm
.INCLUDE cc2500.asm
.endc
;*************************************************************
;
.table
.endt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -