stc51单片机串口接收多字节数据

简介

51单片机有2个定时器,一个做串口波特率,一个做数据截止帧延时检测,硬件平台测试使用的是stc8的单片机,但是可以往51移植

代码

#include "stc8.h"
unsigned char flag=0;   //定义标志位,用来判断接收了多少个字符
void UartInit(void)     //9600bps@24.000MHz
{SCON = 0x50;      //8位数据,可变波特率AUXR |= 0x40;      //定时器1时钟为Fosc,即1TAUXR &= 0xFE;     //串口1选择定时器1为波特率发生器TMOD &= 0x0F;        //设定定时器1为16位自动重装方式TL1 = 0x8F;      //设定定时初值TH1 = 0xFD;        //设定定时初值ET1 = 0;       //禁止定时器1中断TR1 = 1;     //启动定时器1ES = 1;         //打开串口中断
}void time0init()   //定时器0初始化
{TMOD &= 0xF0;TL0 = 0;                                 //65536-11.0592M/12/1000TH0 = 0;                   //定时器时间要大于串口接收一帧的时间,一般以1.5倍即可TR0 = 0;                                    //启动定时器ET0 = 1;                                    //使能定时器中断EA = 1;                 //打开中断
}void main()
{time0init();UartInit();while (1);
}void TM1_Isr() interrupt 1  //定时器0中断,触发中断就意味着串口没有接收数据,定时器0定时结束
{SBUF = flag;    //将接收到的数据长度通过串口返回while(!TI);     //判断是否发送完成TI = 0;         //清除串口发送标志位flag = 0;       //数据长度清零TR0 = 0;        //关闭定时器0
}void ser() interrupt 4 //接收中断函数
{if(RI)               //判断串口接收标志位{flag++;         //数据长度自加RI=0;           //清除串口接收标志位}TR0 = 0;            //关闭定时器0TL0 = 0;            //定时器赋初值,调试后发现需要关闭定时器再赋值才能发挥作用             TH0 = 0;TR0 = 1;            //打开定时器
//串口每接收一次就会赋初值,重新打开定时器0,所以,是串口接收一个数据帧,定时器还没触发中断,就重新赋值,清零,串口接收完,
//不进行清零操作,定时器会到时间触发中断,在中断函数中完成处理,并关闭定时器,等待串口接收数据后打开定时器
}

stc51单片机串口接收多字节数据相关推荐

  1. 89C52单片机 串口接收发送 数据

    文章目录 1.简介 2. 功能实现 1.简介 通过串口对单片机发送数据,然后 数据 +1 返回串口 2. 功能实现 #include <reg52.h>#define uchar unsi ...

  2. 单片机串口接收数据的一些经验与教训

    一些好文章 一种单片机数据解析方法:https://mp.weixin.qq.com/s/GVH8MZrlbVKXanD45wOYOw 单片机串口接收数据需要注意以下几点 1.接收数据要有顺序,接收到 ...

  3. 单片机串口高效收发数据的实现方法

    想学习单片机的同学可以关注.私信我或者在评论区回复我要入门.这一期我们探讨传统数据收发不足之后,如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法:之后介绍一种特殊 ...

  4. 单片机串口接收的几种常用的数据处理方法

    单片机串口接收的几种常用的数据处理方法 一.为什么串口接收的数据需要处理 我们在做项目的时候经常会用到串口,当我们用串口和别的设备通讯的时候就需要严格遵循通讯协议,然而,仅仅是遵循通讯协议是不够的,因 ...

  5. 华大单片机-串口通讯多字节

    目录 华大单片机---串口通信 1.串口通信基本原理 (1)串口通信原理: (2)华大的串口通信: (3)简单介绍下: (4)多字符发送: 2.初始化代码 3.发送代码: 4.接收中断代码 华大单片机 ...

  6. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  7. 将串口接收的数据绘制成波形图(使用matlab或Visual Scope)

    一. 串口通信配置 结合stm32固件库(或其它类型单片机)中usart相关的函数,配置好串口通信的寄存器,确定(数据位.停止位.波特率等等),本文主要介绍两种方法将采集到的串口数据绘制成波形图. 二 ...

  8. 关于单片机串口接收不固定字节长度的解决方案

    之前老是有个问题困惑着小编,串口这种一字节一字节的接收和发送的机制,而在实际应用中如果收发双方不制定一个协议,没有帧头,帧尾做一帧数据接收开始和结束的标准.或者收发数据长度不固定,怎么去确定每一帧长度 ...

  9. 单片机串口接收发生溢出中断错误

    最近在写国产华大单片机HC32F4A0的串口超时中断加DMA接收数据过程中发现一个问题,在我串口收到数据进入串口超时中断后,正常情况下,如果数据量没超过DMA设定的发送次数最大情况,是能接收数据的,但 ...

最新文章

  1. 【redis】2.redis可视化工具安装使用
  2. 傅里叶变换的初级理解二
  3. html2canvas源码修改,html2canvas把div保存高清图的方法代码
  4. mkcramfs 命令学习
  5. 如何通过mac地址找到设备_如何通过 Apple Watch 解锁 Mac
  6. linux文档查看器翻译,mdv – Linux终端下的 Markdown 文档查看器
  7. 2008 r2 server sql 中文版补丁_SQL Server 2008 R2 补丁
  8. 随机效应与混合效应模型 SAS实践
  9. python爬虫和八爪鱼哪个快_python爬虫和八爪鱼哪个快
  10. ensp路由器启动显示错误40
  11. java判断硬盘为固态硬盘_怎么看电脑是不是固态硬盘|查询电脑硬盘是HDD还是SSD的方法-系统城...
  12. 我的数据可视化之旅:从天文学家到数据可视化专家养成记
  13. 渗透测试笔试面试题目汇总
  14. GeneXus for SAP的最新动态
  15. 亚马逊广告怎么做?广告效果如何提升?
  16. 一头扎进算法导论-快速排序(挖坑填数策略)
  17. 前后端分离微服务管理系统项目实战SaaS-HRM项目(九)——文件上传与PDF报表入门
  18. python 物理公式计算_计算重力/跳跃
  19. NTFS安全权限 3th
  20. 计算机控制知识点总结,自己整理的计算机控制重点

热门文章

  1. 敏捷项目管理实战之进度管理
  2. 帝国CMS8.0如何?
  3. STM32学习笔记2021/01/07
  4. 在 PowerShell 中使用 SQL Server (1)
  5. Android、iOS如何实现自动化录屏,超实用!
  6. nexus5 android os 耗电,Nexus5刷android 9系统?
  7. 【PyTorch】PyTorch搭建基础VGG16网络
  8. 一个计算机高手的成长——推荐一读
  9. 基于ZYNQ7020使用Verilog点亮 RGB TFT-LCD
  10. 一加连续点Android版本号,一加5T Android8.0全国首刷/附加教程和ROM