⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 77e58双串口通讯.c

📁 77E58的双串口应用
💻 C
字号:
/**********************************************************/
/*   这是用一片77e58的主控机程序
     主机接收到的PC机的命令的长度为三个字节, 第一个字节指明数据送往主机.主录机.学生机,
     第二个字节主机的为状态,第三个字节为具体操作
     学生机接收到的主机的命令的长度为两个字节,第一个字节为地址,第二个字节主机的为状态
     主录机接收到的主机的命令的长度为一个字节,为操作    */
/*   main machine MPU1 to contrl main function and common */
/*   MPU2                                                 */
/*   Writer date:2005.10.20      update:2006.5.12(配合4路V1.5主板)         */
/**********************************************************/


//#include<absacc.h>
//#include<reg52.H>
#include<my.h>             /*定义头文件 */
uchar idata dat[64];      /*定义寄存器大小 */
uchar Buff[4];
uchar RevDat[4];
uchar CallBuff[16];
uchar RecAStatus;
uchar RecBStatus;


uchar CallPoint,CallEnd;

uchar StudNo;
uchar FunDat;

uchar Rev1[8];
uchar Rev2[8];
uchar Rev3[8];
uchar inDat,offset;

uchar RevPoint,RevEnd;

bit Rev,Ret,isCall,isError,isRecA,isRecB,isCALLALL;

void 	CommonInit()  
/*Init Comm Port*/
{
 TMOD=0x20; 
 TL1=0xfd;TH1=0xfd;

 TCON=0x40; 
 SCON=0x50;
 scon1=0x50;
 IE=0xd0;
 P4=0x5;
 }



//串口1处理
void Comm(void) interrupt 4 using 1 {
    int j;
    if(RI){
       RI = 0;
         ES = 0;
       if (SBUF==0xff){   /*接收到的第一个字节如果是FF就进行再次接受*/
          j=0;
          while((!RI) && (j<1000))j++;  /*等待第二个字字节*/
          RI=0;
          Rev1[RevPoint] = SBUF;
          j=0;
          while((!RI) && (j<1000))j++;
          RI=0;
          Rev2[RevPoint] = SBUF;
          j=0;
          while((!RI) && (j<1000))j++;
          RI=0;
          Rev3[RevPoint] = SBUF;
          RevPoint++;
          RevPoint = RevPoint & 0x7;
          Rev=1;
                      }  /* end of  if (==0xff)  */

          ES = 1;
         }
                                   }

/*串口2处理程序   */
void Comm2(void) interrupt 7 using 1
{
   if(ri1){
           es1 = 0;
              ri1 = 0;
                RevDat[0]=sbuf1;

       if (RevDat[0]>0x80)  
             {
                 if ((RevDat[0] & 0x10)==0x10){RecAStatus = RevDat[0]; isRecA=1;}

                 if ((RevDat[0] & 0x20)==0x20){RecBStatus = RevDat[0]; isRecB=1;}
             }

       else  {        
                 if (RevDat[0]<0x7f)     {
                    CallBuff[CallPoint]=RevDat[0];
                    CallPoint++;
                    CallPoint=CallPoint & 0xf;
                    isCall=1;            }
             }

           es1 = 1;

          } 

 }  /*串口用*/



/*主程序  */
int main()
{
  uint j,ii;
  CommonInit();
for(;;){  }
return 0;
 }    /*mainYONG*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -