keil5 不进入中断_C51编程20中断篇(串行通讯3)

2023-11-05

    MCS-51单片机提供了4种串口的方式,但是我们只有方式1最常用(可变的10位串行通讯方式),下面就方式1的使用进行讲解。

    在开始之前先明确一个概念,中断会产生中断标志位,而CPU检测到中断标志位后,如果没有其他更高的中断在执行,CPU会响应该中断,并进入中断服务函数。串行通讯属于中断方式的一种,它服从这个概念。此外串行通讯并不是需要进入串行通讯的时候,会产生中断标志位;而是发送或者接收成功后,会产生中断标志位。

    通过中断向量,可以知道串行通讯只有一个中断号4,也就是说当进入无论是发送或者接收成功,都会触发中断服务函数,因此如果需要区分发送与接收需要在中断服务函数中实现区分,可以通过判断中断标志位(TI == 1或者RI == 1)进行区分。

5ea17eaaed3a6606e68868b1f53ae525.png

    在实际应用中,发送数据成功就成功,一般不会在发送成功后再进入中断服务函数;在处理接串行通信数据的时候,中断服务函数是非常必要,当接收到外面的数据成功时RI =1,触发中断通知CPU,CPU进入中断服务函数,对接收到的数据进行处理。

   串行通讯方式1,需要满足以下条件

    1)中断总允许打开 EA = 1;

    2)中断源允许打开 ES = 1;

    3)设置SCON=0x50(SM0 =0;SM1 =1;REN = 1,开启接收),由于SCON可以位寻址,可以位设置SM0 =0;SM1 =1;REN = 1;

    4)设置SMOD,由于SMOD在PCON寄存器中,不能位寻址。如果需要SMOD=1,设置PCON=0x80;如果需要SMOD = 0,则不需要设置PCON,因为PCON复位值为0,上电后默认SMOD = 0;

    5)设置TMOD与预装值(TH1与TL1),定时器T1设置(定时器工作方式,不是计数模式),一般设置工作在方式2(8位自动重装);

    6)开启定时器 TR1 = 1;

    7)中断服务函数。

注:使用串行通讯方式1时,SMOD的值、TH1与TL1可以通过计算公式计算的得到。

     波特率 = ( fosc*2SMOD)/(32*12*(256-X))

    在51单片机中的波特率有,4800、9600、19200。除了公式计算得到,也可以通过开发小工具得到。

    链接:https://pan.baidu.com/s/1xJNgKILVPiACX-fEpwWihg

    提取码:ibe7

6b67ea6a3d1bbe3c09177ee967ee05cb.png

    串行通讯在工作方式1,波特率19200的接收程序,代码实现。

/****************************************Header:File Name: main.cAuthor:  adamDate:  2020年9月19日******************************************/#include "reg52.h"#include "stdio.h"void main(){       //波特率为19200bps,如果需要9600,将SMOD =0即可;      EA = 1;      //总中断允许   ES = 1;     //串行源中断允许   PCON = 0x80; //SMOD =1,   SCON = 0x50; //SM0 =0;SM1 =1;REN = 1;      TMOD = 0x20; //设置T1为模式2,定时器模式:C/T=0;不启动外部,INT0控制开始定时:GATE=0;   TH1 = 0xFD;   //预装值        TL1 = 0xFD;   //自动重装值   TR1 =1;   //启动定时器T1      while(1);}void uart(void) interrupt  4{    //判断串行中断是否属于接收    if(RI==1){                P2 = SBUF;        RI=0;    }            }

    代码实现后,可以使用串口调试助手,通过电脑发送数据到单片机。需要注意的是,该串口调试助手,发送设置的hex方式,没有实现,只能用ASCII码的方式发送数据,也就是说当发送框中,写入“1”,将会发送16进制的数据位ASCII码,单片机接收到的数值为0x31,0x31将会中断服务函数中,赋值为P2,如果P2口有接LED,对应的LED将会被点亮。

   工具链接地址:

    链接:https://pan.baidu.com/s/1aGfcqwGE0E9R1FyeNO8FTg

    提取码:jpv7

