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单片机  串口  收发字符串 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic505654.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

51单片机控制+MAX7219+DS1302 电子钟
;   ***************************************************/#include <reg52.h>#include <intrins.h>   #define uchar unsigned char#define uint unsigned intsbit sclk=P1^0;sbit io=P1^1;sbit ce=P1^2;uchar time_data[]={13,6,4,17,21,51,30};//? ? ? ? ? ? ?uchar write_add[]={0x8c,0x8a,0x88
发表于 2020-09-16
51单片机控制两相四线步进电机
最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。手头有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起来。一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。原来ULN2003基本没输出电流,只能驱动有公共端的两相五线、两相六线步进电机,不能驱动2相4线步进电机。然后改用L293D驱动,可以转动。通过按钮控制正反转时发现,按键释放后,电机迅速发热,烫手。用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有归零。找到问题,就容易解决了。修改程序,可以完美
发表于 2020-09-16
51单片机lcd1602d电子时钟设计
由于课程设计需要,本人做了一个基于51单片机控制的lcd1602d显示的电子时钟电子设计产品。可以显示万年历,星期。本来还想加上温湿度的检测,发现屏幕空间不够用了。。有需要可以再另外共享那个设计。第一次单片机源程序如下:#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit rs=P1^0;                                 
发表于 2020-09-16
<font color='red'>51单片机</font>lcd1602d电子时钟设计
KEIL-51单片机实现自定义bootloader,用于程序更新
本文原创作者: 少占鱼大神关于8051的bootloader实现方式一,基本硬件需求要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新出的51大部分都能满足这个要求二,空间划分一般bootloader位于单片机代码空间的起始地址,用户程序在后面。这个需要根据实际的需求来决定,bootloader功能简单,就少占用一些,bootloader功能复杂的就多占用一些。除此之外,一般还要根据Flash的页为界线划分。附带的工程模板里,bootloader使用0x0000-0x0fff区间,用户程序使用0x1000以后的空间。三,中断的处理51单片机的中断入口一般位于0地址
发表于 2020-09-16
KEIL-<font color='red'>51单片机</font>实现自定义bootloader,用于程序更新
P10点阵屏C51单片机程序
P10点阵屏C51程序1/4扫描,四扫下行,1路16行,数据低OE高(04-P16-08)适用于HUB12接口单色P10串口模式0,普通左移,亮度速度可调,6个IO口,用的STC8F1K08,最多231个字制作出来的实物图如下: 单片机源程序如下:#include <STC8.H>#include <intrins.h>#include <string.h>#define                DATA        P30   
发表于 2020-09-16
P10点阵屏C<font color='red'>51单片机</font>程序
51单片机制作电容电感测表
单片机源程序如下:#include "reg52.h"#include "intrins.h"//-------宏定义---------#define u8 unsigned char#define u16 unsigned int#define u32 unsigned long#define Cref 2200      //基准电容值(单位pF)#define LCD_DATA P0    //LCD数据口(8位)//-------I/O定义--------sbit LCD_BUSY = P0^7; //LCD忙信号sbit LCD
发表于 2020-09-15
<font color='red'>51单片机</font>制作电容电感测表
小广播
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved