注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
PINK123的个人空间 https://home.eeworld.com.cn/space-uid-370660.html [收藏] [复制] [分享] [RSS]
日志

来看看这个串口通信程序

已有 729 次阅读2011-10-24 20:50

波特率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; 
    }
   }
   
 }
}

 

 

因没有做实验的条件,大家看看这个程序写的行不行,有什么地方要改正的,谢谢了。

 

 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章