828b26e7af4f22f7ea520be687fcd8af.png

    注:此外如果不是使用上面的串口调试助手,如果发现数值不对,除了检查数据以外,还需要注意工具是不是发送数据时,有默认添加换行符。

    下面是笔者在用以下的串口调试助手测试时,发送数1时。P2的LED会闪以下,然后保持数据在0x0A,0x0A在ASCII编码中为换行,也就是说软件在发送的时候,发送数据1后,会默认再发送换行符。

08f1ed896f6711e2e3a84c79e5ff9fd5.png

---------------------------------------------------------

如果觉得文章还不错,那就扫码关注吧!

3e72136d7b5f73f51beb0bd18c5e129d.png

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

keil5 不进入中断_C51编程20中断篇(串行通讯3) 的相关文章

  • 服务计算--简单 web 服务与客户端开发实战

    一 概述 利用 web 客户端调用远端服务是服务开发本实验的重要内容 其中 要点建立 API First 的开发理念 实现前后端分离 使得团队协作变得更有效率 任务目标 选择合适的 API 风格 实现从接口或资源 领域 建模 到 API 设
  • C++ 字符串

    C 提供了以下两种类型的字符串表示形式 C 风格字符串 C 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言 并在 C 中继续得到支持 字符串实际上是使用 null 字符 终止的一维字符数组 因此 一个以 nu
  • 错误处理-mmdetection-AttributeError: ‘ConfigDict‘ object has no attribute ‘log_level‘

    第一次用商汤的mmdetection 遇到很多错误 mmdetection中网络的配置文件缺东西 至少缺了log level参数的值 此文章将继续更新我在使用过程中的问题与解决办法 敬请期待 祝你学习愉快 1 2 3 4 5 6 7 8 9
  • 数据库常用的四种方法

    排序查询 select 列表属性 列表属性 from 列表名order by 列表属性 列表属性 删除 delete from 列表名 where 列表属性 值 插入 insert into 列表名 values 值 值 值 值 inser
  • 数学知识整理:二重积分

    1 二重积分的性质 1 1 f x y 在有界闭区域上可积的充分条件 必要条件 在有界闭区域D上可积的函数f x y 必然是D上的有界函数 有界闭区域D上的连续函数或者分片连续函数f x y 在D上可积 1 2 线性性质 1 3 积分区域可
  • TCP/IP详解 卷1:协议 学习笔记 第十章 动态选路协议

    静态选路包括在配置接口时 以默认方式生成路由表项 对于直连路由 直连路由是由链路层协议发现的 一般指去往路由器的接口地址所在网段的路径 通过route命令增加表项 通常通过系统自引导程序文件 或通过ICMP重定向生成路由表项 通常在默认方式
  • 代理简介

    1 正向代理 正向代理类似一个跳板机 代理访问外部资源 比如我是一个用户 我访问不了某网站 但是我能访问一个代理服务器 这个代理服务器呢 他能访问那个我不能访问的网站 于是我先连上代理服务器 告诉他我需要那个无法访问网站的内容 代理服务器去
  • eclipse开发burpsuite插件

    安装相关软件 eclipse jee 2019 06 R win32 x86 64 zip burpsuite community edition v1 7 32 burpsuite 插件helloworld demo 下载链接在文章末尾
  • PyQt5之信号与信号槽

    一 信号与信号槽特点 PyQt的窗口控件类中有很多内置信号 开发者也可以添加自定义信号 信号与槽具有如下特点 一个信号可以连接多个槽 一个信号可以连接另一个信号 信号参数可以是任何Python类型 一个槽可以监听多个信号 信号与槽的连接方式
  • 定时删除centos服务器日志

    现在java程序的日志一般是使用log4j slf4j 来打日志 并且一般都喜欢用DailyRollingFileAppender模式 就是每天产生一个日志 还有一种是 RollingFileAppender模式 这个模式是按文件大小来保存
  • QT 实现五子棋

    1 程序简介 五子棋是一款大家都熟系的小游戏 这里给大家一步一步的详细介绍如何用QT开发这个游戏 并通过这款游戏的开发练习 进一步熟系 qvector qpoint qpainter QMouseEvent 产生工具栏等的用法和方法 2 程
  • 小学生报编程机器人有什么益处

    小学生报编程机器人有什么益处 小孩子的学习一直都是很多家长们非常关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说是相当的耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于孩子学习机器人编程的好处并不是很清
  • 信号集(未决信号集,阻塞信号集)

    未决信号集和阻塞信号集的关系 阻塞信号集是当前进程要阻塞的信号的集合 未决信号集是当前进程中还处于未决状态的信号的集合 这两个集合存储在内核的PCB中 下面以SIGINT为例说明信号未决信号集和阻塞信号集的关系 当进程收到一个SIGINT信
  • 《从零开始编写一个直播服务器》 C++ 实现一个最简单的RTSP流媒体服务器

    流媒体开发系列文章 文章目录 流媒体开发系列文章 前言 一 rtsp流是什么 二 使用步骤 1 服务器代码 总结 前言 在安防行业中 onvif协议与gb协议是两种标准 gb是国内安防行业的标准 onvif是国外的安防行业的标准 其中gb2
  • 【华为OD机试】数字游戏【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 小明玩一个游戏 系统发1 n张牌 每张牌上有一个整数 第一张给小明 后n张按照发牌顺序排成连续的一行 需要小明判断 后n张牌中 是否存在连续的若干张牌 其和可以整除小
  • Heroku 部署有关 opencv 的 Django 后端应用(pdf2docx)

    文章目录 场景 解决方案 Aptfile Buildpacks Dashboard 上手动构建 Heroku CLI 终端构建 Requirements txt 提交改变 场景 我使用 heroku 部署了一个 Django 后端项目 里面
  • C/C++内存布局

    下图是c c 的进程的内存分布布局图 搞清楚内存布局对于理解一个程序是非常重要的 一个程序运行起来 操作系统会给每个进程分配一个 4G 的程序地址空间 当然这都是虚拟地址空间 因为如果一个进程分 4G 的内存 那么就算有再多的内存也不够分
  • windows下的另一个辅助工具Devcon.exe(用会了绝对是神器)

    Device Console Help devcon exe r m
  • Unity3D关于iTween回调函数

    ITween一共三个回调函数 onstart onupdate和oncomplete 顾名思义可以从名字中看出来 常用到最后一个 要是我以后项目中用到了前两个函数 我会把例子添加上 关于oncomplete 就是在itween移动完成以后所

