历史上的今天

今天是:2024年08月31日(星期六)

2021年08月31日 | 51单片机-再次熟悉串口

发布者:安静的夜晚 来源: eefocus关键字:51单片机  串口  调试工具 手机看文章 扫描二维码
随时随地手机看文章

串口是非常常用的一个调试工具,我们都必须熟练使用串口的各个功能。


1.题目要求和解决方案


我们要做的是,电脑端发送字符串过来给单片机,然后单片机这边接收完之后要回复给电脑端,回复内容为“接收完成!”。单片机这边把接收到的数据存放在定义好的全局变量数组里面,我们可以通过按K4发送回去给电脑端查看刚刚接收到的内容并把它显示出来。


我们要知道,一个汉字是需要两个字节内存的,比如电脑端发送的字符串为“好好学习,天天向上!”其中的两个标点符号也是中文输入法打上的话,一个标点符号也是占用两个字节,这个字符串就是一共占用10*2=20个字节内存。


那么怎样判断是否把字符串的数据都接收完成了呢?我们参考了宋老师的编程思想,使用定时计数器,也就是让定时器0使用工作模式1计时,接收到第一个数据的时候我们先把TH0和TL0清0,然后打开定时器开始计时,当接收到第二个数据的时候又把TH0和TL0清0让他们从0开始再次计时,直到当TH0大于等于200的时候证明时间过去了50ms左右( 200*256*(12/11059200)= 0.055秒 ),如果在这50ms里面都不再接收地到数据,那么断定已经把字符串的数据都接收完成。


我们程序里定义的数组有关键字pdata,大家在《手把手教你学51单片机》文档10.4节了解一下知识点即可。


2.main.c测试代码


#include  

#include //详见第六章第8讲

#include      //详见第十章第4讲

  

u8 uart_i=0;

u8 pdata RXDBUF[64];

void COUNT_TIMES()

{

    TMOD&=0xF0;    //清0低四位

    TMOD|=0x01;    //设置定时器0为工作模式1

}

  

void main()

{    

    u8 key,x;

    KEY_Init();    //初始化按键模块

    EA = 1;        //闭合总中断开关

    COUNT_TIMES(); //初始化计数器

    ConfigUART(9600);

    

    while(1)

    {  

        key=KEY_Scan(0,500);

        if(key==4)

        {

            printf_str("收到的内容为:rn");

            printf_str(RXDBUF);                 //把接收到的字符串发送给电脑端

            for(x=0;x<64;x++)RXDBUF[x]=0x00;    //发送完接收到的字符串之后,内存区全部清除数据,统一改为0x00以便下次接收新的字符串

        }

         

        if(TH0>=200)                            //判断是否把数据接收完毕

        {

            TR0=0;                              //关闭定时器,停止计时

            printf_str("rn接收完成!rn"); 

            

            RXDBUF[uart_i]='';                //增加结束符,满足了“printf_str(RXDBUF);”该发送多少数据就是多少

            uart_i=0;                           //uart_i归0是为了下次接收新的字符串是从RXDBUF[0]开始存取数据

            TH0=0;                              //清零定时器的寄存器,下次再从0开始计时  

            TL0=0;     

        }

    } 

}

  

void InterruptUART() interrupt 4

{  

    if (RI)   //接收到字节

    {

        RI = 0;

    

        TH0=0;//每接收到一个字节数据,就清0寄存器的值,定时时间又是从0开始计时,直到TH0大于等于200的时候,

        TL0=0;//时间超过50ms,也就是没有再接收到数据,因为接收到数据都会进入“if (RI)”把TH0和TL0清0,TH0大于等于200,

              //超出了等待时间,证明后面没有数据发送过来了   

        TR0=1;//接收到第一个数据就打开定时器开始计时,后面接收到第二,第三个数据照样打开定时器计时,直到在主函数里面被关闭为止

    

        RXDBUF[uart_i]=SBUF;//接收一个字节数据

        uart_i++;           //RXDBUF从0号元素不停往下存取数据   

    }

}


3.实验现象


我们先把串口调试助手的设置选项选好

15.2.png

打开串口之后,在输入框打上“好好学习,天天向上!”,点击发送,可以看到如下界面

15.3.png

我们在开发板上按下K4,把刚才接收到的字符串发送回来给电脑端显示出来

15.4.png

如果不断按K4,将没有显示新的内容,因为程序里一但把上次的数据发送给电脑端显示就清除掉这些数据了,我们接着不断按K4会有如下所示

15.5.png

只有再次发送内容,再按K4才会显示新的内容

15.6.png

关键字:51单片机  串口  调试工具 引用地址:51单片机-再次熟悉串口

