单片机与PC机通信

2019-04-15 18:25发布

单片机获取和管理传感器的数据,然后通过串口通信将数据发送给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;//清发送完中断标志 }