当前位置:首页>科技>正文

单片机怎么接收字符串 51单片机串口接收位置长度字符串,如何判断接收到最后一个字符呢

2023-04-18 06:33:55 互联网 未知 科技

 单片机怎么接收字符串 51单片机串口接收位置长度字符串,如何判断接收到最后一个字符呢

单片机怎么接收字符串

void init_ser(){ TMOD=0X20//定时器1工作在方式2 TH1=0XFD TL1=0XFD //波特率9600 TR1=1 EA=1 SM0=0 SM1=1 REN=1//允许串口接收 ES=1//开串口 中断 }void delay(unint z){ unint x,y for(x=zx>0x--) for(y=110y>0y--) }void ser() interrupt 4 //中断函数不用声明 { if(RI==1) { RI=0 ser_receive=SBUF if(ser_receive==a) { m=1 } if( m==1 && ser_receive!=z) { receive_data[i]=ser_receive i // if(i==36)// {// i=0// ser_flag=1// } } else if (ser_receive==z) { i=0 m=0 ser_flag=1 xianshi=1 } } }void uart(){ if(ser_flag==1) { ES=0 ser_flag=0 for(j=0j<57j ) { SBUF=receive_data[j] while(!TI) TI=0 delay(10) } ES=1 }}我刚写的,接受以a开始,以z结束的字符串,测试没问题。

51单片机串口接收位置长度字符串,如何判断接收到最后一个字符呢


可以用延时来判断,例如波特率9600b/s, 其2个字节之间间隔<1ms
假如10ms以上没有接收则认为结束
unsigned long i
whiel(1) {i=0while(!RI) i if(i>50000) {i=0flag=1break}RI=0j=SBUF}

串口接收字符串c程序

既然都可以发一个字符了怎么不能发一个字符串呢?
unsigned char code str[] = "hello world!"
unsigned char *pstr = str
while(*pstr)
{
send_a_char(*pstr)
pstr
}
大概就这思路吧。

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

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

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

例:

char temp[4] = { A, B, C }这是一个标准字符串

那么temp[0]==A为真

以此类推temp[1] ==B

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

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

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

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

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

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

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

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

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

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