⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsk_decode.asm

📁 FSK软解码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                     	   	
;------------------------------------------------------------------
;//		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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -