C51编程19-中断篇(串行通讯3)

2023-10-30

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

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

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

 

    

    在实际应用中,发送数据成功就成功,一般不会在发送成功后再进入中断服务函数;在处理接串行通信数据的时候,中断服务函数是非常必要,当接收到外面的数据成功时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

 

 

   

    串行通讯在工作方式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

 

 

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

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

 

 


 

 

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

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

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

C51编程19-中断篇(串行通讯3) 的相关文章

随机推荐

  • 目标检测(object detection)

    目标检测 目标检测 目标检测的任务 R CNN 目标检测 Overfeat模型 SPPNet Fast R CNN Faster R CNN YOLO介绍 YOLOV2 YOLOV3 SSD算法原理 目标检测 目标检测的任务是找出图像中所感
  • Java技术小册(核心篇)

    核心篇 数据存储 MySQL 索引使用 的注意事项 说说反模式设计 说说分库与分表设计 分库与分表带来的分布式困境与应对之策 说说SQL优化之道 MySQL遇到的死锁问题 存储引擎的 lnnoDB 与 MyISAM 数据库索引的原理 为什么
  • [W pthreadpool-cpp.cc:90] Warning: Leaking Caffe2 thread-pool after fork. (function pthreadpool)

    问题 报了warning W pthreadpool cpp cc 90 Warning Leaking Caffe2 thread pool after fork function pthreadpool 并且进程自动停止了 解决 num
  • STM32单片机PID控制数控恒流源-100mA~+100mA输出正负恒流源

    实践制作DIY GC0079 PID控制数控恒流源 一 功能说明 基于STM32单片机设计 PID控制数控恒流源 功能介绍 STM32F103C系列最小系统板 LCD1602显示器 MCP4725 12位DAC MCP3201 12位ADC
  • Centos搭建ftp服务器

    目录 ftp是什么 搭建ftp服务器目的 检查安装vsftpd软件 创建用户 创建用户并指定用户目录 ftp是什么 FTP是 File Transfer Protocol 文件传输协议的英文名称 用于在Internet上控制文件的双向传输
  • [Vue warn]: Failed to resolve directive: Show

    Vue warn Failed to resolve directive Show 1 错误截图 2 错误分析 3 此类问题解决办法 1 错误截图 2 错误分析 1 根据报错的文件路径我们肯定定位到 对应的文件发生报错 2 奇怪的是 程序的
  • 【华为OD机试真题 C语言】45、 分糖果

    文章目录 一 题目 题目描述 输入输出 样例1 二 思路参考 三 代码参考 作者 鲨鱼狼臧 个人博客首页 鲨鱼狼臧 专栏介绍 2023华为OD机试真题 使用C语言进行解答 专栏每篇文章都包括真题 思路参考 代码分析 订阅有问题后续可与博主解
  • moment以及dayjs(获取当前日期等相关写法)

    moment 1 使用moment获取今天 moment格式 const start moment startOf day const end moment endOf day 日期格式 const start moment startOf
  • “该微信号已经绑定了50个小程序,不可继续绑定”,如何自助解绑

    微信上搜索并关注公众号 公众平台安全助手 左下角的菜单 绑定查询 可查询到 公众号 小程序 开放平台 中绑定的信息 只要不是管理员身份 均可以自己点击进行解绑
  • C语言课程设计大作业——学生成绩管理系统详细(含实验报告内容)

    写在前面 欢迎来到 发奋的小张 的博客 我是小张 一名普通的在校大学生 在学习之余 用博客来记录我学习过程中的点点滴滴 也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获 希望大家多多关照 我们一起成长一起进步 也希望大家多多支持我鸭
  • Sherman-Morrison-Woodbury公式的证明

    首先证明Sherman Morrison公式 A uvT 1 A 1 A 1u 1 vTA 1u 1vTA 1 1 其中 A Rn n非奇异 即A 1存在 u Rn v Rn SM公式看似复杂 但可以通过求解以下线性方程组来推导出来 A u
  • 《金融工程》

    金融工程包括各种创新性金融工具和金融工序的涉及 开发 实施 以及对解决金融问题的各种创造性方案的设计 对各种金融工具的基础介绍 概念性金融工具 投资组合理论 资本结构理论 资本资产定价的CAPM模型 有效市场理论 期权定价理论 套利定价理论
  • 基本路径测试法(一看就懂)

    基本路径测试就是在程序控制流图的基础上 通过分析控制构造的环形复杂性 导出基本可行路径集合 从而设计测试用例的方法 基本路径测试具体方法如下 对复杂性程度高的程序做到覆盖所有路径 测试所有可执行路径 是不可能的 根据独立路径概念 某一程序的
  • 图解实时操作系统和非实时操作系统的区别

    转自 http blog csdn net u013752202 article details 53649047 对于实时操作系统 RTOS 和非实时操作系统 你能分别列举出来多少 实时操作系统 uCOS VxWorks RTLinux
  • IDEA构建spring源码

    1 下载spring源码 https github com spring projects spring framework 在tags中选择release 稳定 版本 我下载的是 spring framework 5 2 21 RELEA
  • @NotNull、@NotEmpty、@NotBlank注解用到的依赖

    参考案例 Web环境 才生效 https blog csdn net Aku 2020 article details 125413830 1 NotNull NotEmpty NotBlank注解用到的依赖
  • JAVA 中进行网络通信时 两端 序列化对象的类所处的包名必须一致

    RT 比如说客户端和服务器通过ObjectInputs和ObjectOutputSream通信时 他们序列化的对象a 所属的类A java 这个类的包名在客户端和服务器上必须一致 类也必须是同一个 只是同名还不行 否则会报很奇怪的错误 比如
  • [UE4]UImage控件异步加载资源并设置图片内容

    UE 异步加载是指在 Unreal Engine 中使用异步加载技术 使得游戏对象 比如静态网格 贴图 声音等 可以在不影响游戏运行的情况下逐步加载 这种方式可以优化游戏性能和降低内存占用 提高游戏的流畅度和稳定性 自定义Image控件实现
  • K-近邻算法之鸢尾花实例 使用Spark实现KNN的Demo

    1 1 K 近邻算法 KNN 概念 K Nearest Neighbor算法又叫KNN算法 这个算法是机器学习里面一个比较经典的算法 总体来说KNN算法是相对比较容易理解的算法 定义 如果一个样本在特征空间中的k个最相似 即特征空间中最邻近
  • C51编程19-中断篇(串行通讯3)

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