/* 库端电话程式序 */
/*************************************************************/
#include
#include
#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();
//等待对方接通电话,同发中队标志号
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;
//通话,同时收发数据
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) //查询关锁了没有
{
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发送子程序*********************/
/************************************************************/
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();
}
/**********************************************************/
/**********************************************************/
/**********************发送延迟****************************/
/**********************************************************/
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;
}