📄 cid.lst
字号:
<
00008DC4 04 71 10 00 < .DW P_Seg4, B_Com4, P_Seg4, B_Com5, P_Seg4, B_Com6;
04 71 20 00
04 71 40 00
00008DCA 05 71 10 00 < .DW P_Seg5, B_Com4, P_Seg5, B_Com5, P_Seg5, B_Com6, P_Seg5, B_Com7,0;
05 71 20 00
05 71 40 00
05 71 80 00
00 00
< //-----------------------------------------------------------------------
//----------------------------------------------------------------------
00008DD3 .Code
_main:
00008DD3 40 F1 INT OFF; //Disable Interrupt
00008DD4 09 93 AA 55 R1 = 0x55AA;
00008DD6 19 D3 16 70 [P_WatchdogClr] = R1 // reset watchdog
00008DD8 40 92 R1 = 0;
00008DD9 19 D3 12 70 [P_WakeUp] = R1;
00008DDB 19 D3 10 70 [P_Int] = R1;
00008DDD 19 D3 14 70 [P_IoaWakeUp] = R1;
00008DDF 42 92 R1 = B_NormalCpuClock;
00008DE0 19 D3 15 70 [P_SystemClock] = R1;
00008DE2 09 93 AA 55 r1 = 0x55aa; //clear Watchdog
00008DE4 19 D3 16 70 [P_WatchdogClr] = r1;
00008DE6 08 91 FF 03 sp = 0x03FF; //Initial stack
00008DE8 09 93 5D C0 r1 = B_2Hz+B_128Hz+B_512Hz+B_8KHz+B_Enable32768+B_Strong32768;
00008DEA 19 D3 18 70 [P_TimeBaseSet] = r1; //Initial TimeBaseSet
00008DEC 11 93 13 70 r1 = [P_WakeUpClr];
00008DEE 19 D3 13 70 [P_WakeUpClr] = r1; //clear Wake Up Register
00008DF0 40 92 r1 = 0; //Set IOA0~IOA7 as input port
00008DF1 19 D3 02 70 [P_IOA_Dir] = r1;
00008DF3 09 93 FF 00 r1 = 0x00FF; //Set IOB0~7 as output port
00008DF5 19 D3 07 70 [P_IOB_Dir] = r1;
00008DF7 09 93 00 FF r1 = 0xFF00; //Enable Internal Pull-High for IOA0~7
00008DF9 19 D3 03 70 [P_IOA_PullR] = r1;
00008DFB 09 93 FF 00 R1 = 0x00FF;
00008DFD 19 D3 0A 70 [P_IOC_Dir] = R1;
00008DFF 19 D3 0D 70 [P_IOD_Dir] = R1;
00008E01 09 93 80 00 R1 = 0x0080; //B_HFO -> 0, B_Mute -> 0, B_DP -> 1
00008E03 19 D3 05 70 [P_IOB_Data] = R1;
00008E05 40 92 R1 = 0;
00008E06 19 D3 08 70 [P_IOC_Data] = R1;
00008E08 19 D3 0B 70 [P_IOD_Data] = R1;
00008E0A 19 D3 2E 70 [P_LineDetCtrl] = R1;
00008E0C 09 93 83 00 R1 = B_EnRiDet+0x0003;
00008E0E 19 D3 28 70 [P_RiDet] = R1;
00008E10 43 92 R1 = 0x0003;
00008E11 19 D3 0E 70 [P_IOCD_Ctrl] = R1;
00008E13 40 94 r2 = 0;
00008E14 40 92 R1 = 0;
ClrRAMLoop:
00008E15 D1 D4 [R1++] = R2;
00008E16 09 43 FF 03 CMP R1,0x03FF;
00008E18 44 8E JBE ClrRAMLoop;
00008E19 40 F0 4E 8C CALL F_ClrLcd;
00008E1B 09 93 CF 00 r1 = 0x00cf; //Enable Lcd Display
00008E1D 19 D3 20 70 [P_LcdCtrl] = r1;
00008E1F 11 93 C5 00 R1 = [CidNumber];
00008E21 40 F0 D9 8B CALL F_ShowCidNumber;
00008E23 42 92 R1 = 2;
00008E24 0D 9B A2 8C BP = Digit4;
00008E26 40 F0 3B 8C CALL F_ShowDigit;
00008E28 4A 92 R1 = 0x000A;
00008E29 0D 9B B1 8C BP = Digit5;
00008E2B 40 F0 3B 8C CALL F_ShowDigit;
00008E2D 4A 92 R1 = 0x000A;
00008E2E 0D 9B C0 8C BP = Digit6;
00008E30 40 F0 3B 8C CALL F_ShowDigit;
00008E32 45 92 R1 = 5;
00008E33 0D 9B CF 8C BP = Digit7;
00008E35 40 F0 3B 8C CALL F_ShowDigit;
00008E37 60 92 R1 = B_T2KHzInt;
00008E38 19 D3 10 70 [P_Int] = r1;
00008E3A 43 F1 INT FIQ,IRQ; //Enable FIQ and IRQ
//----------------------------------------------------------------------
MainLoop:
00008E3B 09 93 AA 55 R1 = 0x55AA;
00008E3D 19 D3 16 70 [P_WatchdogClr] = R1 // reset watchdog
00008E3F 12 95 0C 70 R2 = [P_IOD_Buf];
00008E41 0A B5 F3 FF R2 &= 0xFFF3;
00008E43 C0 93 R1 = [CidFlag];
00008E44 09 C3 00 80 TEST R1,B_CidIsFsk;
00008E46 01 5E JZ MainLoop_10;
00008E47 44 A4 R2 |= 0x0004;
MainLoop_10:
00008E48 09 C3 00 40 TEST R1,B_CidIsDtmf;
00008E4A 01 5E JZ MainLoop_15;
00008E4B 48 A4 R2 |= 0x0008;
MainLoop_15:
00008E4C 1A D5 0B 70 [P_IOD_Data] = R2;
00008E4E 40 F0 53 8E call F_DecodeCid
00008E50 56 EE jmp MainLoop
//-----------------------------------------------------------------------
V_DecodeCid:
00008E51 59 8E V_WaitCid: .DW F_WaitCid;
.const S_WaitCid = V_WaitCid - V_DecodeCid;
00008E52 69 8E V_ReceiveCid: .DW F_ReceiveCid;
.const S_ReceiveCid = V_ReceiveCid - V_DecodeCid;
//-----------------------------------------------------------------------
F_DecodeCid:
00008E53 11 93 C0 00 R1 = [CidState];
00008E55 09 03 51 8E R1 += V_DecodeCid;
00008E57 C1 9E PC = [R1];
00008E58 C1 9E PC = [R1];
//-----------------------------------------------------------------------
F_WaitCid:
.ifdef BoxDetDtmf
CALL _F_EnableBoxDetDTMF;
.else
00008E59 09 93 00 08 R1 = 0x0800; //FSK reject power
00008E5B 0A 95 00 20 R2 = 0x2000; //DTMF reject power
00008E5D 0B 97 FF FF R3 = 0xFFFF; //0: Not detect DTMF
//Non Zero: detect DTMF
00008E5F 40 F0 64 87 CALL _F_EnableCidDecoder
.endif
00008E61 09 93 00 0C R1 = 6*512;
00008E63 19 D3 BF 00 [RW_512HzTmr] = R1;
00008E65 41 92 R1 = S_ReceiveCid;
00008E66 19 D3 C0 00 [CidState] = R1;
00008E68 90 9A RETF;
//-----------------------------------------------------------------------
F_ReceiveCid:
00008E69 C0 93 r1 = [CidFlag]
00008E6A 09 C3 00 01 test r1,B_FskIsOver //Check if Have FSK signal and it is over
00008E6C 02 5E jz CheckDtmf;
00008E6D 80 FE E8 8E goto ParseFskCid; //Yes, parse FSK data
CheckDtmf:
00008E6F 09 C3 00 02 test r1,B_DtmfReady //Check if sample data of DTMF is ready
00008E71 1C 5E jz CheckIfTimeOut //No, check if CID time out
00008E72 40 F0 2A 88 call _F_DtmfDecoder //Call decode function to get DTMF data
00008E74 40 F1 int off
00008E75 C0 95 r2 = [CidFlag]
00008E76 0A B5 FF FD r2 &= ~B_DtmfReady //clear flag of DTMF sample data ready
00008E78 C0 D5 [CidFlag] = r2
00008E79 43 F1 int fiq,irq
00008E7A 50 C2 test r1,0x0010; //Check if found DTMF Data
00008E7B 09 5E jz CheckIfFsk;
00008E7C C0 93 R1 = [CidFlag];
00008E7D 09 C3 00 40 TEST R1,B_CidIsDtmf;
00008E7F 04 5E JZ DtmfFrameNotStart;
.ifdef BoxDetDtmf
R1 = 50*512/1000;
.else
00008E80 09 93 99 00 R1 = 300*512/1000;
.endif
00008E82 19 D3 BF 00 [RW_512HzTmr] = R1;
DtmfFrameNotStart:
00008E84 90 9A RETF;
CheckIfFsk:
00008E85 C0 93 R1 = [CidFlag];
00008E86 09 C3 00 80 TEST R1,B_CidIsFsk;
00008E88 45 5E JZ DtmfFrameNotStart;
00008E89 09 93 00 08 R1 = 4*512;
00008E8B 19 D3 BF 00 [RW_512HzTmr] = R1;
00008E8D 90 9A RETF;
//----------------------------------------------------------------------
CheckIfTimeOut:
00008E8E 11 93 BF 00 r1 = [RW_512HzTmr]
00008E90 4D 4E jnz DtmfFrameNotStart;
00008E91 40 F0 A4 87 call _F_DisableCidDecoder;
00008E93 11 93 8D 00 R1 = [_TmpDtmfCidBufPtr];
00008E95 02 4E JNZ ReceivedSomeNumber;
00008E96 80 FE F5 8E GoTo WaitNextCid;
ReceivedSomeNumber:
.ifdef BoxDetDtmf
R1 = [_TmpDtmfCidBuf];
R1 &= 0x000F;
BP = Digit13;
CALL F_ShowDigit;
CALL _F_ClrTmpCidBuf;
CALL _F_EnableBoxDetDTMF;
RETF;
.else
00008E98 11 93 8D 00 R1 = [_TmpDtmfCidBufPtr];
00008E9A 43 42 CMP R1,3;
00008E9B 02 1E JAE ReceivedOneCall;
00008E9C 80 FE F5 8E GoTo WaitNextCid;
ReceivedOneCall:
00008E9E 40 F0 4E 8C call F_ClrLcd //clear LCD
00008EA0 11 93 C5 00 R1 = [CidNumber];
00008EA2 41 02 R1 += 1;
00008EA3 19 D3 C5 00 [CidNumber] = R1;
00008EA5 40 F0 D9 8B CALL F_ShowCidNumber;
00008EA7 11 93 8D 00 R1 = [_TmpDtmfCidBufPtr];
00008EA9 19 D3 C6 00 [RPtr_CidBuf] = R1;
00008EAB 0D 9B 8E 00 BP = _TmpDtmfCidBuf;
00008EAD 0C 99 C7 00 R4 = SW_CidBuf;
00008EAF D5 92 R1 = [BP++];
00008EB0 D4 D2 [R4++] = R1;
00008EB1 D5 92 R1 = [BP++];
00008EB2 D4 D2 [R4++] = R1;
00008EB3 D5 92 R1 = [BP++];
00008EB4 D4 D2 [R4++] = R1;
00008EB5 D5 92 R1 = [BP++];
00008EB6 D4 D2 [R4++] = R1;
00008EB7 D5 92 R1 = [BP++];
00008EB8 D4 D2 [R4++] = R1;
00008EB9 D5 92
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -