想用单片机接受从串口调试助手那里发送过来的数值数据,如何写代码(C语言)?
本人初学,打算用单片机接受从串口调试助手发来的数据,但是每次只能接收到一位的数据,请问高手,如何能把所有的数值从缓冲区完整的取出来呢?比如:我在串口调试助手中发送“293...
本人初学,打算用单片机接受从串口调试助手发来的数据,但是每次只能接收到一位的数据,请问高手,如何能把所有的数值从缓冲区完整的取出来呢?比如:我在串口调试助手中发送“2932”,单片机如何能把这个数值按照10进制接受到一个变量中。另外,能否详细介绍下,单片机串口初始化的具体操作,谢谢,大侠指点。
谢谢大家的指点,后来突然想起从串口发过来的数据确是16位的,如果按照我们平常的计算方法是不能得到相应的结果的,我修改了我的程序变成:
while(1)
{
while(RI==0){}; //等待接收完毕
RI=0; //清除接收标志
rcvdata=SBUF;//接收数据
P1=rcvdata%16;
pp=pp*10+P1;
}
这样可以得到一个相应数位的数据。
谢谢大家参与讨论。 展开
谢谢大家的指点,后来突然想起从串口发过来的数据确是16位的,如果按照我们平常的计算方法是不能得到相应的结果的,我修改了我的程序变成:
while(1)
{
while(RI==0){}; //等待接收完毕
RI=0; //清除接收标志
rcvdata=SBUF;//接收数据
P1=rcvdata%16;
pp=pp*10+P1;
}
这样可以得到一个相应数位的数据。
谢谢大家参与讨论。 展开
4个回答
展开全部
// 单片机串行口发送/接收程序,每接收到字节即发送出去
// 和微机相接后键入的字符回显示在屏幕上
// 可用此程序测试
//
#include <reg51.h>
#define XTAL 11059200 // CUP 晶振频率
#define baudrate 9600 // 通信波特率
void main(void)
{
unsigned char c;
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 定时器0赋初值
SCON = 0x50;
PCON = 0x00;
TR1 = 1;
IE = 0x00; // 禁止任何中断
while(1)
{
while(RI == 0);
RI = 0;
c = SBUF; // 从缓冲区中把接收的字符放入c中
SBUF = c; // 要发送的字符放入缓冲区
while(TI == 0);
TI = 0;
}
}
// 和微机相接后键入的字符回显示在屏幕上
// 可用此程序测试
//
#include <reg51.h>
#define XTAL 11059200 // CUP 晶振频率
#define baudrate 9600 // 通信波特率
void main(void)
{
unsigned char c;
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 定时器0赋初值
SCON = 0x50;
PCON = 0x00;
TR1 = 1;
IE = 0x00; // 禁止任何中断
while(1)
{
while(RI == 0);
RI = 0;
c = SBUF; // 从缓冲区中把接收的字符放入c中
SBUF = c; // 要发送的字符放入缓冲区
while(TI == 0);
TI = 0;
}
}
展开全部
for(i=0;i<4;i++)
{while(RI != 0);
RI = 0;
a[1]= SBUF; }
关键语句这样写就可以了,
上楼的程序中RI是接受完成的标志位应该写成while(RI != 0);
就是说当RI为1的时候,接收完成,不用一位位来接的,不然要SBUF干什么?
{while(RI != 0);
RI = 0;
a[1]= SBUF; }
关键语句这样写就可以了,
上楼的程序中RI是接受完成的标志位应该写成while(RI != 0);
就是说当RI为1的时候,接收完成,不用一位位来接的,不然要SBUF干什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
uchar a
a=SBUF //读数值
串口调试助手中发送的是16进制
a=SBUF/100 // 百位
b=SBUF/100%10 //十位
c=SBUF/100 // 个位
单片机串口通讯详解
http://www.c51.cn/Article/mcuzh/200806/8022.html
51单片机C语言实验及实践教程
http://www.51c51.com/cyuyan.htm
a=SBUF //读数值
串口调试助手中发送的是16进制
a=SBUF/100 // 百位
b=SBUF/100%10 //十位
c=SBUF/100 // 个位
单片机串口通讯详解
http://www.c51.cn/Article/mcuzh/200806/8022.html
51单片机C语言实验及实践教程
http://www.51c51.com/cyuyan.htm
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上说的对,不过根据你的晶振要设好波特率。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询