请问怎么从51单片机SBUF里的一串字符串中取出两个引号之间的字符串啊

请问怎么从51单片机SBUF里的一串字符串中取出两个引号之间的字符串啊,第1张

ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P30和P31端口,但是它是一个字节一个字节发送的,发送完一个字节会产生一个中断(也可以用判断TI的方式判断是否发送完),中断响应后再次启动发送SBUF=0Xxx,就会自动连续的发送,再加上判断就可以控制发送的字节数。 串口初始化: void uart_init() { TMOD=0x20;//定时器1,模式2 SCON=0x50;//串口通讯方式1 TH1=0xfd;//波特率9600 TL1=0xfd; button=0; delay(1); TI=0;//发送中断标志位清零 RI=0;//接收中断标志位清零 TR1=1;//启动定时器1 EA=1; //使能全局中断 ES=1; //启动串口中断 } } void main() { P1=0xff; uart_init() ; while(1) { } // 串行中断程序 void commIntProc() interrupt 4 { if(TI) { TI = 0; if(sendPosi < sendCount) //判断是否发送完成 { sendPosi++; //发送一次计数器加一 SBUF = sendBuf[sendPosi];//启动发送 }

说明单片机串口接收的是ASCII字符,字符 ‘ 0 ’ 的ASCII码就是48,把接收的字符(在SBUF中)减去48,等于转换成数值了。字符‘ 0 ’转换后变成 0,字符 ‘ 9 ’转换成9。

不过,这种写程序的方法确实少见,可以直接用接收的字符来处理吗。

这就是,每个人的编程思路和方法是不同的,不能强求啊。

现在一般的单片机都有FIFO这个概念了,就是你发送的数据不是直接给SBUF而是给了一个堆栈,这个堆栈的数据通过串口模块发送出去,发送之后什么时候中断时按照你得配置信息进行的。例如你可以设置在堆栈80%的时候进中断,也可以发送一个标准宽度进一次,这个可以设置。不确定你用的单片机,所以具体的不知道。

串口收到的数据,应该送到接口,当场显示。

试试如下程序:

#include<reg52h>

void main(void)

{

//初始化串口

PCON = 0x00; //波特率不增加

SCON = 0x50;

TMOD = 0x20; //定时器1工作方式2

TH1 = 0xfa; //4800波特率,110592M

TL1 = 0xfa; //

TR1 = 1;

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

EA = 1; //开总中断

while(1);

}

void inter() interrupt 4

{

unsigned char ch;

if (RI) {

RI = 0;

ch = SBUF;

P1 = ch; //用P1口当场显示

}

}

1、SBUF 是两个寄存器,名字虽然一样,发送的只能写,接受的只能读。

2、SBUF收到数据会产生接收中断,接收中断产生后无法再接收其他数据,知道读取SBUF后将接收中断清零,因此

recdat=SBUF;

while(RI==0);

应该交换次序。

3、未产生接收中断时,SBUF值并不固定,串口数据串行传入也是一位一位的改变的,可能读取到非法值。

以上就是关于请问怎么从51单片机SBUF里的一串字符串中取出两个引号之间的字符串啊全部的内容,包括:请问怎么从51单片机SBUF里的一串字符串中取出两个引号之间的字符串啊、在单片机串口通信中 SBUF-48是什么意思呢、单片机SBUF接收发送顺序和进入中断的顺序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9754149.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存