题目: 一个8XX51单片机的双机通信系统波特率为9600bps,fosc=12MHz,用中断方式编写程序,将甲机片内RAM 30H ~ 3FH的数据块通过串行口传送到乙机的片内RAM 40 ~ 4FH单元中。


串口通信是一个字节一个字节的发送与接收,但实际上我们一般都是用来多字节的传输,而当我们用来多字节传输时,我们会发现,一旦我们传输速率加快,我们传输的数据就容易出错(我认为其实会出现数据传输不完全的情况)。

那这怎么解决呢?

这个就与我们单片机的晶振与我们设置的波特率有关了,当我们采用时钟周期为11.0592Mhz的晶振时,不管设置波特率多少(1200-115200范围,11.0592的最大波特率为115200,也是常用的波特率),误差为0,也就是说,假如当我们用11.0592Mhz的晶振产生9600的波特率,结果是刚刚好的。但是当我们采用12Mhz的晶振时,波特率越大误差越大, 这个时候一般常常使用波特率加倍减小误差(但是波特率越大,加倍其实也减小不了多少误差了,甚至误差不变)。

其实,我们可以通过延时来减小传输数据的误差,让其传输慢一点

比如题目要求我们要传输16个字节的数据,这个延时不加的话,会有问题(我出现了传输字节不够的情况,即没有传输到16个字节)。

发送数据时这个延时不能少,而当我们接收数据时,这个延时似乎是可以不要的(因为测试的时候我没有发现问题,原因我也不清楚),我为了保险,也进行了延时。

 //发送数据SBUF=*p;    //将p指向的地址所存储的值放进缓存区delay1ms(1);   //延时1ms//接收数据*p=SBUF;      //读取缓冲区的值delay1ms(1);  //延时1ms

完整代码如下

//发送数据

#include <reg52.h>
#include "Delay.h"unsigned  char *p;  //指针,用来指向内存地址void UART_Init()
{TMOD=0x20;    //设置计数器工作方式2SCON=0x40;    //串行口设置为工作方式1TH1=0XFD;     //计数器重装载值设置TL1=0XFD;        //计数器初始值设置TR1=1;               //打开计数器ES=1;           //打开接收中断EA=1;              //打开总中断p=0x30;     //p指向内存地址为0x30的空间SBUF=*p;    //将0x30这个地址所存储的值放进缓存区delay1ms(1);   //延时1ms
}void main()
{unsigned  char k=0;p=0x30;*p=k;while(p!=0x3F)  //给30H ~ 3FH的内存地址赋值{p++;k++;*p=k;}UART_Init();   //中断初始化while(1);
}void UART_Routine() interrupt 4
{TI=0;       //清除发送完成位标志p++;SBUF=*p;      //将值存入缓冲区delay1ms(1);  //延时1msif(P==0x3F)EA=0;   //关闭总中断
}

//接收数据

#include <reg52.h>
#include "Delay.h"unsigned char  *p;void UART_Init()
{TMOD=0x20;    //设置计数器工作方式2SCON=0x50;     //串行口设置为工作方式1,并允许接受TH1=0XFD;     //计数器重装载值设置TL1=0XFD;     //计数器初始值设置TR1=1;        //打开计数器ES=1;        //打开接收中断EA=1;        //打开总中断p=0x40;
}void main()
{   UART_Init();while(1);
}void UART_Routine() interrupt 4
{RI=0;         //清除接收完成位标志*p=SBUF;      //读取缓冲区的值delay1ms(1);  //延时1msp++;if(P==0x4F)EA=0;     //关闭总中断
}

测试结果

如果发现错误,请告知。

