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

📄 serial.h

📁 华帮单片机双串口工作代码
💻 H
字号:

#include "define_W77E058.h"

//extern void Disdata(unsigned char);
//extern void delayms(unsigned int);
extern void Serial0_Send(unsigned char *);//串口1发送数据
extern void TranstoMode();//转化后发送给下位机
extern void TranstoPC();//转化后发送给上位机
/***************************************************************************/
//用于清空接收区的数据
/***************************************************************************/
void ClrRXD(unsigned char *dat1)
{
unsigned char xdata i;
for(i=0;i<13;i++) dat1[i]=0; 
}


/****************************************/
// CRC is check
/***************************************/
 unsigned char crc(unsigned char *da1)
{
 unsigned long xdata sum=0;
 unsigned char xdata i; 
for(i=1;i<da1[1]+1;i++){sum=da1[i]+sum;}//
 return sum;
}

/***************************************************************************************************************************/
// serial 0  is interrupt for recieving data  Down
/******************************************************************************************************************************/
void Serial_0() interrupt 4 using 2
{
 unsigned char idata data0,i;
 if(RI==1)
 { RI=0;TI=0;data0=SBUF;
 if(flag0==1)  
    { if(data0==0xFD) { rxdbuf0[0]=data0; flag0=0; kc0=1; return; } }
 if(flag0==0)rxdbuf0[kc0]=data0; 
  i=rxdbuf0[1];
if(kc0<rxdbuf0[1]+2)
 { 
 if(kc0==i+1)
 { if(rxdbuf0[kc0]!=crc(rxdbuf0)){ flag0=1; kc0=0; return; } }
   else {  kc0++; return; }
    }
 if(rxdbuf0[kc0]==0xfc)
 {
   flag0=1; RXDSuccess0=1; kc0=0;
    RI=0;TI=0;return;
   //Serial0_Send(rxdbuf0);
   }
 }
// if(TI==1){ TI=0; RI=0; return; 
}

/*************************************************************************************************************************/
// serial 0  is Send data  down
/*************************************************************************************************************************/
void Serial0_Send(unsigned char *data0)
{
  unsigned char xdata i;// SCON=0x40;//在发送数据时,不允许接收数据,第三种串行口方式,TB8=1,SM2=1;
   REN=0; ES=0;EA=0;
 for(i=0;i<data0[1]+3;i++)
  {
   ctr1=1; SBUF=data0[i];  
  while(TI==0);TI=0;
  }
  //if(i>data0[1]+2) { Disdata(0);Disdata(0);Disdata(0);Disdata(0);Disdata(0); delayms(200);} }//发送完后 显示0000
   ES=1; REN=1; EA=1;ctr1=0;
}

/****************************************/
// serial 1is initial
/***************************************/
 void Serial_initial()
{  
   EA=0;
   TMOD=(TMOD&0x0f)|0x20;//PCON=0X00;//波特率不倍增,此方法可以避免出定时器不行的问题
   PCON=0x00;
   TL1=0XFD; TH1=0XFD;
   SADDR1=0XAA;SADEN1=0X00;
   SCON1=0x50;//sm0=0,sm1=1,sm2=0,ren_1=1;
   ES1=1; TR1=1;REN_1=1;
  
   RCAP2H=0XFF;RCAP2L=0XDC;
   TH2=0XFF;TL2=0XDC;
   SCON=0x50;RCLK=1;TCLK=1; 
   ctr1=0; ES=1;TR2=1;//允许接收数据
   EA=1;
 }

/****************************************/
// serial 1  is interrupt
/***************************************/
void Serial_1() interrupt 7 using 1
{
 unsigned char data i;//data2;
 if(RI_1==1)
 { 
  RI_1=0;TI_1=0; rxdbuf1[kc1]=SBUF1;
 if(flag1==1){ if(rxdbuf1[kc1]==0xaa){ flag1=0; kc1=1; return; } }
    i=rxdbuf1[kc1];
 if(kc1<rxdbuf1[1]+2) 
  { kc1++; return;}

  if(rxdbuf1[kc1]==0x55)
 {
  flag1=1; RXDSuccess1=1; kc1=0;
  //for(i=0;i<12;i++){txdbuf1[i]=rxdbuf1[i];}
 //Serial0_Send(rxdbuf1);
  RI_1=0;TI_1=0;
   return;
  }
   } //for RI
// if(TI_1==1){ TI_1=0; RI_1=0; return; }
}

/****************************************/
// serial 1  is message data  down
/***************************************/
void Serial1_Send(unsigned char *dat1)//n 表示
{
 unsigned char xdata i; // SBUF1=0xaa;while(TI_1); TI_1=0
  EA=0; ES1=0; REN_1=0;
 for(i=0;i<dat1[1]+3;i++) { SBUF1=dat1[i];while(TI_1==0); TI_1=0; }
    ES1=1;  REN_1=1; EA=1;
    return;
  }

⌨️ 快捷键说明

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