随机推荐

  • Spring Data Jpa

    spring data介绍 Spring Data s mission is to provide a familiar and consistent Spring based programming model for data acce
  • 单元测试、集成测试、系统测试

  • 串口通信——发送和接收数据(8位和16位数据之间的转换)

    1 实验目的 1 发送两个字节数据 就是16位的数据 每一次发送8位 发送两次 这里要进行数据的拆分 如发送一个0XFF56 接收得到的也是FF56 16进制显示 2 接收两个字节的数据 这里通过串口助手以16进制发送一个数据 将拼接的数据
  • winMain函数

    WinMain函数 int WINAPI WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int nShowCmd 函数名 WinMain 返回值 in
  • QT界面工程导出成dll并在其他界面工程调用示例

    一 首先是生成dll 1 新建一个qt工程 2 在 pro文件做如下修改 TARGET qtdll TEMPLATE app DEFINES dllMainWindow LIBRARY TEMPLATE lib 其中qtdll 是自己dll
  • C#中Dictionary的用法总结

    可以实现通过键值查找 插入 删除一个键 值对的操作 这些如果用数组实现都非常麻烦 Key就是键 value就是值 我们在很多地方都会用到字典 他的特点就是查找很快 当然比List快 字典必须包含名空间System Collection Ge
  • pandas写入excel指定行_使用pandas操作excel

    pandas操作excel 最近由于要处理一些excel表格 发现pandas可以免去很多的繁琐的人工劳动 在这里记录一下我所用到的知识 导入文档 将excel中的工作表导入 filename xls data pd read excel
  • python中random.random()用法

    Python中的random模块用于生成随机数 下面介绍一下random模块中最常用的几个函数 random random random random 用于生成一个0到1的随机符点数 0 lt n lt 1 0 参考链接 https www
  • 拓扑布局和建立小型网络

    练习 2 6 1 拓扑布局和建立小型网络 地址表 本实验不包括地址表 拓扑图 学习目标 正确识别网络中使用的电缆 物理连接点对点交换网络 验证每个网络的基本连通性 简介 许多网络问题都可以在网络的物理层解决 因此 必须清楚了解网络连接使用哪
  • Android ffmpeg4.1 arm64位库裁剪

    ffmpeg4 1 Android arm64位库裁剪移植 目录 ffmpeg4 1 Android arm64位库裁剪移植 1 绪言 2 编译环境 3 源代码下载 4 编写编译脚本 4 1 编译脚本 4 2 常见问题 5 库裁剪 5 1
  • 使用vscode把代码或文件夹上传进gitee库里

    1 首先读者自行下载 git 2 在gitee中新建一个仓库 3 建完仓库后会出现以下界面 4 复制图中1 选择你个你想要的文件夹 右键选择 5 之后会跳出来一个小框框 把图中2和3分别复制进小框框里 ctrl v没用 右键选择Paste
  • CObject/CCmdTarget/CCmdTarget三个类的能力

    三个类的能力分别为 CObject 运行时类型识别 RTTI 动态创建 Dynamic Creation 文件读写 Serialization CCmdTarget 消息机制 拥有DECLARE MESSAGE MAP宏 从而可以接收WM
  • 二十二、SQL 数据分析实战(案例1~案例10)

    文章目录 案例1 用户信息表 stu table 案例2 员工绩效表 score table 案例3 销售冠军信息表 month table 案例4 月销售额记录表 sale table 案例5 每季度员工绩效得分表 score info
  • Kubernetes 入门 篇 Master 节点的安装与部署

    在安装K8s 的时候 遇到了很多问题 花了几天的时间排错 记录一下环境搭建的完整过程 希望对入门K8s 的朋友有所帮助 操作系统版本 CentOS Linux 8 Docker 版本 Docker version 23 0 1 运行 Kub
  • 迷茫

    读了两年的软件工程 迷茫始终伴随着自己的前行道路 我想吃计算机这碗饭 我又不想吃太久 这个问题我都感觉很吃屎 大一刚开始 学的是C语音 老师就是按着书本的知识给你讲 数据类型 函数 控制语句 数组 指针 文件 讲完之后 这些东西还是这些东西
  • 常见排序算法(下)

    目录 1 交换排序 1 1交换排序的基本思想 1 2冒泡排序 1 3快速排序 1 3 1Hoare 1 3 2挖坑法 1 3 3 针对性的优化 1 3 4前后指针法 1 3 5非递归实现快速排序 2 归并排序 2 1递归实现归并排序 2 2
  • 4.POD 的基本用法

    文章目录 POD 的基本用法 1 POD运行说明 2 POD封装容器的用法 3 POD 共享的处理 4 POD 配置 4 1 ConfigMap POD 的基本用法 1 POD运行说明 K8S 对容器运行的要求是主程序一直要在前台执行 如果
  • Qt基本数据类型

    有符号8比特数据 16位数据类型 32位有符号数据类型 64位有符号数据类型 Windows中定义为 int64 Windows中定义为 int64 除非配置了 qreal float选项 否则默认为double 无符号8比特数据类型 无符
  • Jenkins Pipeline 项目持续集成交互实践路径

    Jenkins Pipleline插件介绍 Jenkins 2 x的精髓是Pipeline as Code 是帮助Jenkins实现CI到CD转变的重要角色 什么是Pipeline 简单来说 就是一套运行于Jenkins上的工作流框架 将原
  • keil5 不进入中断_C51编程20中断篇(串行通讯3)

    MCS 51单片机提供了4种串口的方式 但是我们只有方式1最常用 可变的10位串行通讯方式 下面就方式1的使用进行讲解 在开始之前先明确一个概念 中断会产生中断标志位 而CPU检测到中断标志位后 如果没有其他更高的中断在执行 CPU会响应该