来看看这个串口通信程序

2019-03-24 19:41发布

波特率9600    无效验位  停止位1位  数据8位   功能:串口通信发送:每次4个字节,格式如:55A1D1XX              8位LED根据XX的值来显示(比如计算机发送55A1D155,接受后LED偶数位亮)           单片机接受成功后并返回OK到计算机   #include<reg52.h>
unsigned char flag,i;         // flag为标志位
unsigned char code table[3]={0x55,0xA1,0XD1};
unsigned char idata str[4];
void main()
{ /*串口初始化*/  TMOD=0x20;    //  设置定时器1为工作方式2
 TH1=0xfd;          //装初值,设定波特率为9600
 TL1=0xfd;
 TR1=1;              //启动T1定时器
 REN=1;            //允许串口接收数据,REN、SM0、SM1这三句亦可以只写一个SCON=0x50
 SM0=0;            //串口工作方式设置为方式1, SM1=1;
 EA=1;              //开总中断
 ES=1;              //开串口中断
 P1=0x77;
 while(1)
  {
    if ( flag == 1 )  
     {
       ES=0;           
       flag=0;         
       SBUF='O';       
       while(!TI);         
       TI=0;  
    SBUF='K';       
       while(!TI);         
       TI=0;                                              
       ES=1;           
     }
  }
} void ser() interrupt 4   
{
  while(RI)
  {
   
   for(i=0;i<4;i++)
   {
      str=SBUF;
      RI=0;
      if(str==table)
           continue;                         //准备接收下一位
      else 
           break;                             //跳出循环
         i++;
      if(i==4)
    {   
     P1=str[3];
        i=0;
     flag=1; 
    }
   }
   
 }
}     因没有做实验的条件,大家看看这个程序写的行不行,有什么地方要改正的,谢谢了。     此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。