1. Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.
    Dismiss Notice

software filtering

Discussion in 'Microcontrollers' started by waqar, May 18, 2003.

  1. waqar

    waqar New Member

    Joined:
    Mar 13, 2003
    Messages:
    67
    Likes:
    0
    i have made the pulse dialing code to some extend and need advice your all of you...

    Objective:-

    Detecting Signal Digit Dialing.considering only one telephone.

    If digit "2" is pressed disconnect dial tone from the the telephone set otherwise keep connecting the dial tone.

    ; CHECKING ONE TELEPHONE LINE WITH MT8816 AND AT89C52
    ; P2.0 FOR DETECTING OFF HOOK (1) AND ON HOOK (0)
    ; Dial Tone Y0 OF MT8816 and telephone via slic is connected with X2
    ; ADDRESS LINE + DATA PIN OF MT8816 WITH P1 (date pin p1.7)
    ; Strobe = p3.7
    ; crsytal 11.05KOH



    ORG 00H
    LJMP MAIN


    ORG 0030H
    MAIN:
    MOV P0,#00000000B ;port IS CLEARED
    MOV P3,#00000000B ;StROBE IS CLEARED
    MOV P2,#00000000B ;RESETING THE PIN
    MOV P1,#00000000B ;RESETING THE PIN

    OFF:
    JNB P2.0,OFF ;WAITING FOR OFF-HOOK
    CALL DELAY_10MS ;for debouncing, filtering codition
    MOV P1,#10010000B ;x2-y0 DIAL TONE connection

    SETB P3.7 ;STROBE IS SET HIGH

    ON:
    JB P2.0,ON ;waiting for digit dial
    MOV R6,#00D ;pulse counting regsiter

    J:
    CALL DELAY_60MS ; pulse low time
    INC R6 ;calculate no. of zeros
    CALL DELAY_40MS ;pulse high time
    CALL DELAY_10MS ;software filtering
    JNB P2.0,J ;checking for more than 1 pulse
    JB P2.0,CHECK3 ;check if all pulses came

    CHECK3:
    CJNE R6,#02D,DO ;dialed digit is 2 then remove dial tone

    CLR P1.7
    CLR P3.7

    DO:
    JNB P2.0,MAIN ;waiting on hook
    SJMP DO


    DELAY_60MS:
    MOV R0,#05D
    L2: MOV R1,#53D
    L1: MOV R2,#250D
    DJNZ R2,$
    DJNZ R1,L1
    DJNZ R0,L2
    RET


    DELAY_40MS:
    MOV R0,#05D
    A2: MOV R1,#49D
    A1: MOV R2,#180D
    DJNZ R2,$
    DJNZ R1,A1
    DJNZ R0,A2
    RET

    DELAY_10MS:
    MOV R0,#05D
    C2: MOV R1,#10D
    C1: MOV R2,#200D
    DJNZ R2,$
    DJNZ R1,C1
    DJNZ R0,C2
    RET
    END

    Now i have used the above program firstly to see if low comes one dialing a digit it worked...but when iam using it to count the more than one pulse its not working...please advice some thing about the above.

    Also since maximum time for receiving the pulses will 1 second which will be needed when digit "0" is pressed. I have tried to make a counter which multiply 40 milli seconds with 30 = 1200 micro-seconds
    which checks after each decrement whether another pulse has arrived or not but it also did not worked...

    actually the pulse counting register is counting more than one pulse..
     

Share This Page