单片机下位机通讯接收字符数组

# pragma db code
# include<reg52.h>
# define uint8 unsigned char
# define uint32 unsigned long
sbit L1=P0^0;//³É¹¦½ÓÊÕÒ»´ÎÖ¸Áî²¢·µ»ØָʾµÆ
sbit L5=P0^5;//·´´«Ö¸Ê¾µÆ
sbit L6=P0^6;//Õý´«Ö¸Ê¾µÆ
sbit L7=P0^7;//ʹÄÜָʾµÆ
sbit L4=P0^4;//Âö³åָʾµÆ


sbit CwCcw=P1^4;//Õý·´×ª
sbit OutPulse=P1^5;//Âö³å
sbit RunEn=P1^6;//ʹÄÜ


bit Receivefalg=0;
int PulseNum=0;//Âö³åÊý
int rate=0;//ƵÂÊ


int TH0Buf=0;
int TL0Buf=0;
uint32 j=0;
int t=0;
uint32 PulseNumTemp;//32λÊý¾ÝÓÃÓÚ×éºÏËĸö×Ö½ÚÊý¾Ý
uint32 rateTemp;//32λÊý¾ÝÓÃÓÚ×éºÏËĸö×Ö½ÚÊý¾Ý
uint8 CommandBuf[17]; //SBUFÊý¾Ý»º´æÇø


void rece(void);//½ÓÊÕÅúÁ¿Êý¾Ý
void init(void);//¶¨Ê±Æ÷³õʼ»¯
void computer(void );//½ÓÊÕ´¦ÀíPCÊý¾Ý


/*Ö÷³ÌÐò*/
void main(void)

uint8 temp;
CwCcw=1; //
OutPulse=1;//¸ßµØƽÊä³ö¡£¶ÔÓÚÇý¶¯Æ÷ÊäÈëΪµÍ
RunEn=0; //ÖáÍ£Ö¹

init();
while(1)
{


   while(RI==0);
   temp=SBUF;
   if(temp==0x55)
    {
rece();


computer();


}
}

/*
do{
   while(RI==0);
   temp=SBUF;
   if(temp==0x55)
    {rece();}
   else break; 
  }while(1);
*/
}


//¶ÔPCÏ´«µÄÃüÁî½â¶Á²¢Êä³ö
void computer(void )
{
if(CommandBuf[1]==0x11)//Õýת
{
TR0=1;
RunEn=1;
L7=0;
CwCcw=0;
L6=0;
L5=1;
}
else if(CommandBuf[1]==0x01)//·´×ª
{
TR0=1;
RunEn=1;
L7=0;
CwCcw=1;
L5=0;
L6=1;
}
else//Í£Ö¹
{
RunEn=0;
L7=1;
}


PulseNumTemp=PulseNumTemp|CommandBuf[5];
PulseNumTemp=PulseNumTemp<<8|CommandBuf[4];
PulseNumTemp=PulseNumTemp<<8|CommandBuf[3];
PulseNumTemp=PulseNumTemp<<8|CommandBuf[2];
SBUF=PulseNumTemp;
  while(TI==0);
  TI=0;
SBUF=PulseNumTemp>>8;
  while(TI==0);
  TI=0;
PulseNum=PulseNumTemp;
rateTemp=rateTemp|CommandBuf[9];
rateTemp=rateTemp<<8|CommandBuf[8];
rateTemp=rateTemp<<8|CommandBuf[7];
rateTemp=rateTemp<<8|CommandBuf[6];
SBUF=rateTemp;
  while(TI==0);
  TI=0;
SBUF=rateTemp>>8;
  while(TI==0);
  TI=0;
}


//³õʼ»¯ÉèÖÃ
void init(void)
{
//TMOD=0x20;           //
TMOD=0x21;           //
PCON=0x80;           //
SCON=0x50;           //

 EA=1;            //?????
 ET0=1;           //???????


// TH0Buf=(int)(65536-921600*(1/(2*rate)))/256;
 //TL0Buf=(int)(65536-921600*(1/(2*rate)))%256;
 TR0=1;           

TL1=0xfa;             
TH1=0xfa;            //
TR1=1;               //
}
//½ÓÊÕ´®¿ÚÊý¾Ý´®




void rece(void)
{
char i;
i=0;
do{
while(RI==0);
  CommandBuf[i]=SBUF;
  RI=0;
  SBUF=CommandBuf[i];
  while(TI==0);
  TI=0;
  i++; 


  }
while(CommandBuf[i-1]!=0xaa);


}


/*------------------------------------------------
                 ¶¨Ê±Æ÷ÖжÏ×Ó³ÌÐò
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{

// static unsigned char i;
 TH0=(65536-1)/256;  //ÖØи³Öµ 12M¾§Õñ¼ÆË㣬ָÁîÖÜÆÚ1uS£¬
                              //200mS·½²¨°ë¸öÖÜÆÚ100mS£¬ÓÉÓÚ¶¨Ê±Æ÷
                              //×î´óÖµ65536 ¼´65.536ms ËùÒÔ
 TL0=(65536-1)%256;       //Ö±½Ó¶¨Ê±Æ÷²»¹»Óã¬ÐèÒªÓÃÑ­»·´¦Àí,
 //  TH0=0xFF;      //????
// TL0=254;         //?245???255                             //¶¨Ê±10ms£¬È»ºóÑ­»·10´ÎºóÊä³ö 10x10=100ms
//TL0=0xFE;             
//TH0=0xFF;   
 j++;


 if(j==2)
 {
   j=0;
   L4=~L4;
OutPulse=~OutPulse;


if(!OutPulse)
{
t++;
}
 
if((t>=PulseNum)&&(PulseNum!=0))//¼ÆÊýµ½PulseNumÍ£Ö¹
{
TR0=0;
RunEn=0;
t=0;
}


  }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值