Dual-Tone Multi-Frequency (DTMF) : DAS Project Report
Dual-Tone Multi-Frequency (DTMF) : DAS Project Report
Dual-tone multi-frequency
(DTMF)
Submitted by-:
MOHIT SINGLA-5041
PRANSHUL SHEORAN-5051
ADITYA PURI-5006
PROJECT DETAILS
Project Name: DTMF
Description and Working: Dual-tone multi-frequency signaling (DTMF) is used
for telecommunication signaling over analog telephone lines in the voice-frequency band between
telephone handsets and other communications devices and the switching center. The version of DTMF that is used
in push-button telephones for tone dialing is known as Touch-Tone. It was first used by AT&T in commerce as a
registered trademark, and is standardized by ITU-T Recommendation Q.23. It is also known in the UK as MF4.
Other multi-frequency systems are used for internal signaling within the telephone network.
The Touch-Tone system, using the telephone keypad, gradually replaced the use of rotary dial starting in 1963[,and
since then DTMF or Touch-Tone became the industry standard for both cell phones and landline service.
Features
• Full DTMF receiver
• Less than 35mW power consumption
• Industrial temperature range
• Uses quartz crystal or ceramic resonators
• Adjustable acquisition and release times
• 18-pin DIP, 18-pin DIP EIAJ, 18-pin SOIC, 20-pin
PLCC
• CM8870C
— Power down mode
— Inhibit mode
— Buffered OSC3 output (PLCC package only)
• CM8870C is fully compatible with CM8870 for 18-pin devices by grounding pins 5 and 6
The CM8870/70C provides full DTMF receiver capability by integrating both the bandsplit filter and digital
decoder functions into a single 18-pin DIP, SOIC, or 20-pin PLCC package. The CM8870/70C is manufactured
using state-of-the-art CMOS process technology for low power consumption (35mW, max.) and precise data
handling. The filter section uses a switched capacitor technique for both high and low group filters and dial tone
rejection. The CM8870/70C decoder uses digital counting techniques for the detection and decoding of all 16 DTMF
tone pairs into a 4-bit code. This DTMF receiver minimizes external component count by providing an on-chip
differential input amplifier, clock generator, and a latched three-state interface bus. The on-chip clock generator
requires only a low cost TV crystal or ceramic resonator as an external component.
CODING:
#include<at89s8252.h>
#define r1 P0_0
#define r2 P0_1
#define r3 P0_2
#define r4 P0_3
#define c1 P0_4
#define c2 P0_5
#define c3 P0_6
#define c4 P0_7
#define rs P3_3
#define en P3_4
void lcd_init();
void init_serial();
void master(void);
void main()
unsigned int p;
init_serial();
lcd_init();
P0_0=0;
lcd_cmd(0x85);
lcd_display('W');
lcd_display('E');
lcd_display('L');
lcd_display('C');
lcd_display('O');
lcd_display('M');
lcd_display('E');
lcd_cmd(0xc0);
lcd_display(' ');
lcd_display('*');
lcd_display('-');
lcd_display('S');
lcd_display('T');
lcd_display('A');
lcd_display('R');
lcd_display('T');
lcd_display(' ');
lcd_display(' ');
lcd_display('#');
lcd_display('-');
lcd_display('E');
lcd_display('N');
lcd_display('D');
delay(0xffff);
delay(0xffff);
delay(0xffff);
delay(0xffff);
delay(0xffff);
delay(0xffff);
lcd_cmd(0x80);
lcd_display(' ');
lcd_display('E');
lcd_display('N');
lcd_display('T');
lcd_display('E');
lcd_display('R');
lcd_display(' ');
lcd_display(' ');
lcd_display('P');
lcd_display('A');
lcd_display('S');
lcd_display('S');
lcd_display('W');
lcd_display('O');
lcd_display('R');
lcd_display('D');
p=1;
P2=31;
while(1)
{
if(P2==11)
lcd_cmd(0x01);
lcd_cmd(0xc0);
lcd_display(' ');
lcd_display('*');
lcd_display('-');
lcd_display('S');
lcd_display('T');
lcd_display('A');
lcd_display('R');
lcd_display('T');
lcd_display(' ');
lcd_display(' ');
lcd_display('#');
lcd_display('-');
lcd_display('E');
lcd_display('N');
lcd_display('D');
lcd_cmd(0x80);
lcd_display('S');
lcd_display(' ');
delay(0xffff);
i=0;
while(P2!=12)
if(P2_4==0)
{
p=0;
delay(0xbbbb);
if(P2!=12)
if(P2==1)
arr[i]=1;
if(P2==2)
arr[i]=2;
if(P2==3)
arr[i]=3;
if(P2==4)
arr[i]=4;
if(P2==5)
arr[i]=5;
if(P2==6)
arr[i]=6;
if(P2==7)
arr[i]=7;
if(P2==8)
arr[i]=8;
if(P2==9)
arr[i]=9;
if(P2==10)
arr[i]=0;
lcd_display(48+arr[i]);
transmit(48+arr[i]);
i++;
p=1;
delay(0xdddd);
check=0;
no=0;
for(check=0;check<i;check++)
no=(no*10)+arr[check];
if(no==1111)
lcd_init();
lcd_cmd(0x80);
lcd_display('E');
lcd_display('N');
lcd_display('T');
lcd_display('E');
lcd_display('R');
lcd_display(' ');
lcd_display('N');
lcd_display('E');
lcd_display('W');
lcd_display(' ');
lcd_display('P');
lcd_display('A');
lcd_display('S');
lcd_display('S');
lcd_display('W');
lcd_display('D');
lcd_cmd(0xc0);
lcd_display(' ');
lcd_display('*');
lcd_display('-');
lcd_display('S');
lcd_display('T');
lcd_display('A');
lcd_display('R');
lcd_display('T');
lcd_display(' ');
lcd_display(' ');
lcd_display('#');
lcd_display('-');
lcd_display('E');
lcd_display('N');
lcd_display('D');
P2=31;
p=1;
while(1)
if(P2==11)
lcd_cmd(0x01);
lcd_cmd(0xc0);
lcd_display(' ');
lcd_display('*');
lcd_display('-');
lcd_display('S');
lcd_display('T');
lcd_display('A');
lcd_display('R');
lcd_display('T');
lcd_display(' ');
lcd_display(' ');
lcd_display('#');
lcd_display('-');
lcd_display('E');
lcd_display('N');
lcd_display('D');
lcd_cmd(0x80);
lcd_display('S');
lcd_display(' ');
delay(0xffff);
i=0;
while(P2!=12)
if(P2_4==0)
p=0;
delay(0xbbbb);
if(P2!=12)
if(P2==1)
arr[i]=1;
if(P2==2)
arr[i]=2;
if(P2==3)
arr[i]=3;
if(P2==4)
arr[i]=4;
if(P2==5)
arr[i]=5;
if(P2==6)
arr[i]=6;
if(P2==7)
arr[i]=7;
if(P2==8)
arr[i]=8;
if(P2==9)
arr[i]=9;
if(P2==10)
arr[i]=0;
lcd_display(48+arr[i]);
transmit(48+arr[i]);
i++;
p=1;
delay(0xdddd);
lcd_display(48+i);
check=0;
no=0;
for(check=0;check<i;check++)
{
no=(no*10)+arr[check];
m=no;
main();
if(no!=1111)
if(no==m)
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display('A');
lcd_display('C');
lcd_display('C');
lcd_display('E');
lcd_display('P');
lcd_display('T');
lcd_display('E');
lcd_display('D');
P0_0=1;
delay(0xffff);
delay(0xffff);
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display('L');
lcd_display('I');
lcd_display('G');
lcd_display('H');
lcd_display('T');
lcd_display('S');
lcd_display(' ');
lcd_display('O');
lcd_display('N');
k=0;
delay (0xffff);
delay (0xffff);
}
else
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display('D');
lcd_display('E');
lcd_display('N');
lcd_display('I');
lcd_display('E');
lcd_display('D');
P0_0=0;
k++;
delay (0xffff);
delay (0xffff);
if(k==4)
master();
while(b!=0)
b--;
delay(300);
P1=a;
rs=0;
en=1;
en=0;
delay(300);
P1=b;
rs=1;
en=1;
en=0;
void lcd_init()
lcd_cmd(0x38);
lcd_cmd(0x01);
lcd_cmd(0x0c);
unsigned int s;
unsigned int d;
unsigned int l;
s=x;
l=0;
while(s!=0)
l++;
s=s/10;
d=1;
while(l!=1)
d=d*10;
l--;
t1=x;
while(d!=0)
t1=t1/d;
lcd_display(sd[t1]);
t1=x%d;
d=d/10;
void master(void)
unsigned int p;
unsigned check;
lcd_init();
P2=31;
delay(1000);
p=1;
while(1)
lcd_cmd(0x82);
lcd_display('M');
lcd_display('A');
lcd_display('S');
lcd_display('T');
lcd_display('E');
lcd_display('R');
lcd_display(' ');
lcd_display('L');
lcd_display('O');
lcd_display('C');
lcd_display('K');
lcd_cmd(0xc0);
lcd_display(' ');
lcd_display('*');
lcd_display('-');
lcd_display('S');
lcd_display('T');
lcd_display('A');
lcd_display('R');
lcd_display('T');
lcd_display(' ');
lcd_display(' ');
lcd_display('#');
lcd_display('-');
lcd_display('E');
lcd_display('N');
lcd_display('D');
if(P2==11)
lcd_cmd(0x01);
lcd_cmd(0xc0);
lcd_display(' ');
lcd_display('*');
lcd_display('-');
lcd_display('S');
lcd_display('T');
lcd_display('A');
lcd_display('R');
lcd_display('T');
lcd_display(' ');
lcd_display(' ');
lcd_display('#');
lcd_display('-');
lcd_display('E');
lcd_display('N');
lcd_display('D');
lcd_cmd(0x80);
lcd_display('S');
lcd_display(' ');
delay(0xffff);
i=0;
while(P2!=12)
if(P2_4==0)
p=0;
if(P2!=12)
if(P2==1)
arr[i]=1;
if(P2==2)
arr[i]=2;
if(P2==3)
arr[i]=3;
if(P2==4)
arr[i]=4;
if(P2==5)
arr[i]=5;
if(P2==6)
arr[i]=6;
if(P2==7)
arr[i]=7;
if(P2==8)
arr[i]=8;
if(P2==9)
arr[i]=9;
if(P2==10)
arr[i]=0;
lcd_display(48+arr[i]);
transmit(48+arr[i]);
i++;
p=1;
delay(0xdddd);
}
}
check=0;
no1=0;
for(check=0;check<i;check++)
no1=(no1*10)+arr[check];
if(no1==123)
main();
w=1;
else
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_cmd(0x80);
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display(' ');
lcd_display('L');
lcd_display('O');
lcd_display('C');
lcd_display('K');
lcd_display('E');
lcd_display('D');
delay(0xffff);
delay(0xffff);
delay(0xffff);
delay(0xffff);
void init_serial()
SCON=0x40;
TR1=1;
TMOD=0x20;
TH1=253;
SBUF=c;
delay(200);
TI=0;