上一篇:51单片机-模拟倒车雷达报警
下一篇:51单片机-串口&液晶屏Ⅰ

推荐阅读

近两年,中国汽车进入微增长时代,汽车市场红利逐渐流失,今年7月,汽车销量首次出现下滑现象。据乘联会发布数据,今年7月中国狭义乘用车销量为157万辆,同比下滑5.7%;产量也受到影响同比下滑3.7%,为169万辆。 对此,有专家认为,汽车市场已经进入平台期,需求疲软,产能过剩的问题已慢慢浮现。的确,中国汽车产业产能过剩问题日渐浮现,与此同时部...
类似Amazon Go这样的无人商店可能会是未来零售业发展的其中一个方向,但对于沃尔玛来说,将当前硕大的商超做如此前卫的改造还不现实,不过,自动化程度的提升还有其它手段,比如机器人。 早在2017年,沃尔玛就在50家老式门店启用库存扫描机器人。今年,试点扩大到350家门店,且机器人开始越来越接近过道售货员的角色,甚至可以为部分低价促销商品提供...
8月26日下午,搭载刀片电池的比亚迪汉全国首撞引起了不少人关注。在北京市丰台区,一辆比亚迪汉EV小型轿车由南向北行驶,驶上中心隔离带发生单方面交通事故,造成车辆接触部位损坏,所幸无人受伤。 8月27日,比亚迪汽车官方对此次事件进行了回应。官方发布声明表示,经了解,此次事故为客户在试驾过程中的错误操作导致(传司机错把油门当刹车踩),试驾车在...
借着成都车展的东风,广汽埃安在8月30日发布了属于自己的超充技术——超倍速电池技术,并展示了与之配套的A480超充桩。每当新技术发布时,广汽埃安对于数字一向不吝啬,这次它能为人们带来怎样的冲击?超倍速电池技术:比Taycan更极端从电化学角度出发,广汽埃安认为,提高动力电池充电速率的关键,在于提升离子在其中的电导率(或者说迁移/嵌入速率)。为...

史海拾趣

问答坊 | AI 解惑

ISO7816智能卡标准

ISO7816智能卡标准…

查看全部问答∨

用NE555制作电风扇周波调速电路

电路中NE555接成占空比可调的方波发生器。在NE555的3脚输出高电平期间,过零通断型光电耦合器MOC3061初级得到约10mA正向工作电流,使内部硅化镓红外线发射二极管发射红外光,将过零检测器中光敏双向开关于市电过零时导通,接通电风扇电机电源,风扇 ...…

查看全部问答∨

背负式便携发射机 C321

在突发事件现场,工作人员携带小型摄像机接驳到便携发射机,将事故现场情况的图像、声音采集并实时传输至指挥车或临时指挥部,指挥员可对现场情况分析,以便组织调度和远程指挥。   该产品可广泛用于公安﹑海关、消防﹑油田﹑矿山﹑银行、交通等 ...…

查看全部问答∨

封装资料

一些事自己整理,一些事在网上下载的 [ 本帖最后由 zhangkai0215 于 2009-12-22 18:02 编辑 ]…

查看全部问答∨

KEIL命令调试祥解

本帖最后由 paulhyde 于 2014-9-15 09:14 编辑  …

查看全部问答∨

三星4510ARM开发板280元谁要,拿来学习用不错的

带JTAG接口,LCD,完整的软件开发包资料等 有兴趣者可以联系我,最好在杭州 QQ12665590…

查看全部问答∨

求教:Errors loading SDK(S)

安装BSP包后,打开时出现     Errors loading SDK(S):     E:E:\\WINCE600\\OSDesigns\\S3C6410_DEMO\\S3C6410_DEMO\\SDKs\\SDK1\\SDK1.sdkcfg does not exist 请问这个怎么解决。 弄了好几遍,都是这样,急盼!谢谢啊!…

查看全部问答∨

高分悬赏:如何实现多台仪器时钟同步?

现在我遇到这样一个问题,想请教一下大家,在网上也没有收集到相关的资料(不好意思,以前没用过这些东西,可能说起来比较外行)。 一台电脑和多台仪器组成一个分布式控制系统,现在想实现这几台仪器能够同时采集数据,该怎么办? 现在基本的思路 ...…

查看全部问答∨

有段ARM汇编代码不理解,请高手指点.

             IMPORT      |Image$$RO$$Limit|              IMPORT      |Image$$RW$$Base|      & ...…

查看全部问答∨

哪位大侠有飞思卡尔K60的MDK例程?

第一次接触飞思卡尔的片子。对IAR不熟悉。哪位大侠有飞思卡尔K60的MDK例程?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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