📄 fsk_decode.asm
字号:
xor a,R_fsk_counter1
sz acc
jmp L_test_after_0B_on_off
clr flag_fskbit ;10/14
jmp fsk_endbit_2
L_test_after_0B_on_off:
set flag_ismessage
jmp L_test_FFh ;MDMF message on?
;---------------------------------------------
L_test_other_not0BH:
; mov a,31
; sub a,R_Key_Value
; snz c
; jmp L_is_Functionkey
;/// key value <=31
mov a,R_message_Length ;R_fsk_counter1
sub a,R_fsk_counter1 ;R_message_Length
snz c
ret ; > R_message_Length exit
sz flag_phone_use
ret
; mov a,88 ;253
; sub a,R_fsk_counter1
; snz c
; ret
;/// <= R_message_Length
snz pb.6 ;if ring active exit
; jmp L_exit_test_sdt
ret
sz flag_phone_use
; jmp L_exit_test_sdt
ret
clr flag_fskbit ;10/14
fsk_endbit_not:
snz flag_fskbit
jmp fsk_endbit_not
clr flag_fskbit
snz data ;pb.3
jmp p_error_not
call timer0_off
jmp fsk_startbit_not
p_error_not:
nop
ret
;/////////////////////////////
fsk_startbit_not:
nop
sz data ;pb.3 ,is start bit? and resume time
jmp fsk_startbit_not ;
call f_delay200us
call f_delay200us ;delay half bit
call timer0_on
clr flag_fskbit
mov a,8
mov R_temp3,a
clr r_fsk_data
fsk_loop1_not:
nop
snz flag_fskbit
jmp fsk_loop1_not
clr flag_fskbit
set c
snz data ;pb.3
clr c
rrc r_fsk_data
sdz R_temp3
jmp fsk_loop1_not
;// seizure a byte ok //
inc R_fsk_counter1
;// get parameter length
mov a,R_FSK_data ;***********
mov R_parameter_length,a
clr R_count_length ;count each parameter
clr flag_fskbit ;10/14
;/// ;length
fsk_endbit_1:
snz flag_fskbit
jmp fsk_endbit_1
clr flag_fskbit
snz data ;pb.3
jmp p_error_1
call timer0_off
jmp fsk_startbit_1
p_error_1:
nop
ret
;/////////////////////////////
fsk_startbit_1:
nop
sz data ;pb.3 ,is start bit? and resume time
jmp fsk_startbit_1 ;
call F_delay200us
call F_delay200us ;delay half bit
call timer0_on
clr flag_fskbit
mov a,8
mov R_temp3,a
clr r_fsk_data
fsk_loop1_1:
nop
snz flag_fskbit
jmp fsk_loop1_1
clr flag_fskbit
set c
snz data ;pb.3
clr c
rrc r_fsk_data
sdz R_temp3
jmp fsk_loop1_1
;// seizure a byte ok //
inc R_fsk_counter1
inc R_count_length
mov a,R_count_length
;; inc acc
;; sub a,R_parameter_length
;; snz c
;; jmp fsk_endbit_80h_b ;read the next parameter type!
xor a,R_parameter_length
sz acc
jmp fsk_endbit_1_b
jmp fsk_endbit_80h_b ;read the next parameter type!
;/// R_count_length <> R_parameter_length
fsk_endbit_1_b:
; sz flag_phone_use
; ret
clr flag_fskbit ;10/14
jmp fsk_endbit_1 ;read this parameter word continue
fsk_endbit_80h_b:
sz flag_phone_use
ret
;/// get parameter type
clr flag_fskbit ;10/14
;//
fsk_endbit_1k:
snz flag_fskbit
jmp fsk_endbit_1k
clr flag_fskbit
snz data ;pb.3
jmp p_error_1k
call timer0_off
jmp fsk_startbit_1k
p_error_1k:
nop
ret
;/////////////////////////////
fsk_startbit_1k:
nop
sz data ;pb.3 ,is start bit? and resume time
jmp fsk_startbit_1k ;
call F_delay200us
call F_delay200us ;delay half bit
call timer0_on
clr flag_fskbit
mov a,8
mov R_temp3,a
clr r_fsk_data
fsk_loop1_1k:
nop
snz flag_fskbit
jmp fsk_loop1_1k
clr flag_fskbit
set c
snz data ;pb.3
clr c
rrc r_fsk_data
sdz R_temp3
jmp fsk_loop1_1k
;// seizure a byte ok //
inc R_fsk_counter1
jmp L_is_parameter_type
;//
; jmp fsk_endbit_80h
;-----------------------------------------------------------------
L_test_82h:
mov a,82h
xor a,R_fsk_data
sz acc
jmp L_10_31add
;; ret
jmp L_set_have_message_test_onoff
L_10_31add:
sz flag_zj_have_ring ;zj have ring come ,can set end ring flag
set flag_endring_T ;set end ring flag
call F_turn_on_real_time
clr R_endring_t
ret
fsk_endbit_buffer:
clr flag_fskbit ;10/14
fsk_endbit:
snz flag_fskbit
jmp fsk_endbit
clr flag_fskbit
snz data ;pb.3
jmp p_error
call timer0_off
jmp fsk_startbit
p_error:
nop
L_fsk_exit:
ret
L_fsk_not_signalexit:
clr flag_message ;not message signal exit
clr pb.5
mov a,55h
mov R_fsk_sdt,a ;set receive fsk mark
ret
;----------------------------------------------------------------
F_delay20ms: ;delay
mov a,0ffh
mov R_Debounce,a
d11:
sdz R_Debounce
jmp d11
inc R_Debounce ;0ffh --> R_Debounce
d22:
sdz R_Debounce
jmp d22
ret
F_delay200us: ;delay
mov a,63 ;60
mov R_Debounce,a
d200us:
sdz R_Debounce
jmp d200us
ret
timer0_on:
mov a,90h ;timer0 mode
mov tmr0c,a
mov a,0fdh
mov tmr0h,a
mov a,18
mov tmr0l,a ;744*1.117us=833us
mov a,05h ;int enable and timer0 enable
mov intc0,a
ret
timer0_off:
clr et0i ;disable time0 int
clr tmr0c.4 ;disable time0 ton
ret
;-----------------------------------------------------------
F_Receive_SDT:
sz flag_store
ret
; snz Flag_detect_std
; ret
set pdc.2 ;set pd.2 as input
call nop4t ;wait port stable
snz pd.2
ret ;no power exit
call F_turn_on_real_time
sz flag_onhook_T
jmp L_test_onhooktime
sz flag_endring_T
jmp L_test_endringtime
ret
L_test_onhooktime:
mov a,21
sub a,R_onhook_T
snz c
jmp L_test_message_signal_11
ret ; <= 3 S exit
L_test_message_signal_11:
clr flag_onhook_T
clr R_onhook_T
jmp L_test_message_signal
L_test_endringtime:
snz Flag_endringadd_T ;endring count 255s flag
ret
mov a,104 ;end ring 6 minutes
sub a,R_endring_T
snz c
jmp L_test_message_signal_1
ret ; <= 3 S exit
L_test_message_signal_1:
clr flag_endring_T
clr flag_endringadd_T
clr flag_zj_have_ring ;clear zj have ring flag !!!!
jmp L_test_message_signal
L_test_message_signal:
call F_turn_on_real_time
set [22h].7 ;enable the line control function
; set pb.2
; set pb.4
set pbc.2
set pbc.4 ;set pb.2 ,4 as input
mov a,01011111b ;cb0-2(pa567) is output
mov pac,a
call nop4t ;wait I/O stable
STD_init: ;CB0/CB1/CB2/STD/DATA/STRDT A5/A6/A7/B2/B3/B4
; mov a,10100000b ;stutter dial tone signal come from GS1
; mov a,01100000b ;stutter dial tone signal come from GS2
; mov pa,a ;Detect STD/DT signal
clr pa.7
set pa.5 ;when detect DT signal
call nop4t ;STRDT pin go LOW
mov a,1
mov R_Time_count_H,a
mov a,140 ;255 ;count 2.1s
mov R_Time_count_L,a
set Flag_counting
call F_turn_on_time1
L_TEST_loop_200ms:
; call F_active_ring
snz Flag_counting
jmp L_exit_test_sdt
sz pb.4 ;test STRDT pin sdt function
jmp L_TEST_loop_200ms ;ret
mov a,26
mov R_SDT_signal_width,a ;initial signal width time
L_wait_it_high:
sz R_SDT_signal_width
jmp L_test_strdt
jmp L_is_message_off
L_test_strdt:
snz pb.4
jmp L_wait_it_high
mov a,22 ;14
sub a,R_SDT_signal_width ;R_Key_Value
snz c
jmp L_is_large22_noise ;is message on __|--|___|--
;/// <=22
jmp L_is_message_on
L_is_message_off:
clr flag_message ;message off pulse>=150ms
clr pb.5
mov a,0aah
mov R_fsk_sdt,a ;set receive sdt mark
jmp L_exit_test_sdt
L_is_message_on: ;message on pulse <=150ms
set flag_message
call F_turn_on_time1
mov a,0aah
mov R_fsk_sdt,a ;set receive sdt mark
L_is_large22_noise:
L_exit_test_sdt:
clr [22h].7 ;disable the line control function
; mov a,00100000b ;NW6006 pwered down
; mov pa,a
clr pa.7
set pa.5
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -