This section describes how to interface an DTMF decoder to the microcontroller AT89S51/52
and to display the digits over the seven segment display.
The circuit also has an Ring sensor which is not used in the program.
Program
Code (Text):
INCLUDE reg_52.pdf STD EQU P3.0 ;DTMF OUTPUT Q3 EQU P3.1 Q2 EQU P3.2 Q1 EQU P3.3 Q0 EQU P3.4 RING EQU P3.5 DIS_A EQU P0.0 DIS_B EQU P0.1 DIS_C EQU P0.2 DIS_D EQU P0.3 DIS_E EQU P0.4 DIS_F EQU P0.5 DIS_G EQU P0.6 DSEG ; This is internal data memory ORG 20H ; Bit adressable memory DTMF: DS 1 D0 BIT DTMF.0 D1 BIT DTMF.1 D2 BIT DTMF.2 D3 BIT DTMF.3 CSEG ; Code begins here ;---------==========----------==========---------=========--------- ; PROCESSOR INTERRUPT AND RESET VECTORS ;---------==========----------==========---------=========--------- ORG 00H ; Reset MOV SP,#60H MOV R2,#15H CALL DISP ;Display - symbol on display SETB STD ;Make STD pin as input TOP: JNB STD,$ ;wait for new data CALL READ ;Read Data MOV R2,DTMF CALL DISP ;Display Dialled Data JB STD,$ ;Wait until the key is released AJMP TOP ;Repeat the function ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; READ DTMF TONES ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% READ: MOV DTMF,#00H SETB Q0 SETB Q1 SETB Q2 SETB Q3 JNB Q0,VB1 SETB D0 VB1: JNB Q1,VB2 SETB D1 VB2: JNB Q2,VB3 SETB D2 VB3: JNB Q3,VB4 SETB D3 VB4: RET ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ; 7 SEGMENT DISPLAY ROUTINE ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& DISP: CJNE R2,#00H,AAS1 CLR DIS_A CLR DIS_B CLR DIS_C CLR DIS_D CLR DIS_E CLR DIS_F SETB DIS_G RET AAS1: CJNE R2,#01H,AS2 CLR DIS_B CLR DIS_C SETB DIS_A SETB DIS_D SETB DIS_E SETB DIS_F SETB DIS_G RET AS2: CJNE R2,#02H,AS3 CLR DIS_A CLR DIS_B CLR DIS_D CLR DIS_E CLR DIS_G SETB DIS_C SETB DIS_F RET AS3: CJNE R2,#03H,AS4 CLR DIS_A CLR DIS_B CLR DIS_C CLR DIS_D CLR DIS_G SETB DIS_E SETB DIS_F RET AS4: CJNE R2,#04H,AS5 CLR DIS_B CLR DIS_C CLR DIS_F CLR DIS_G SETB DIS_A SETB DIS_D SETB DIS_E RET AS5: CJNE R2,#05H,AS6 CLR DIS_A CLR DIS_C CLR DIS_D CLR DIS_F CLR DIS_G SETB DIS_B SETB DIS_E RET AS6: CJNE R2,#06H,AS7 CLR DIS_A CLR DIS_C CLR DIS_D CLR DIS_E CLR DIS_F CLR DIS_G SETB DIS_B RET AS7: CJNE R2,#07H,AS8 CLR DIS_A CLR DIS_B CLR DIS_C SETB DIS_D SETB DIS_E SETB DIS_F SETB DIS_G RET AS8: CJNE R2,#08H,AS9 CLR DIS_A CLR DIS_B CLR DIS_C CLR DIS_D CLR DIS_E CLR DIS_F CLR DIS_G RET AS9: CJNE R2,#09H,AS10 CLR DIS_A CLR DIS_B CLR DIS_C CLR DIS_D CLR DIS_F CLR DIS_G SETB DIS_E RET AS10: CJNE R2,#15H,AS11 ;symbol for - SETB DIS_A SETB DIS_B SETB DIS_C SETB DIS_D SETB DIS_E SETB DIS_F CLR DIS_G RET AS11: CJNE R2,#16H,AS12 ;switch off all disp SETB DIS_A SETB DIS_B SETB DIS_C SETB DIS_D SETB DIS_E SETB DIS_F SETB DIS_G RET AS12: RET ;********************************************************** END
Circuit and Program to Interface MT8870 with AT89S51 1.0
Decoding the DTMF signals from the telephone line with circuit diagram.