| ??? 05/18/03 14:52 Read: times |
#45859 - software filtering advice needed Responding to: ???'s previous message |
firstly
sir Michael Karas i have no words to thank you for providing me so much time and your reply has really cleared most of the confusions... Next Kali, in case of telephone exchange it does not effects if high or low state is considered that i have checked with the manufacturers.. Now most of the people on this forum will think and say that waqar is not listening to what they are advicing but iam listening and swear i spent more hours reading the replies then i sleep.. but i want to go setp by step so i have made the simple program for signal digit dialing detection with only loops , i will make the really program with interrupts but first help me on this program .. 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.. |



