单片机与PC机通信

单片机获取和管理传感器的数据,然后通过串口通信将数据发送给PC。
利用proteus仿真单片机和PC口通信时,需要用到串口调试助手和虚拟串口配置软件。
串口助手用于PC进行数据发送和接收,虚拟串口用于将PC的串口虚拟连接。
P3.0口RXD
P3.1口TXD
对应接上compim的接口

传值给PC

程序中先设定工作方式

//设定工作方式
void port()
{
    TMOD=0x20; //((T1工作方式2、软启动,设置串口波特率) 
    //串口初始化
    TH1=0xfd; //波特率9600
    TL1=0xfd;
    TR1=1;  
    PCON=0x00;
    SCON=0X40;//串口工作方式1,(REN=0)不允许接收,若允许接收,则SCON=0x50
}

主程序中

SBUF=key[keynum];//发送值至串口端显示
while(!TI);//检测发送标志位TI, TI=0,未发送完
TI=0;//一个字节发送完,TI清0

串口传值到单片机

//设定工作方式
void serial()
{
  SCON=0x50;//串行口方式1 SM0=0;SM1=1;REN=1;(允许接收)
  PCON=0x00;//T1初始化,
  TMOD=0x20;//T1设为方式2
  TH1=0xFD;//选9600波特,fosc=11.0592MHz
  TL1=0xfd;
  TR1=1;//启动T1  
}

主程序中

if(RI)//如果接收到数据,就把接收到的数回发给PC
   { 
     RI=0;//清接收标志
     a=SBUF;//读串行口数据
     a=a-'a'+'A';//接小收大
     SBUF=a;//把从PC机发送过来的数据返回给PC机
     while(!TI);//没有发送完等待
     TI=0;//清发送完中断标志
 }


void uart_init(unsigned int bps)
{ unsigned char t;
  SCON=0x80;//工作方式一:9位异步收发
  PCON=0x90;//SMOD=1
  TI=0;//软件清零,表示未发送完成
  EA=1;//开总中断
  ET1=1;//开T1中断
  ES=1; //开串口中断
  TMOD=0x20;//8位自动装载模式
  switch(bps)
  { case 1200:t=0xe8;break;
    case 2400:t=0xf4;break;
    case 4800:t=0xfa;break;
    case 9600:t=0xfd;break;
  }
  TH1=t;
  TL1=t;
  TR1=1;//开启T1
}
/********************循环发送数据
                     ch为数据口**********************************/
void uart_send(unsigned char ch)
{
  ES=0; //关串口中断
  SBUF=ch;
  while(TI==0);//等待发送完成
  TI=0;  //清除中断标记
  ES=1; //开串口中断
}
/*------------------------------------------------
把读取值转换成一个一个的字符,给串口显示 (两位小数)
------------------------------------------------*/
void To_ascii(unsigned char num)
{   
     SBUF=num/100+'0';             
     delay(200);          
     SBUF=num/10%10+'0';               
     delay(200);    
     SBUF=num%10+'0';
     delay(200);
}

单片机传字符串给串口

SBUF=s[b];//发送s数组至sbuf,电脑串口助手赋值
a=SBUF ;//读串行口数据,电脑串口送过来的数据进行赋值

启动工作方式后,由独立按键触发,开始传值。

if(K1==0)//如果独立按键被按下
        { 
          b=0;//计数器清零
          a=strlen(s);//取数组长度
          for(;b<a;b++)//循环取数据发送,从0到a
              { 
                SBUF=s[b];//发送s数组至sbuf
                while(!TI);//没有发送完,则等待
                TI=0;//清发送结束标志
               }
           while(!K1);//如果按键没有松开,等待
         }

串口输入相关字符串后,51上显示

if(RI)//如果接收到数据,就把接收到的数回发给PC
         { 
           RI=0;//清接收标志
           a=SBUF ;//读串行口数据
           SBUF=a;//把从PC机发送过来的数据返回给PC机
           while(!TI);//没有发送完等待
           TI=0;//清发送完中断标志
        }

你可能感兴趣的:(单片机)