?? fsk_decode.asm
字號(hào):
;------------------------------------------------------------------
;// Function: detect FSK signal,if have voice message
;// set flag_message=1
;------------------------------------------------------------------
F_receive_fsk:
sz flag_store
ret
call F_key_scan
sz R_key_value
ret
clr R_temp_fsk
clr R_message_Length
clr R_count_length
clr R_parameter_length
clr R_fsk_counter1
; snz pb.6
; ret
clr flag_ismessage
set pbc.3
set pbc.4 ;set pb.3 4 as input
mov a,01011111b ;cb0-2(pa567) is output
mov pac,a ;hardware let CB1=H
call nop4t ;wait I/O stable
fsk_init:
; mov a,11000000b ;A5/A6/A7 ,CB0/CB1/CB2
set pa.7
clr pa.5
call nop4t
; mov a,01000000b ;A5/A6/A7 ,CB0/CB1/CB2
; mov pa,a ;mode0
; nop
; nop
; nop
; nop
fsk_init1:
clr R_fsk_counter1
clr R_Time_count_H
mov a,11 ;130 ;count 700ms
mov R_Time_count_L,a
set Flag_counting
call F_turn_on_time1
fsk_start:
; mov a,
; mov R_temp_fsk,a
call F_key_scan
mov a,R_key_value
xor a,D_headset_key
sz acc
jmp L_is_not_headsetkey9 ;debug add 9/12
call F_key_process
ret
L_is_not_headsetkey9:
mov a,R_key_value
xor a,D_star_key
sz acc
jmp L_is_not_startkey9 ;debug add 9/12
call F_key_process
ret
L_is_not_startkey9:
mov a,13
sub a,R_Key_Value
snz c
ret
;; jmp L_is_Functionkey
;/// key value <=31
; mov a,R_temp_fsk
; mov pa,a
snz pb.6 ;if ring active exit
ret
sz flag_phone_use
ret
snz Flag_counting
ret
sz cd ;there is fsk?
jmp fsk_start
clr R_Time_count_H
mov a,3 ;count 700ms
mov R_Time_count_L,a
set Flag_counting
call F_turn_on_time1
fsk_start1:
; mov a,R_temp_fsk
; mov pa,a
; call F_key_scan
; mov a,R_key_value
; xor a,D_headset_key
; sz acc
; jmp L_is_not_headsetkey10 ;debug add 9/12
; call F_key_process
; clr R_key_value
; ret
;L_is_not_headsetkey10:
; mov a,R_temp_fsk
; mov pa,a
snz pb.6 ;if ring active exit
ret
sz flag_phone_use
ret
snz Flag_counting
ret
snz data ;pb.3
jmp fsk_start1
call timer0_off
clr R_Time_count_H
mov a,20 ;count 700ms
mov R_Time_count_L,a
set Flag_counting
call F_turn_on_time1
fsk_ch: ;is ch seizure?
snz pb.6 ;if ring active exit
ret
sz flag_phone_use
ret
snz Flag_counting
;; jmp L_fsk_exit
ret
sz data ;pb.3
jmp fsk_ch ;
call f_delay200us
call f_delay200us ;delay half bit
call timer0_on
clr flag_fskbit
mov a,8
mov R_temp3,a
fsk_ch1:
nop
snz flag_fskbit
jmp fsk_ch1
clr flag_fskbit
snz data ;pb.3
jmp fsk_start
fsk_ch2:
nop
snz flag_fskbit
jmp fsk_ch2
clr flag_fskbit
sz data ;pb.3
jmp fsk_start
sdz R_temp3
jmp fsk_ch1
;// there is mark
clr R_temp3
clr R_Time_count_H
mov a,80 ;count 600ms
mov R_Time_count_L,a
set Flag_counting
call F_turn_on_time1
fsk_mark:
snz Flag_counting
ret
snz flag_fskbit
jmp fsk_mark
clr flag_fskbit
snz data ;pb.3
clr R_temp3
inc R_temp3
mov a,8
sub a,R_temp3
;; sz acc
snz c
jmp L_Mark_ok
;// <= 7 //
jmp fsk_mark
L_Mark_ok:
call timer0_off
fsk_startbit:
nop
sz data ;pb.3 ,is start bit? and resume time
jmp fsk_startbit ;
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:
nop
snz flag_fskbit
jmp fsk_loop1
clr flag_fskbit
set c
snz data ;pb.3
clr c
rrc r_fsk_data
sdz R_temp3
jmp fsk_loop1
;// seizure a byte ok //
inc R_fsk_counter1
mov a,1
xor a,R_fsk_counter1
sz acc
jmp L_test_Onoff ;isnot first byte
jmp L_is_fsk_type ;is first byte test type
L_test_Onoff:
mov a,5
xor a,R_fsk_counter1
sz acc
jmp fsk_endbit_buffer
;// is fsk signa 5th byte, test it is on /off?
mov a,42h ;SDMF messae on?
xor a,R_fsk_data
sz acc
jmp L_test_FFh
sz flag_ismessage
set flag_message ;set the message flag
mov a,55h
mov R_fsk_sdt,a ;set receive fsk mark
call F_turn_on_time1
ret
L_test_FFh:
mov a,0ffh ;MDMF message on?
xor a,R_fsk_data
sz acc
jmp L_fsk_not_signalexit ;L_fsk_exit ;message off clr the flag ,exit
sz flag_ismessage
set flag_message ;set the message flag
mov a,55h
mov R_fsk_sdt,a ;set receive fsk mark
call F_turn_on_time1
ret
L_is_fsk_type:
mov a,06h
xor a,R_fsk_data
sz acc
jmp L_test_80h
;// is 06h //
L_set_have_message_test_onoff:
set flag_ismessage
clr flag_fskbit ;10/14
jmp fsk_endbit ;is message mark ,continue
;test the on /off
;----------------------------------------------------------------
L_test_80h:
mov a,80h
xor a,R_fsk_data
sz acc
jmp L_test_81h
jmp L_80_80h
L_test_81h:
mov a,81h
xor a,R_fsk_data
sz acc
jmp L_test_82h
L_80_80h: ;80h,81h
;// is 80h //
clr R_fsk_counter1
clr flag_fskbit ;10/14
fsk_endbit_80h:
snz flag_fskbit
jmp fsk_endbit_80h
clr flag_fskbit
snz data ;pb.3
jmp p_error_80h
call timer0_off
jmp fsk_startbit_80h
p_error_80h:
nop
ret
;/////////////////////////////
fsk_startbit_80h:
nop
sz data ;pb.3 ,is start bit? and resume time
jmp fsk_startbit_80h ;
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_80h:
nop
snz flag_fskbit
jmp fsk_loop1_80h
clr flag_fskbit
set c
snz data ;pb.3
clr c
rrc r_fsk_data
sdz R_temp3
jmp fsk_loop1_80h
;// seizure a byte ok //
inc R_fsk_counter1
mov a,1
xor a,R_fsk_counter1
sz acc
jmp L_test_other
; jmp L_is_message_Length
L_is_message_Length:
mov a,R_fsk_data
sz acc
dec acc
mov R_message_Length,a
clr flag_fskbit ;10/14
jmp fsk_endbit_80h
L_test_other:
mov a,2
xor a,R_fsk_counter1
sz acc
jmp L_test_other1
jmp L_is_parameter_type
L_test_other1:
;; ret
L_is_parameter_type:
mov a,0Bh
xor a,R_fsk_data
sz acc
jmp L_test_other_not0BH
;// parameter type is 0Bh //
clr R_fsk_counter1
clr flag_fskbit ;10/14
fsk_endbit_2:
snz flag_fskbit
jmp fsk_endbit_2
clr flag_fskbit
snz data ;pb.3
jmp p_error_2
call timer0_off
jmp fsk_startbit_2
p_error_2:
nop
ret
;/////////////////////////////
fsk_startbit_2:
nop
sz data ;pb.3 ,is start bit? and resume time
jmp fsk_startbit_2 ;
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_2:
nop
snz flag_fskbit
jmp fsk_loop1_2
clr flag_fskbit
set c
snz data ;pb.3
clr c
rrc r_fsk_data
sdz R_temp3
jmp fsk_loop1_2
;// seizure a byte ok //
inc R_fsk_counter1
mov a,1
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -