標題:
51單片機驅(qū)動MT8880雙音頻接收發(fā)送芯片C語言程序
[打印本頁]
作者:
xueren
時間:
2013-7-19 02:18
標題:
51單片機驅(qū)動MT8880雙音頻接收發(fā)送芯片C語言程序
/* 庫端電話程式序 */
/*************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
/*************************MT8880****************************/
void InintMT(uchar a,b);
void MtSend(uchar i);
uchar MtReceive(void);
void ReMtControl(void);
/************************************************************/
/************************************************************/
/************************呼叫處理程序************************/
/************************************************************/
void CallPhone(void)
{
uchar *p;
uchar i,a,b,c;
ZJ=0;
CallLed=0;
Delay1();
Delay1();
//拔號
InintMT(0xff,0x00);
i=0;
p=SendData;
while(1)
{
a=*(p+i);
if(a==0x0c)break;
MtSend(a);
SELET=1;
send(a);
SELET=0;
i++;
}
Delay1();
Delay1();
Delay1();
//等待對方接通電話,同發(fā)中隊標志號
InintMT(0xfd,0x00);
EA=0;
EX1=0;
b=0x20;
while(b!=0)
{
a=0xff;
MtSend(HAdd);
i=0xff;
while(i!=0)
{
c=0xff;
while(c!=0)
{
f=0;
if(MTIRQ==0)
{
if(HAdd==MtReceive())goto Start;
}
if(Key()==1) goto End;
c--;
}
i--;
}
if(f==0x01)break;
b--;
if(b==0)goto End;
}
Start:
while(f!=0x0f)
{
if(Key()==1) goto End;
if(MTIRQ==0)f=MtReceive();
if(f==0x0f)
{
Delay1();
Delay1();
Delay1();
MtSend(LAdd);
}
}
f=0;
Delay1();
Delay1();
EA=1;
ES=1;
//通話,同時收發(fā)數(shù)據(jù)
delet=1;
while(Key()==0)
{
if(delet==0)goto End;
if(MTIRQ==0)ReMtControl();
if(RSuo==0&&id==1) //查詢******了沒有
{
Delay1();
if(RSuo==0&&id==1)
{
MtSend(0x03);
id=0;
}
}
if(RSuo==1&&id==0) //查詢關(guān)鎖了沒有
{
Delay1();
if(RSuo==1&&id==0)
{
MtSend(0x04);
id=1;
}
}
}
End:
Delay1();
MtSend(0x05);
delet=1;
id=1;
ZJ=1;
EA=0;
ES=0;
EX1=0;
CallLed=1;
}
/************************************************************/
/************************************************************/
/***********************MT8880發(fā)送子程序*********************/
/************************************************************/
void MtSend(uchar i)
{
bit b;
MTCS=0;
MTCK=0;
MTRS0=0;
MTRW=0;
P1=i;
P1=i;
P1=i;
MTCK=1;
Delay2();
MTCK=0;
MTCS=1;
Delay1();
P1=0xff;
MTRS0=1;
MTRW=1;
MTCS=0;
MTCK=1;
down:
b=b1;
if(b==0)goto down;
MTCK=0;
MTCS=1;
MTIRQ=1;
RI=0;
MTCS=1;
SELET=0;
}
/************************************************************/
/************************************************************/
/*************************接收子程序*************************/
/************************************************************/
uchar MtReceive(void)
{
bit b;
uchar i;
EA=0;
MTCK=0;
P1=0xff;
MTRS0=1;
MTRW=1;
MTCS=0;
MTCK=1;
down:
b=b2;
if(b==0)goto down;
MTCK=0;
MTCS=1;
MTRS0=0;
MTRW=1;
MTCS=0;
MTCK=1;
MTCK=1;
P1=0xff;
i=P1&0x0f;
MTCK=0;
MTCS=1;
MTRS0=1;
MTRW=1;
MTCS=0;
MTCK=1;
repeat:
b=b2;
if(b==1)goto repeat;
MTCK=0;
MTCS=1;
return(i&0x0f);
EA=1;
}
/************************************************************/
/************************************************************/
/********************MT8880初始化子程序**********************/
/************************************************************/
void InintMT(uchar a,b)
{
MTCS=0;
MTCK=0;
MTRS0=1;
MTRW=0;
P1=a;
Delay2();
MTCK=1;
MTCS=1;
MTCK=0;
P1=b;
MTCS=0;
MTCK=1;
Delay2();
MTCK=0;
MTCS=1;
Delay2();
}
/**********************************************************/
/**********************************************************/
/**********************發(fā)送延遲****************************/
/**********************************************************/
void Delay1(void)
{
uchar i;
uchar a,b;
a=0xff;
b=0xff;
while(b!=0)
{
i=a;
while(i!=0)
{
i--;
}
b--;
}
TI=0;
}
void Delay2(void)
{
uchar i;
uchar a,b;
a=0xff;
b=0x10;
while(b!=0)
{
i=a;
while(i!=0)
{
i--;
}
b--;
}
TI=0;
}
void Delay(uchar a, i) //定時器0,方式1
{
EA=0;
while(i!=0)
{
TMOD=0X11;
TH0=a;
TL0=0x00;
TR0=1;
while(TF0==0);
TF0=0;
TR0=0;
}
EA=1;
}
復制代碼
作者:
sz1001
時間:
2014-7-18 13:12
這個好,可以做自動應答電話~~
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1