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

51单片机串口如何发送字符

发布时间:2022-06-30 23:06:23

⑴ 51单片机串口发送数据

程序采用了查询式发送,for(i=0;i<6;i++){SendChar(askconfig[i]); },共发送了6个字符。
再去查询收到否。
这种方法,就是有问题的,发送6个字符时,就可能收到了好几个字符,而没有及时保存,完全可能丢失信息。
应该采用中断方式接收;发送,也可以用查询,也可以用中断。
方法弄清楚了,程序就容易编写、调试了。

⑵ 51单片机通过串口实现数据的发送与接收程序

串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。
一般来说,过程如下:
1,配置串口参数、波特率等,开启串口中断;
void Init_UART()
{

}
2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;
程序一般为:
void UART_ISR() interrupt x using y
{
;串口中断处理函数
}
x - 单片机的C51中断号
y - 指定使用的当前工作寄存器组号(0-3 PSW中的RS0,RS1组合)

3,主程序
int main(void)
{
Init_UART();
while(1)
{
;//数据发送函数
}
}

⑶ C51单片机发送字符串程序怎么写

1、打开C51程序书写软件,新建工程,在弹出的对话框编辑工程名并保存到要保存的地方。

⑷ 51单片机如何将一个字符串(包含字母数字和标点)发给电脑,在电脑上的串口调试助手上能显示出来

这个很简单啊,就是发送ascll码啊,用一个for循环加一个if判断就可以了,像你这个先建个数组存放这些字符,然后需要循环68次,当if((数组中字符)==$) SBUF=0X0A,0A是换行的ascll码,其它的直接将数组中的字符发出去就行了,不过要在串口调试助手上设置ascll码显示

⑸ 51单片机串口发送

//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的
//程序编写: 龚建伟 [email protected]
//技术主页:http://www.gjwtech.com
//您有这方面的问题可以和我讨论

#include <reg51.h>
#include <string.h>

#define INBUF_LEN 4 //数据长度

unsigned char inbuf1[INBUF_LEN];
unsigned char checksum,count3;
bit read_flag=0;

void init_serialcomm(void)
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; //SMOD=1;
TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
// TI=1;
}

//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}

//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(unsigned char *str,unsigned int strlen)
{
unsigned int k=0;
do
{
send_char_com(*(str + k));
k++;
} while(k < strlen);
}

//串口接收中断函数
void serial () interrupt 4 using 3
{
if(RI)
{
unsigned char ch;
RI = 0;
ch=SBUF;
if(ch>127)
{
count3=0;
inbuf1[count3]=ch;
checksum= ch-128;
}
else
{
count3++;
inbuf1[count3]=ch;
checksum ^= ch;
if( (count3==(INBUF_LEN-1)) && (!checksum) )
{
read_flag=1; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
//就置位取数标志
}
}
}
}

main()
{
init_serialcomm(); //初始化串口
while(1)
{
if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag=0; //取数标志清0
send_string_com(inbuf1,INBUF_LEN);
}
}

}

⑹ 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;

}

仿真结果

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

⑺ 编程实现51单片机与PC的串口通信,要求波特率设置为9600,循环发送字符串“abc

#include "reg51.h"

void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}

void main(void)
{
initUart();
EA=1;
while(1)
{
send_byte('abc');

}
}

⑻ 51单片机串行通信如何发送变量字符串

上位机

下位机,发送

接收
一串数据,单片机接收
是一个字节
一个字节
接收的
需要有
通讯协议,可以自己设计
一个

多机通讯
指令码
机器号
数据1
数据2
-
-
-
数据n
校验码
结束码
这样
单片机可以判断
接收的数据
类型,接收到数据
先存放在
缓冲区,收到结束码后
再判断
指令
是否是
本机数据,是再按照
数据类型处理。

⑼ 怎么用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];//启动发送
}

阅读全文

与51单片机串口如何发送字符相关的资料

热点内容
pythonoa项目 浏览:307
android杜比音效 浏览:341
杀手47为什么连接不了服务器 浏览:108
静态路径命令 浏览:533
一直编译不过怎么办 浏览:829
汽车串联并联算法 浏览:458
助眠解压的声音音频小哥哥 浏览:277
pythoncmd换行 浏览:376
linux取消行号 浏览:355
安卓原生系统官网是什么 浏览:444
底部主图源码 浏览:878
服务器崩了有什么提示 浏览:780
远程海康服务器用什么浏览器 浏览:232
解压报纸图片 浏览:956
python微信公众号开发平台 浏览:895
知识付费网站java源码 浏览:255
方舟怎么做命令管理 浏览:849
linux流量异常 浏览:676
单片机如何给电脑加密码 浏览:519
如何删掉多余的服务器 浏览:221