stc51单片机串口接收多字节数据
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单片机串口接收多字节数据相关推荐
- 89C52单片机 串口接收发送 数据
文章目录 1.简介 2. 功能实现 1.简介 通过串口对单片机发送数据,然后 数据 +1 返回串口 2. 功能实现 #include <reg52.h>#define uchar unsi ...
- 单片机串口接收数据的一些经验与教训
一些好文章 一种单片机数据解析方法:https://mp.weixin.qq.com/s/GVH8MZrlbVKXanD45wOYOw 单片机串口接收数据需要注意以下几点 1.接收数据要有顺序,接收到 ...
- 单片机串口高效收发数据的实现方法
想学习单片机的同学可以关注.私信我或者在评论区回复我要入门.这一期我们探讨传统数据收发不足之后,如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法:之后介绍一种特殊 ...
- 单片机串口接收的几种常用的数据处理方法
单片机串口接收的几种常用的数据处理方法 一.为什么串口接收的数据需要处理 我们在做项目的时候经常会用到串口,当我们用串口和别的设备通讯的时候就需要严格遵循通讯协议,然而,仅仅是遵循通讯协议是不够的,因 ...
- 华大单片机-串口通讯多字节
目录 华大单片机---串口通信 1.串口通信基本原理 (1)串口通信原理: (2)华大的串口通信: (3)简单介绍下: (4)多字符发送: 2.初始化代码 3.发送代码: 4.接收中断代码 华大单片机 ...
- javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...
STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...
- 将串口接收的数据绘制成波形图(使用matlab或Visual Scope)
一. 串口通信配置 结合stm32固件库(或其它类型单片机)中usart相关的函数,配置好串口通信的寄存器,确定(数据位.停止位.波特率等等),本文主要介绍两种方法将采集到的串口数据绘制成波形图. 二 ...
- 关于单片机串口接收不固定字节长度的解决方案
之前老是有个问题困惑着小编,串口这种一字节一字节的接收和发送的机制,而在实际应用中如果收发双方不制定一个协议,没有帧头,帧尾做一帧数据接收开始和结束的标准.或者收发数据长度不固定,怎么去确定每一帧长度 ...
- 单片机串口接收发生溢出中断错误
最近在写国产华大单片机HC32F4A0的串口超时中断加DMA接收数据过程中发现一个问题,在我串口收到数据进入串口超时中断后,正常情况下,如果数据量没超过DMA设定的发送次数最大情况,是能接收数据的,但 ...
最新文章
- 【redis】2.redis可视化工具安装使用
- 傅里叶变换的初级理解二
- html2canvas源码修改,html2canvas把div保存高清图的方法代码
- mkcramfs 命令学习
- 如何通过mac地址找到设备_如何通过 Apple Watch 解锁 Mac
- linux文档查看器翻译,mdv – Linux终端下的 Markdown 文档查看器
- 2008 r2 server sql 中文版补丁_SQL Server 2008 R2 补丁
- 随机效应与混合效应模型 SAS实践
- python爬虫和八爪鱼哪个快_python爬虫和八爪鱼哪个快
- ensp路由器启动显示错误40
- java判断硬盘为固态硬盘_怎么看电脑是不是固态硬盘|查询电脑硬盘是HDD还是SSD的方法-系统城...
- 我的数据可视化之旅:从天文学家到数据可视化专家养成记
- 渗透测试笔试面试题目汇总
- GeneXus for SAP的最新动态
- 亚马逊广告怎么做?广告效果如何提升?
- 一头扎进算法导论-快速排序(挖坑填数策略)
- 前后端分离微服务管理系统项目实战SaaS-HRM项目(九)——文件上传与PDF报表入门
- python 物理公式计算_计算重力/跳跃
- NTFS安全权限 3th
- 计算机控制知识点总结,自己整理的计算机控制重点
热门文章
- 敏捷项目管理实战之进度管理
- 帝国CMS8.0如何?
- STM32学习笔记2021/01/07
- 在 PowerShell 中使用 SQL Server (1)
- Android、iOS如何实现自动化录屏,超实用!
- nexus5 android os 耗电,Nexus5刷android 9系统?
- 【PyTorch】PyTorch搭建基础VGG16网络
- 一个计算机高手的成长——推荐一读
- 基于ZYNQ7020使用Verilog点亮 RGB TFT-LCD
- 一加连续点Android版本号,一加5T Android8.0全国首刷/附加教程和ROM