📄 serial.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 + -