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个字节的时候,单片机将不能正常接收