导航:首页 > 操作系统 > 51单片机串口字符串

51单片机串口字符串

发布时间:2023-05-17 15:46:24

A. 51单片机 串口通信 检查接收的字符串

首先SBUF只有8位 即一字节,而"adcd"有4字节+‘’个,你这把temp和“abcd”比较永远只能为假。所以LED1=!LED1;这条语句不能执行。正确的做法是建立一个变量,将SBUF接受到的字符存入变量,然后再比较

B. 51单片机C语言-串口输入字符串并响应

给你个思路吧,不带通讯协议,不带中断的,你自己往上填
#include "regx52.h"
#define 0x1 OPEN_LED
#define 0x2 CLOSE_LED
main()
{
TH1=0x;//设置波特率
//设置串口通讯方式,8位接收,1停止位
//启动T1
while(1)
{
if(RI)//如果接收到字符
{
switch(SBUF)
{
case OPEN_LED:P4_6=1;break;//如果接收到开灯命令,灯亮
case CLOSE+LED:P4_6=0;break;
default:;
}
RI=0;
}
}
}

C. 51单片机串口收发字符串求助

51单片机串口发字符串的方法有多种,比较容易理解的方法是:先定义一个要发送的字符串,就是一个字符串数组。
发送时,连续发送个数组。
接收字符串,也可以采用类似的方法,先声明一个字符串,接收时,每接收一个就存入这个串中,接收结束,查这个字符串就行了。

D. 51单片机串口接收字符串

51单片机串口接收字符串,接收的字符串长度不定,无结束符,要判断这个字符串结束,确实比较难。如果每个字符串还是连续发送,几乎是无法判断的。如果每个字符串之前有一定的空闲时间,可以根据最短的空闲时间来判断结束。即接收每一个字符都开始计时,接收下一个字符结束计时,如果计时的时间超过最短的空闲时间,则前一个字符为结束,且新字符串开始。并再重新计时。

E. 怎么用51单片机向串口调试助手发送字符串有程序解释更好啊,求解~

ASCII码在单片机中也是用16进制来表示的,只是解码后显示的是字符,你要是随便发一个字符,串口调试助手选择字符显示接收就可以显示一个字符出来(可能我们不认识这个字符)。发送一个字符串就是不停的发送直到发送完毕,51单片机有自己的串行发送端口P3.0和P3.1端口,但是它是一个字节一个字节发送的,发送完一个字节会产生一个中断(也可以用判断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];//启动发送
}

F. 51单片机,通过串口助手向单片机发送字符串,单片机将字符串逆序发送回计算机,用C语言编程

像这种发送字符串的,需要有一个字符串结束标志,不能用0作为字符串结束标志了!这里以回车作0xd为结束标志!

#include <reg51.h>

typedef unsigned char uint8;

bit flag = 0;

uint8 idata buf[30];

uint8 ct;



void InitUART(void) //串口初始化 9600bps

{

TMOD = 0x20;

SCON = 0x50;

TH1 = 0xFD;

TL1 = TH1;

PCON = 0x00;

EA = 1;

ES = 1;

TR1 = 1;

}


void Send(uint8 c)

{

SBUF = c;

while(!TI);

TI = 0;

}


void main(void)

{

char j;

InitUART();

while(1)

{

if(flag) //是否接收到回车 字符串发送完

{

flag = 0;

for(j = ct ; j > 0 ; j--)

{

Send(buf[j-1]);

}

}

}

}


void UARTInterrupt(void) interrupt 4

{

static uint8 i = 0;

if(RI)

{

RI = 0;

buf[i++] = SBUF;

if(SBUF == 0x0d) //接受到回车

{

ct = i-1 ;

flag = 1;

i = 0;


}

}

else

TI = 0;

}

仿真结果

程序作为参考 希望 你自己能理解程序!只有自己掌握了才能很好地用!

G. 51单片机串口接收中断连续接收字符串,中断一直占有CPU时间直到字符串接收完毕

1楼薯誉的说法明显不对,串口接收时有标志位RI,当串口接收到一个字符(8位)时,RI会自动被置1,此时CPU会从主程序转去执行串行中断,普通单串口51单片机一般为 interrupt 4 子程序,当执行完时会自动回渗册到主程序继续执行,因此自 interrupt 4子程序结尾要把RI清零,以接受下一个中断,否则无法再接收下一个数据
interrupt 4主程序中一般处理方式是将接收寄存器SBUF中的数据转存到事先定义的缓存中,如果是接受字符串时请丛手宏注意缓存需移位,例程如下:
void Serial_interrupt() interrupt 4
{
uchar temp;
rec_data[i++]=SBUF; // rec_data为事先定义的接收缓存,可以持续接收,直到你需要串口数据时来取为止
RI=0;//接收中断信号清零,表示将继续接收
}

阅读全文

与51单片机串口字符串相关的资料

热点内容
镂空加密隔断墙效果图 浏览:539
windows7怎么安装证书服务器 浏览:952
证券业务的程序员 浏览:202
u点服务器wifi密码如何设置 浏览:864
宝马x5大灯编程 浏览:673
python安装和使用 浏览:381
加密的门禁卡复制了用不了 浏览:714
javacsv读写 浏览:806
ug编程教程pdf 浏览:763
latex编译软件安卓版 浏览:248
如何在信合app上交居民医保 浏览:109
丑恶pdf 浏览:365
陕西定频压缩机销售公司 浏览:795
安卓系统如何帮人打王者 浏览:427
sbtlinux安装 浏览:141
阿里云sip服务器 浏览:73
身为程序员的你怎么拼命 浏览:453
android图片手势放大 浏览:586
钱的所有算法 浏览:13
光模块服务器怎么直接连电脑 浏览:376