成语| 古诗大全| 扒知识| 扒知识繁体

当前位置:首页 > 趣味生活

单片机如何通过串口接收字符串

Q1:单片机 串口接收的字符串如何转为字符

楼主你好,楼上兄弟说的太复杂了,

恕我直言 没看懂你想说明神马问题,串口接收到的字符串如何转化成字符,首先字符串是字符的连续储存方式,那么

例:

1chartemp[4]={A,B,C};这是一个标准字符串

那么temp[0]==A;为真

以此类推temp[1] ==B

1temp[3]==/0;//c语言字符串结尾标示符./0转义符

如果你想显示中文那么 中文是16bit的,双字节字符

1234shorttemp;temp=sbuf;将第一个数据获取回来temp<<=8;将数据左移8位temp|=sbuf;将第二次的数据带入进来

可能会我记错了高低位顺序,要是出错可以反过来即可!

小弟告诉你一个最简单最实用的办法 如何把字符中的数字变成变量数据

switch 你会用么 就是开关选择语句

123456789staticchartemp;//申明一个变量这是个全局静态变量temp=sbuf;switch(temp){case0:temp=0;break;//break必须要加,否则数据覆盖case1:temp=1;break;case2:temp=2;break;...}

以此类推 ,这样你的道的字符串或字符数据则能变成数据,

字符串也只是数组而已 而楼主想要的字符也就是其中的一个元素罢了 可以用指针方式提取 亦可以用数组下标提取!这用的都是ascll码 但是不需要理解到码表上

请楼主明察抢答时间 ,楼下请勿复制,祝楼主早日解决程序问题,加油加油

Q2:如何用c语言编程实现c51单片机中从串口接收一个字符串?

我只能给你子程序,仅供参考
IE=0x90; //打开中断总开关及串口中断
SCON=0x50; //设定串行口工作方式1,允许接收
TMOD=0x20; //设定时器1,自动装载,产生破特率
TH1=0xfd; //破特率为9600
TR1=1;//启动定时器1
PCON=0x80; //定义SMOD, 发送 while(RI==0)//RI==1;
{
;//等待数据发送完毕
}
RI=0;//手动清零
发送 void disf(unsigned int y)
{
unsigned char i;
DAT[3]=y%10;// ===7
DAT[2]=(y/10)%10;//==8
DAT[1]=(y/100)%10;//==9
DAT[0]=y/1000;//=1
for(i=0;i<4;i++)
{
SBUF=DAT[i];
while(TI==0);//等待数据发送完毕
TI=0;//手动清零
}
} 接收 while{disp();}//无限循环
四位字符,发送 while(key==0);
disp(1949);
for(i=0;i<4;i++)
{
SBUF=DAT[i];
while(TI==0); //等待数据发送完毕
TI=0; //手动清0
}
四位字符,接收用串口中断 voidck_js()interrupt4
{
unsignedchari;
for(i=0;i<4;i++)
{
while(RI==0); //等待数据接收
RI=0;//手动清零
DAT[i]=SBUF; //接收到的字符存放
}
}
多位字符接收函数 voidseri_int()interrupt 4
{
count1=0;
if(RI)
{
unsignedintcount2=10000;
while(1)
{
flag1=1;
while(!RI)
{
if(count2==0)
{
RI=0;
break;
}
count2--;
}
dat1[count1]=SBUF;
count1++;
RI=0;
}
}
}

Q3:c51,单片机从串口接收字符串,放到一个数组里面,然后在通过串口发出去。急!谢谢

#include

#defineucharunsignedchar

#defineuintunsignedint

uchardatatable[10];//暂存数组,可以将10改为你需要的数值

/***********************************************

串行口初始化波特率9600,定时器1,工作方式2*************************************************/

voidserial_init(void)

{

TMOD=0x20;//计时器1作为比特率发生器,方式2

TH1=0xfd;

TL1=0xfd;//装入初值

TR1=1;//计时中断允许

SM0=0;

SM1=1;//串行口工作于方式2

ES=1;//串行口中断允许

REN=1;//接收允许

EA=1;// 总中断允许

}

/***********************************************

串行口传送数据

传送显示数组各字符给计算机

*************************************************/

voidsend(uchar*dis)

{

while(*dis!=\0)

{

SBUF=*dis;

dis++;

while(!TI);

TI=0; //软件请发送中断

}

}

voidmain()

{

serial_init();//初始化

while(SBUF!=0x0d);//计算机键盘按下回车键,则开始将接收到的数据回传给计算机

send(table);

}

/***********************************************

串行中断服务函数

单片机接收数据,存入table数组

*************************************************/

voidserial()interrupt4

{

inti;

ES=0; //关串口中断

table[i++]=SBUF;//命令存到命令数组

RI=0;//软件清除接收中断

ES=1;//开串口中断

}

已经通过proteus仿真如下

Q4:C51单片机如何从PC机串口接收字符串?

1、单片机串口不管从哪接收数据都是遵循串口协议的。字符串就是一个挨一个的ASKII码,中间没有加任何东西。2、不发字符串结束标志。3、回车符可以发送,但具体发不发送看你程序了。

Q5:MSP430单片机 串口接收字符串 程序

这是写这段代码的人自己定义的数据帧起止符而已,0xfd表示一帧数据的开始,0xfe表示一帧数据的结束,比如发送的一段数据为 12 34 56,那么单片机这边接收到的就是 fd 12 34 56 fe,这个起止格式是由给单片机发送串口数据的设备决定的,比如PC上通过串口调试助手给430发送数据,那么如果他指定了这种起止格式就按这个发,单片机程序也要如你这段程序这么写,如果他没有这起止格式那么单片机程序就不必这么写
至于从你说的这个模块发送过来的数据接收程序怎么写,你得看这模块的DS,搞清楚它跟你这430通信发送数据时是什么格式

Q6:单片机接收通过串口发来的字符串存进一个数组里面

if(RI)
{
arr[i++]=buff;
if(i>8)
i=0;
}
这样可以接收并赋值,但是会有一个问题,上位机必须一次发送8个字节才行
如果上位机有一次发送了4个字节,在发送8个字节的时候,单片机将不能正常接收

猜你喜欢

更多