单片机串口通信的多字节传输相关推荐

  1. 基于PC与单片机串口通信的温度监控系统程序设计

    基于PC与单片机串口通信的温度监控系统程序设计 1.系统介绍 1)本系统主要讲解基于PC与单片机串口通信的温度监控系统程序设计(如图1),上位机采用常用的PC机,下位机使用的是STC89C52单片机, ...

  2. 51单片机-串口通信

    目录 1.什么是通信 1.1.通信的概念 1.2.传送方式 1.3.同步方式 1.4.传送方向 1.5.校验方式 2.单片机串口介绍 2.1.硬件电路 2.2.电平标准 2.3.常见接口 2.4.内部 ...

  3. 51单片机串口通信模板_深入理解51单片机串口通信及通信实例

    串口通信的原理 串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一 ...

  4. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

  5. Atmega16单片机串口通信

    Atmega16单片机串口通信 Atmega16单片机串口通信 串口通信需要使用到的内部寄存器 程序代码 Atmega16单片机串口通信 本篇文章参考自叶大鹏老师于2008年4月5日完成的UART通信 ...

  6. 51单片机串口通信【收集学习向】

    本篇整理了学习51串口通信过程中看到的一些比较好的文章,有很多的超链接.并根据自己遇到的情况分析了串口传输乱码的一些原因. 目录 1.原理知识 2.测试程序和虚拟仿真 3.电路设计与公母口连线 电路设 ...

  7. 《单片机串口通信及测控应用实战详解》——6.3 PC端程序设计

    本节书摘来异步社区<单片机串口通信及测控应用实战详解>一书中的第6章,第6.3节,作者:李江全,聂晶,梁习卉子,刘新英,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  8. 蓝桥杯单片机串口通信学习提升笔记

    今日得以继续蓝桥杯国赛备赛之旅: 有道是 "不知何事萦怀抱,醒也无聊,醉也无聊,梦也何曾到谢桥." 那我们该如何 让这位诗人纳兰 "再听乐府曲 ,畅解相思苦"呢 ...

  9. 普中单片机--串口通信(2)---通过串口助手发送数据点LED

    普中单片机–串口通信(2) 通过串口助手发送数据 点亮LED 软件部分 #include <reg52.h> #define jingzhen 12000000UL /*使用12.0M晶体 ...

  10. 51单片机串口通信模板_51单片机串口通信

    51 单片机串口通信 51 单片机串口通信(转载) 2009-03-03 18:22 一.串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计 算机端,而且也能实现计算机对单 ...

最新文章

  1. 【js】内置对象String的常用方法
  2. 在一个有返回值的方法中,用block回传的解决方法
  3. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
  4. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)
  5. 贫穷中透着零基础的单人制作游戏手册之二:做游戏不光靠创意
  6. DAVINCI开发原理之三----达芬奇编解码引擎Codec Engine(CE)
  7. MapReduce中的InputFormat(1)概述
  8. unity3d 鼠标延各个方向拖拽物体
  9. 让PHP查询mysql时不区分大小写
  10. 转载:图解SSL/TLS协议
  11. 《学习之道》第十七章保持平静
  12. FRR BGP协议分析12 -- ZEBRA路由的处理1
  13. 序列选项设置html,clustalx序列比对步骤
  14. 未转变者服务器载具名称,未转变者可以乘坐哪些车及载具参数介绍
  15. RocketMQ创建topic流程解析
  16. 微信红包服务器连接失败是怎么回事啊,微信公众平台,红包_微信发红包接口,线下测试正确,服务器上提示CA证书错误,微信公众平台,红包 - phpStudy...
  17. Apostrophe not preceded
  18. 农村也可以干大事业,小伙返乡种植葡萄,年收益达100万
  19. Ubuntu18.04安装sagemath(命令行安装,超方便)
  20. QSocketNotifier: Socket notifiers cannot be enabled or disabled from another

热门文章

  1. 武汉大学计算机学院2010情景剧,武汉大学金秋情景剧大赛精彩落幕(组图)
  2. 阿里巴巴JAVA代码规范三【考题】
  3. 【大数据技术详解】搭建redis集群服务的步骤和配置以及解决创建集群时会遇到的错误:NodeX replied with error:ERRInvalid node address specified
  4. 天使轮,种子,A轮,B轮,C轮,Pre-IPO
  5. java pdf 水印_java 如何给pdf文件加水印
  6. 易捷行云荣登“2020行业信息化百强之云计算大数据20强榜单”
  7. IT“茫一代”转型记:创业维艰 苦乐皆有
  8. 如何让技术大佬失去理智
  9. 万物互联时代,谷歌、亚马逊Alexa、homekit该如何选择?
  10. 程序员常用网站和工具(持续更新)