- /* 庫端電話程式序 */
- /*************************************************************/
- #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();
-
- //等待對方接通電話,同發中隊標志號
- 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;
- }
復制代碼 |