51单片机串口收发字符串源程序

发布者:明理厚德最新更新时间:2020-08-08 来源: 51hei关键字:51单片机  串口  收发字符串 手机看文章 扫描二维码
随时随地手机看文章

想要通过串口控制led,但是串口每次中断只能发送一个字符,这样在控制的时候不太容易清楚各个命令是控制哪一部分,所以参考网上的资料,写了个简单的字符串收发函数。本程序的功能是:电脑串口助手发送数据给单片机,单片机接收后返回给电脑,在发送的时候,需要空两格再输入想要传送的内容,不然的话传输的数据会丢失,因为这个情况不影响串口控制LED,所以就没管了。


单片机源程序如下:

#include

typedef unsigned char uchar;

typedef unsigned int uint;

sbit led=P2^0;

void Usart_Init()

{

TMOD=0X20;

PCON=0X80;

SCON=0X50;

TH1=0XF3;

TL1=0XF3;

TR1=1;

ES=1;

EA=1;

}



uchar strk[50];


void delay(unsigned int i){unsigned int j;for(i;i>0;i--)for(j=0;j<120;j++);}//延时函数

void sendbyte(unsigned char byt){SBUF=byt;while(!TI);TI=0;}        //串口字符发送函数


void  receivebyte()        /*串口接收函数*/

{

uchar shiftdata;//转移数据变量,将SBUF接收到的数据线存储到这个地方,再转存到数组当中

static uint i=0;

                               

if(RI){

RI=0;shiftdata=SBUF;strk[i]=shiftdata; i++;

if(shiftdata==''||shiftdata=='n'){i=0;}

      }                   

}


/*以下是串口字符串发送函数*/

void sendstring(unsigned char *string){       

uint k;

while(*string!='')

{

sendbyte(*string);delay(100);string++;

}for(k=0;k<50;k++)strk[k]=0;

}

                                                                                                                                                                                    


void main()

{

Usart_Init();

while(1)

{

if(strk[2]=='o'&&strk[3]=='n')led=0;

if(strk[2]=='o'&&strk[3]=='f'&&strk[4]=='f')led=1;

if(RI){sendstring(strk);}


}

}



void Usart_o() interrupt 4

{


  receivebyte();


       

}

1111.png


关键字:51单片机  串口  收发字符串 引用地址:51单片机串口收发字符串源程序

上一篇:STC15系列单片机RS-485通讯例程(带CRC校验)
下一篇:基于SC95F8616单片机的中文菜单MP3点歌器 (2)

推荐阅读最新更新时间:2024-10-23 11:55

51单片机串口收发字符串源程序
想要通过串口控制led,但是串口每次中断只能发送一个字符,这样在控制的时候不太容易清楚各个命令是控制哪一部分,所以参考网上的资料,写了个简单的字符串收发函数。本程序的功能是:电脑串口助手发送数据给单片机,单片机接收后返回给电脑,在发送的时候,需要空两格再输入想要传送的内容,不然的话传输的数据会丢失,因为这个情况不影响串口控制LED,所以就没管了。 单片机源程序如下: #include reg52.h typedef unsigned char uchar; typedef unsigned int uint; sbit led=P2^0; void Usart_Init() { TMOD=0X20; PCON=0X80; S
[单片机]
<font color='red'>51单片机</font><font color='red'>串口</font><font color='red'>收发</font><font color='red'>字符串</font>源程序
C51 串口收发,printf, 接收字符串
串口发送,接收 在while(1){printf(“xxx”); delay(100); //此处需要有delay函数;} #include reg51.h //stdio.h,string.h用于printf函数原型 #include stdio.h void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void uart_init(void) { TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2 TH1=0xe6;//设置波
[单片机]
c51: 串口中断方式,收发字符串
/* 程序设计功能: 1.参数 f=12MHZ,baud=1200 2.串口中断方式:发送字符串存放字符数组tran_buf 中,接收字符串存放字符数组rec_buf 中。 2.发送字符串由16位键盘控制。由T2定时中断,每10ms扫描一次键盘。不同按键发送不同字符串。 */ #include reg52.h #include string.h #define uchar unsigned char //发送字符串缓存 uchar tran_buf ; //接收字符串缓存 uchar rec_buf ; uchar tnum=0; uchar rnum=0; //串口初始化
[单片机]
51单片机字符串口通信为什么乱码?终于找到原因了
被这个问题卡了3天,代码很简单就是乱码出问题,烦恼! 后来查资料找到原因,晶振12MHz和11.0592Hz的问题。 如果你用的是12Mhz的单片机,定时器初值TH1一般要设置到E6(2400bps)、F3(4800bps)。 对应的在上位机配置UART串口时,选取2400 4800bps。如果试了不行,那就换更低的1200bps。 修改前 修改后 做了半天才发现我的晶振是11.0592Mhz,为啥对应的开发板视频讲的是12Mhz。 以4800bps为例,TH1=TL1=0xF4,SMOD=1,波特率翻倍=2*2400bps。这样就不会乱码了 ------------------------------
[单片机]
<font color='red'>51单片机</font><font color='red'>字符串口</font>通信为什么乱码?终于找到原因了
51单片机串口通信(字符串接收和发送)
#include reg52.h //------------------串口通信协议-----------------// /* 客户端数据包格式解释(长度恒为15): 例如:A01_fmq_01Off___# A--------数据包的开始标记(可以为A到Z,意味着数据包可以有26种) 01-----设备代号 fmq_01Off___--------指令(长度恒为10),指令的前4个人字符是指令头部,指令的后6个字符是指令尾部 #---------数据包的结束标记 服务器端数据包格式解释(长度恒为15): 例如:A02_SenT010250# A--------数据包的开始标记(可以为
[单片机]
51单片机串口通讯接收一串字符串
在51单片机中,我们使用上下位机时,我们通常会发送一串字符串,将它作为信号发给单片机处理。 因为串口通信时,发送信息是以一个个字符的形式发送过来的,所以接收的就是一个个字符,通常我们是一个字符数组保存,在进行下一步处理,同时字符数组长度固定有限,但是如果上位机发送的字符不满足我们想要处理的数据时,其接收的数据多出的部分就有可能保存在SBUF中, 影响接下来的数据接收,以至于接下来的数据不满足我们的要求。或是发送数据少于数组长度时,也会出错。 在这里我的解决办法(以下以STC12C5A60S2芯片为例): void serial_port_one_init() { //根据自己单片机设置;
[单片机]
51单片机串口向计算机发送字符串C程序
51单片机串口向计算机发送字符串C程序,本布衣实验过的,可以用,串口需有一个232-TTL电平转换 通过串口调试助手可以看到发送字符信息。波特率为9600 #include REGX51.H #include stdio.h //-------------------------------- char *name_month(int n); void Delay(int x); void put(char str); void initUart(void); void putString(unsigned char const *pstr);//const //------------------------------ vo
[单片机]
51单片机串口通信的发送与接收 字符串
51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。 当串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。 无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。 在中断程序中,要区分出来究竟是发送引起的中断,还是接收引起的中断,然后分别进行处理。 看到过一些书籍和文章,在串口收、发数据的处理方法上,很多人都有不妥之处。 接收数据时,基本上都是使用 中断方式 ,这是正确合理的。 即:每当收到一个新数据,就在中断函数中,把 RI 清零,并用一个变量,通知主函数,收到了新数据。 发送数据时,很多的程序都是使用的 查询方式 ,就是执行 while(T
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved