51单片机(STC)串口无阻塞发送函数

2023-11-04

目录

一、简介

1.1、开发环境

1.2、功能描述

二、串口程序

2.1、串口配置

2.2、变量定义

2.3、中断函数

2.4、发送函数


一、简介

1.1、开发环境

KeilC51,单片机型号STC15F2K60S2。

1.2、功能描述

使用51单片机的串口1中断,实现无阻塞发送数据。

二、串口程序

2.1、串口配置

void Uart1Init()        //9600bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xE0;		    //设置定时初始值
	TH1 = 0xFE;		    //设置定时初始值
	ET1 = 0;		    //禁止定时器%d中断
	TR1 = 1;		    //定时器1开始计时   

    ES = 1;             //使能串口中断
    EA = 1;             //开总中断
}

2.2、变量定义

struct Uart1Variable          //串口1变量
{
    uchar* p_data;            //发送数据
    uchar  transmit_bit;      //发送位
    uchar  transmit_size;     //发送数据串大小
}
U1VE;

2.3、中断函数

void Uart1Intrerrupt() interrupt 4        //串口1中断函数
{    
    if(RI)                                //判定:接收中断
    {
        RI = 0;                           //复位:接收中断
    }

    if(TI)                                //判定:发送中断
    {
        TI = 0;                           //复位:接收中断

        if(U1VE.transmit_bit < U1VE.transmit_size)    //判定:发送未完成
        {
            SBUF = *U1VE.p_data;          //赋值发送数据

            U1VE.p_data ++;               //地址位+1
            U1VE.transmit_bit ++;         //发送位+1
        }
        else                              //判定:发送完成
        {
            U1VE.transmit_size = 0;       //清零:发送长度
        }
    }
}

2.4、发送函数

void U1Transimt(uchar* p_data,uchar data_size)        //串口1发送函数
{
    TI = 0;                                           //清除:串口1发送中断

    U1VE.transimt_size = data_size;                   //赋值:发送长度
    U1VE.transmit_bit = 1;                            //赋值:发送位为1
    U1VE.p_data = p_data;                             //赋值:数据串首地址

    SBUF = *U1VE.p_data                               //赋值:发送数据到SBUF 
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机(STC)串口无阻塞发送函数 的相关文章

  • 51单片机TI发送中断标志位阻塞程序运行

    在利用51单片机学习嵌入式开发的过程中 通常会利用单片机串口进行字符或字符串的收发操作 博主最近在写一个小程序的过程中遇到了这样一个问题 在主函数内利用串口进行一个字符串的发送操作 并且对发送中断标志位进行置零或置一 此外 在串口中断函数内
  • 51单片机汇编指令

    注 Rn与Ri中n 0 7 i 0 1 另外Cy是进位位 同时也是状态位 标志位 数据传送类指令 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A Rn 将Rn的内容传送给A 寄存器 1 1 MOV A direct
  • 6.2小车循迹,跟随,摇头测距功能实现

    1 循迹小车 1循迹模块的使用 TCRT5000传感器的红外发射二极管不断发射红外线 当发射出的红外线没有被反射回来或被反射回来但强度不够大时 红外接收管一直处于关断状态 此时模块的输出端为高电平 指示二极管一直处于熄灭状态 被检测物体出现
  • keil5报错:* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 08B5H BYTE (108%) *保姆级教程

    项目场景 keil uVsion5的编译的时代码的字节过大出现 问题描述 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 原因分析 原因就是你的keil为2048字节代码限制的版本 而你
  • 基于51单片机 数控恒流源设计 可调电流源

    设计硬件组成 基于51单片机 数控恒流源设计 可调电流源基于单片机可调电流源设计 项目定制觉得选题不错 分享一下 由51单片机 LCD1602液晶 变压器 整流桥 开关电源LM2596 TLC5615 LM358 TIP31C 按键 TL4
  • C51单片机--IO口应用

    流水灯 文章目录 流水灯 前言 一 D1到D8依次点亮 二 读入开关K1 K4的状态 按下对应开关 控制相应D1 D4灯亮 三 流水灯 功能 LED从左边起D1 D3亮 并闪烁3次 然后是D2 D4亮 并闪烁3次 然后D3 D5亮 闪烁3次
  • 基于单片机超声波测距语音播放

    一 系统方案 本设计采用52单片机作为主控器 HC SR04测距 液晶1602显示 按键设置报警阀值 语音报警 二 硬件设计 原理图如下 三 单片机软件设计 1 首先是系统初始化 uint dist 保存超声波模块测量到的结果 Trig P
  • 51单片机AD转换代码原理图参考

    include reg52 h define uchar unsigned char define uint unsigned int sbit ADC RD P3 3 sbit ADC WR P3 4 sbit ADC INT P3 5
  • 51单片机总结【引脚、时钟电路、复位电路、I/O端口、内部结构】

    1 功能简述 STC89C52 是一种低功耗 高性能CMOS8位微控制器 具有8K在系统可编程Flash存储器 ROM STC89C52具有以下标准功能 8k字节Flash 程序存储器ROM 512字节RAM 256字节内部和256字节外部
  • #循循渐进学51单片机#定时器与数码管#not.4

    1 熟练掌握单片机定时器的原理和应用方法 1 时钟周期 单片机时序中的最小单位 具体计算的方法就是时钟源分之一 2 机器周期 我们的单片机完成一个操作的最短时间 3 定时器 打开定时器 储存寄存器 的值经过一个机器周期自动加一 也就是说 机
  • 第九届蓝桥杯单片机省赛题彩灯

    参考佬中佬 但不搬运 http t csdn cn 4tnjz include
  • 51单片机——LED灯

    如下图所示是51单片机的开发板原理图 我们想要让二极管D1亮 只需要把p20口置低电平即可 只需要把P2寄存器第0位置0 LED原理解释 CPU配置寄存器的值来控制硬件电路达到我们预期效果 例程1 点亮第一个LED include
  • Keil报错 requires ANSI-style prototype

    在进行模块化程序设计时遇到这种error 这是头文件没有定义的问题 首先在同一个目录下建立一个 h文件 第二步打开文件 进行编辑 要用到 ifndef define endif 这是为了避免重复定义 ifndef后面跟的是头文件名称的大写
  • 8x8LED点阵

    点量这个只需要把9高电平 13低电平就可以了 共阳极点阵 行线是led的正极 列线是led的列线 左上角点亮 显示多个灯是动态扫描的 一个一个显示的 然后间隔速度要快就可以造成显示 点阵由两篇74Hc595级联在一起驱动的 只需要三个io口
  • STC单片机 延时 那点事,DS18B20的苦

    DS18B20采用 一线总线 对时序的要求是特高啊 要想精准延时 有两个选择 其一当属定时器 其二用汇编一条一条的来算 但 DS18B20延时的时候 以上两条都不会选 还有其他选择 第三方的Delay函数 比如STC ISP VXX X提供
  • 基于51单片机汽车胎压温度监测报警系统(程序+仿真+原理图+元件清单)

    功能介绍 采用51单片机作为主控单片机 通过采集传感器的胎压和DS18b20的温度 显示到LCD1602上面 并且可以通过按键设置温度和压力的阈值 超过此值蜂鸣器进行报警 可以及时的提醒驾驶员胎压或者温度异常 程序采用keil编写 并且有中
  • 从单片机初学者迈向单片机工程师(对初学者非常有用)

    cn www ourDev cn 1 从单片机初学者迈向单片机工程师 作者 tangwei039 来自 西安 tangwei039 126 com 整理 by Linff 目录 一 LED 主题讨论周第一章 写在前面 1 二 LED 主题讨
  • Proteus8仿真:51单片机A/D转换(ADC0808)

    51单片机A D转换 元器件 原理图部分 代码 main c 工程文件 元器件 元器件 名称 排阻 RESPACK 8 51单片机 AT89C51 数码管 7SEG MPX4 CA BLUE ADC芯片 ADC0808 滑动变阻器 POT
  • Linux值得学习吗?打工人利用业务时间学习Linux需要多长时间?

    nbsp Linux值得学习吗 打工人利用业务时间学习Linux需要多长时间 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Linux的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评
  • Java18都在路上了,你还在用Java8吗?

    Java18都在路上了 你还在用Java8吗 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复 8

随机推荐

  • Nginx安全控制

    安全隔离 通过代理分开了客户端到应用程序服务器端的连接 实现了安全措施 在反向代理之前设置防火墙 仅留一个入口供代理服务器访问 使用SSL对流量进行加密 常用的http请求转变成https请求 因为http协议是明文传输数据 存在安全问题
  • Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)

    一 在JAVA中 有六个不同的地方可以存储数据 寄存器 register 这是最快的存储区 因为它位于不同于其他存储区的地方 处理器内部 但是寄存器的数量极其有限 所以寄存器由编译器根据需求进行分配 你不能直接控制 也不能在程序中感觉到寄存
  • 使用MotionLayout 实现启动页动画 Splash

    效果图 项目地址 具体代码实现 activity splash xml
  • Ubuntu安装Tango Control教程

    文章目录 环境 步骤 其他指令 参考 环境 虚拟机 VMware Ubuntun 20 04LTS Tango 9 3 4 步骤 为tango controls安装 sudo apt get install g openjdk 8 jdk
  • 中国C-V2X SPDU格式解读

    1 SPDU简介 SPDU即Secure Protocol Data Unit 是在V2X设备之间进行传输的消息结构 结构如下 SecuredMessage SEQUENCE version Uint8 版本号 当前为2 payload P
  • Highcharts+NodeJS搭建数据可视化平台

    前一段时间完成了一个数据可视化项目 由后台NodeJS Highcharts框架进行搭建 下面分享一下整个开发过程的流程 以及使用Highcharts框架的经验 一 数据的读取 由于数据库使用的是Mysql数据库 在NodeJS中 可以使用
  • 最新类ChatPDF及AutoGPT开源18大功能平台——闻达手把手超详细环境部署与安装——如何在低显存单显卡上面安装私有ChatGPT GPT-4大语言模型LLM调用平台

    目录 前言 闻达框架简介 前期准备 电脑要求 安装anaconda 安装相应版本的CUDA 配置ChatGLM 6B Conda环境 安装pytorch 类ChatPDF及AutoGPT开源模型 闻达环境部署及安装 相关代码及模型下载 解压
  • 【狂神说】Spring学习笔记(全)

    狂神说 Spring5最新完整教程IDEA版参考链接 https www bilibili com video BV1WE411d7Dv 狂神说 Java学习完整路线https www bilibili com read cv5702420
  • 【OpenGL进阶】05.绘制3D模型

    这篇文章来绘制3D模型 添加了model h和model cpp文件 model h pragma once include ggl h include vertexbuffer h include shader h class Model
  • ES6学习

    阮一峰讲解非常清晰 通俗易懂 https es6 ruanyifeng com https wangdoc com es6
  • h5跳转小程序页面url_微信小程序页面跳转方法

    我所知道的 微信小程序页面跳转有以下方法 下面分情况说明下 一 利用小程序提供的 API 跳转 1 简单page页面之间跳转 保留当前页面 跳转到应用内的某个页面 使用wx navigateBack可以返回到原页面 注意 调用 naviga
  • 数字模拟转换DAC

    数字模拟转换DAC 1 局限性 只有大容量的STM32F10x才具有DAC功能 2 数模转换原理 STM32的DAC模块 数字 模拟转换模块 是12位数字输入 电压输出型的DAC DAC可以配置为8位或12位模式 也可以与DMA控制器配合使
  • 【计算机网络】我与张三的 DNS 解析过程,浏览器中输入URL 回车后发生了什么

    视频解析 方便大家理解 我在 b 站发布了一期视频 欢迎大家查收 计网 浏览器输入url按下回车后发生了什么 计算机网络DNS工作流程详解 解析 hello 家好 我是 up主黎明 菜 今早我正打开b站刷剧 突然想到了 个问题 我们在浏览器
  • 一名系统研究者的攀登之路-陈海波-

    陈海波 原复旦大学Pa ra lle l Proc e s s ing Institute实验室的牛人 在sosp EuroSys等世界最顶级会议上发表过论文的大牛人 不过 现在被上交软件学院给挖走了 哈哈 1 引言 写好计算机系统领域的研
  • Mysql用同一张表查询的结果删除此表的数据报错

    DELETE FROM study name WHERE name id IN SELECT name id FROM study name WHERE name id 20221209 执行会报错如下 DELETE 0 row s 0 0
  • LaTex学习笔记(三):矩阵的输入

    矩阵的输入类似于表格 在latex中输入矩阵有多种方式 1 left begin array clr 4343 434 235 45 3232 34 56 232 3467 end array right 2 begin bmatrix 不
  • Excel 两列数据中相同的数据进行同行显示

    一 要求 假设您有两个列 分别是A列和B列 需要在C列中找出A列对应的B列的值 二 方案 方法1 寻常思路 凸显重复项 对A列单独进行筛选 按颜色进行排序 然后升序 对B列重复上述操作即可 方法2 两个公式 VLOOKUP 纵向查找函数 语
  • HDFS操作

    1 使用oiv命令查看hadoop 的镜像文件 hadoop s201 hadoop dfs name current hdfs oiv Usage bin hdfs oiv OPTIONS i INPUTFILE o OUTPUTFILE
  • Python处理缺失数据

    目录 1 缺失原因 2 缺失类型 3 处理方法 3 1 删除 3 1 1 统计每列缺失值的个数 3 1 2 直接删除含有缺失值的行 3 1 3 直接删除含有缺失值的列 3 1 4 只删除全是缺失值的行 3 1 5 保留至少有4个非缺失值的行
  • 51单片机(STC)串口无阻塞发送函数

    目录 一 简介 1 1 开发环境 1 2 功能描述 二 串口程序 2 1 串口配置 2 2 变量定义 2 3 中断函数 2 4 发送函数 一 简介 1 1 开发环境 KeilC51 单片机型号STC15F2K60S2 1 2 功能描述 使用