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

2023-10-31

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,即1T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1为16位自动重装方式
	TL1 = 0x8F;		//设定定时初值
	TH1 = 0xFD;		//设定定时初值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	ES = 1;         //打开串口中断
}

void time0init()   //定时器0初始化
{
	TMOD &= 0xF0;
	 TL0 = 0;                                 //65536-11.0592M/12/1000
    TH0 = 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;            //关闭定时器0
		TL0 = 0;            //定时器赋初值,调试后发现需要关闭定时器再赋值才能发挥作用             
		TH0 = 0;
		TR0 = 1;            //打开定时器
//串口每接收一次就会赋初值,重新打开定时器0,所以,是串口接收一个数据帧,定时器还没触发中断,就重新赋值,清零,串口接收完,
//不进行清零操作,定时器会到时间触发中断,在中断函数中完成处理,并关闭定时器,等待串口接收数据后打开定时器
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stc51单片机串口接收多字节数据 的相关文章

随机推荐

  • react封装一个webScoket请求

    封装一个webScoket请求 创建文件webScoket tsx写入 import React Component from react import message from antd import axios from axios e
  • Android OTA 升级之一:编译升级包

    Android OTA 升级之一 编译升级包 作者 宋立新 Email zjujoe yahoo com 前言 OTA 升级是 Android 系统提供的标准软件升级方式 它功能强大 提供了完全升级 增量升级模式 可以通过 SD 卡升级 也
  • Flex&Bison 简单入门

    Flex Bison 简单入门 Ref flex与bison 中文版 1 Flex Bison安装 安装flex sudo apt install flex 安装bison sudo apt install bison 安装gcc 若缺少
  • R语言处理缺失数据的高级方法

    主要用到VIM和mice包 install packages c VIM mice 1 处理缺失值的步骤 步骤 1 识别缺失数据 2 检查导致数据缺失的原因 3 删除包含缺失值的实例或用合理的数值代替 插补 缺失值 缺失值数据的分类 1 完
  • Python(Pandas) 中map, applymap and apply的区别(记住作用对象:dataframe中的列,每一个元素,series每一个值)

    1 apply 当想让方程作用在一维的向量上时 可以使用apply来完成 如下所示 In 116 frame DataFrame np random randn 4 3 columns list bde index Utah Ohio Te
  • Linux与Windows的区别与比较,及Linux基本命令

    Linux VS Windows Linux 内核 最初是由爱好而编写的 linux系统与ubuntu 系统的区别 linux系统是以 linux内核源码开发出来的二次操作系统 而ubuntu系统是linux 系统的其中发行版之一 5 6
  • 【马士兵】Python基础--17

    Python基础 17 文章目录 Python基础 17 特殊方法和特殊属性 new init 类的赋值与浅拷贝 知识点总结 特殊方法和特殊属性 print dir object class delattr dir doc eq forma
  • Python运维开发工程师养成记(for循环语句)

    图示 案例 通过列表索引迭代 循环使用 else 语句 好了 今天学习到这里 下节开始学习python循环嵌套 链接 https ke qq com course 4300856 tuin d8aedf68
  • 【云原生之Docker实战】使用Docker部署MongoDB数据库管理工具Mongo-Express

    云原生之Docker实战 使用Docker部署MongoDB数据库管理工具Mongo Express 一 Mongo Express介绍 1 Mongo Express简介 2 MongoDB简介 二 检查本地系统环境 1 检查系统版本 2
  • 基于tcpdump实例讲解TCP/IP协议

    http www cnblogs com ggjucheng archive 2012 02 02 2335495 html 前言 虽然网络编程的socket大家很多都会操作 但是很多还是不熟悉socket编程中 底层TCP IP协议的交互
  • 树的遍历之B树及其变种

    文章目录 1 基本概念 1 1 B树的引进 1 2 B树的定义 1 3 B树的举例 2 B 树 3 B 树 4 总结 1 基本概念 1 1 B树的引进 我们发现 之前的二叉树 AVL 2 3树 这些树每一个节点所存储的数值量就只有一个 而这
  • 【Proteus仿真】【STM32单片机】智能手环

    文章目录 一 功能简介 二 软件设计 三 实验现象 联系作者 一 功能简介 系统运行后 OLED显示温度 心率 加速度极其阈值 可按下K3键进入阈值设置模式 K1和K2调节对应阈值 K4确定 当检测体温 心率 加速度超出阈值范围 则蜂鸣器报
  • vim常用命令总结(ideavim)

    vim常用命令总结 ideavim vim常用命令总结ideavim 插入命令 删除命令 复制命令 选中命令 光标移动 功能命令 标记命令 1 插入命令 i 命令可以在当前光标之前插入文本 I 命令可以在当前行首插入文本 a 命令可以在当前
  • sudo 命令无法使用

    1 不能使用sudo命令解决方法 想查看这个用户可以使用哪些sudo命令 输入正确密码却不能查看 原因就是在 etc sudoers中未添加该用户 xm oracle sudo l sudo password for xm Sorry us
  • adb 读取短信,通话记录、日历、通讯录等的方法

    读取手机短信 adb shell content query uri content sms 这将列出所有短信消息的详细信息 例如短信内容 发送者和接收者的电话号码 时间戳等 读取手机通话记录 adb shell content query
  • MainWindow 简介

    致介绍了 Qt 各个模块的相关内容 目的是对 Qt 框架有一个高屋建瓴般的了解 从现在开始 我们将开始尝试使用 Qt 开始新的历程 由于我们已经比较详细地介绍过信号槽的相关内容 因此我们可以用一个新的程序开始进一步的学习 同时对信号槽有一个
  • 【Unity3D小功能】Unity3D中实现Text显示版本功能

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好 我是佛系工程师 恬静的小魔龙 不定时更新Unity开发技巧 觉得有用记得一键三连哦 一 前言 在项目开发中 会遇到要控制版本的情况 比如说
  • Excel只能做表格?那是你不会用!10分钟做出高大上可视化图

    点击进入看图评论 很多公司都要求员工熟练的掌握Excel But 绝大多数人所谓的熟练使用Excel 估计也只会一些简单的表格和知道加减乘除 求和吧 再难一点 估计就真的把自己难倒了 讲真 Excel还是很牛的 只是你不会 话不多说 今天就
  • 解决Hbuilder打包的app返回键直接退出

    问题描述 Hbuilder打包的app如果点击手机返回键 app会直接退出 返回不了上一页 处理子页面点击返回键直接退出 无法返回 代码如下 这个不是写在首页 写在子页面 子页面才能返回 写在首页点击返回就是退出 不用引入mui js 都是
  • stc51单片机串口接收多字节数据

    stc51单片机串口接收多字节数据 简介 51单片机有2个定时器 一个做串口波特率 一个做数据截止帧延时检测 硬件平台测试使用的是stc8的单片机 但是可以往51移植 代码 include stc8 h unsigned char flag