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

📄 fsk_decode.asm

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