单片机(中断系统-串口通信)

2023-05-16

1、RETI:中断操作指令
这条指令的功能和RET指令相似,2条指令的不同之处是:本指令清除了中断响应时,被置1的MCS-51内部不可寻址的 “优先级生效”触发器清零。中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。中断指令“RETI”作为中断跳出指令,除了将堆栈中保存着的地址取出,送回PC,使程序从主程序的中断处继续往下执行的作用外,还有将“优先级生效”触发器清零的功能。
2、中断请求标志寄存器
1)TCON(字节地址88H):
TF1:片内定时器/计数器T1的溢出中断请求标志位
TF0:片内定时器/计数器T0的溢出中断请求标志位
IE1:外部中断请求1的中断请求标志位
IE0:外部中断请求0的中断请求标志位
IT1:选择外部中断请求1为跳沿触发方式还是电平触发方式
IT0:选择外部中断请求0为跳沿触发方式还是电平触发方式
2)SCON(字节地址98H):
TI:串行口的发送中断请求标志
RI:串行口的接收中断请求标志
3、中断允许寄存器IE(字节地址A8H)
EA:中断允许总开关控制位
EA=0,所有中断请求被屏蔽
EA=1,所有中断请求被开放
ES:串行口中断允许位
ES=0,禁止串行口中断
ES=1,允许串行口中断
ET1:定时器/计数器T1的溢出中断允许位
EX1:外部中断1的中断允许位
ET0:定时器/计数器T1的溢出中断允许位
EX0:外部中断0的中断允许位
4、中断优先级寄存器IP(字节地址B8H)
PS:串行口中断优先级控制位
PS=1,串行口中断位高优先级
PS=0,串行口中断位低优先级
PT1:定时器T1中断优先级控制位
PX1:外部中断1中断优先级控制位
PT0:定时器T0中断优先级控制位
PX0:外部中断0中断优先级控制位
5、优先级中断查询次序
中断源 中断级别(由高到低)
----------------------------------------------------
外部中断0 最高
T0溢出中断
外部中断1
T1溢出中断
串行口中断
T2中断 · 最低
6、中断入口地址表(5颗星*****)
中断源 中断入口地址
----------------------------------------------------
外部中断0 0003H
定时器/计数器T0 000BH
外部中断1 0013H
定时器/计数器T1 001BH
串行口中断 0023H
定时器/计数器T2(T2+EXF2) 002BH
7、工作方式控制寄存器TMOD(字节地址89H)
D7 D6 D5 D4 D3 D2 D1 D0

GATE C/T M1 M0 GATE C/T M1 M0

GATE 门控位
GATE=0时,仅有运行控制位TRx(x=0,1)来控制定时器/计数器运行
GATE=1时,用外中断引脚(INT0或INT1)上的电平与运行控制位TRx共同来控制定时器/计数器运行
M1,M0工作方式选择位
M1 M0 工作方式
--------------------------------------------------------------------
0 0 方式0,为13位定时器/计数器
0 1 方式1,为16位定时器/计数器
1 0 方式2,8位的常数自动重新装入的定时器/计数器
1 1 方式3,仅适用于T0,此时T0分为两个8位计数器,T1停止计数
C/T 计数器模式和定时器模式选择位
C/T=0,为定时器工作模式,对单片机的时钟振荡器12分频后的脉冲进行计数
C/T=1,为计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)上的外部脉冲(负跳变)计数.
8、定时器/计数器控制寄存器TCON(字节地址88H)

D7	D6	D5	D4	D3	D2	D1	D0
----------------------------------------------------------
TF1	TR1	TF0	TR0	IE1	IT1	IE0	IT0

TF1、TF0 计数溢出标志位
当计数器计数溢出时,该位置为1。应使用软件及时将该位清0。使用中断方式时,此位作为中断请求标志位
进入中断服务程序后由硬件自动清0
TR1、TR0 计数运行控制位
TR1位(或TR0位)=1,为启动定时器/计数器工作的必要条件
TR1位(或TR0位)=0,则停止定时器/计数器工作
9、串行口控制寄存器SCON(字节地址98H)
[可进行位寻址,位地址为98H-9FH]
[SCON的所有位都可使用位操作指令清零或置1]
D7 D6 D5 D4 D3 D2 D1 D0
----------------------------------------------------------
SM0 SM1 SM2 REN TB8 RB8 TI RI
位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H

SM0、SM1-串行口4种工作方式选择位

SM0	SM1	方式	工作方式
--------------------------------------------------------------------
0	0	0	同步移位寄存器方式(用于扩展I/O口)
0	1	1	8位异步收发,波特率可变(由定时器控制)
1	0	2	9位异步收发,波特率为fosc/64或fosc/32
1	1	3	9位异步收发,波特率可变(由定时器控制)

SM2多机通信控制位
SM2=1,则只有当接收到的第9位数据(RB8)为1时,才使RI置1,产生中断请求,并将接收到的前8位
数据送入到SBUF;当接收到的第9位数据(RB8)为0时,则接收到的前8位数据丢弃。
SM2=0,则不论接收到的第9位数据是1还是0,都将前8位数据送入SBUF中,并使RI置1,产生中断请求
在方式1时,如果SM2=1,则只有收到有效的停止位才会激活RI
在方式0时,SM2必须为0。

REN 允许串行接收位
由软件置1或清0
REN=1,允许串行口接收数据
REN=0,禁止串行口接收数据

TB8 发送第9位数据
在方式2或方式3时,TB8是要发送的第9位数据,其值由软件置1或清0
在双机串行通信时,TB8一般作为奇偶检验位使用
在多机串行通信中用来表示主发送的是地址帧还是数据帧,TB8=1为地址帧,TB8=0位数据帧

RB8 接收的第9位数据
工作方式2或工作方式3时,RB8存放串行口接收到的第9位数据.在方式1,如果SM2=0,RB8是接收到的停止位.
在方式0,不使用RB8.

TI 发送中断标志位
TI=1,表示一帧数据发送结束.
串行口工作在方式0时,串行发送的第8位数据结束TI由硬件置1
在其他工作方式中,串行口发送停止位的开始时置TI为1.
TI=1,则可申请中断,CPU响应中断后,在中断服务程序中向"发送SBUF"写入要发送的下一帧数据
TI位的状态可供软件查询,且必须由软件清0
RI 接收中断标志位
RI=1,表示一帧数据接收完毕.
串行口工作在方式0时,接收完第8位数据时,RI由硬件置1
在其他工作方式中,串行接收到停止位时,该位置1.
RI=1,则可申请中断,要求CPU从"接收SBUF"取走数据.
RI位的状态也可软件查询,且必须由软件清0

10、特殊功能寄存器PCON(字节地址87H)
D7 D6 D5 D4 D3 D2 D1 D0
----------------------------------------------------------
SMOD GF1 GF0 PD IDL

SMOD位:波特率选择位

11、波特率定义:串行口每秒钟发送或(接收)的位数称为波特率.

12、定时器T1产生波特率的计算(时钟晶体的振荡频率为fosc)
1)串行口工作在方式0,波特率固定为时钟频率fosc的1/12
例:若fosc=12MHz,波特率为fosc/12,即1Mbits.
2)串行口工作在方式2,波特率仅与SMOD位的值有关
方式2波特率=(2^SMOD/64)fosc
例:若fosc=12MHz:SMOD=0,波特率=187.5kbit/s;SMOD=1,波特率为375kbit/s
3)串行口工作在方式1或方式3时,常用定时器T1作为波特率发生器,其关系式为
方式3波特率=(2^SMOD/32)定时器T1溢出率----------------------(1)
定时器T1溢出率=计数速率/(256-X)=(fosc/12)/(256-X)-----------(2)
将(2)代入(1),
波特率=(2^SMOD/32)
(fosc
12)/(256-X)

13、时钟周期、机器周期、指令周期
时钟周期Tosc=1/fosc
机器周期Tcy=12/fosc[AT89S52单片机的每12个时钟周期为一个机器周期]
状态周期T状=2*Tosc
指令周期:执行一条指令所需的时间.可分为单字节,双字节,三字节指令.

时钟周期,又称为震荡周期,是为单片机提供定时信号的震荡源的周期,
是单片机最基本的时间单位。谈到时钟周期就必须说晶体振荡器即即晶
振,晶振可以说是单片机的心脏,它为单片机提供一个时钟频率 fosc(震荡频率)。
而所谓的震荡频率(时钟频率)自然是晶振一秒钟震荡的次数。时钟频率越高,
单片机运行速度越快,就如电脑的CPU什么可以加速到多少GHz一样。自然时钟周期Tosc=1/fosc.
例如 震荡频率为12MHz的单片机即 fosc = 12MHz,那么震荡周期
Tosc = 1/fosc= 1/12 us。

状态周期
状态周期是CPU从一个状态转换到另一状态所需要的时间。简单地说每个状态周期
Ts 分为两个震荡周期(时钟周期),即Ts = 2Tosc。
机器周期
这里我们以MCS-51单片机为例,它有固定的机器周期,一个机器周期包含六个状态例如,
取指令、存储器读、存储器写等。即机器周期等于6个状态周期,而一个状态周期是2个
时钟周期,因此一个机器周期又等于12个时钟周期。那么晶振频率为12MHz的的单片机的
机器周期 T = 12*Tosc = 1 us。
指令周期
顾名思义,指令周期就是执行一条指令所需的全部时间。MCS-51单片机的指令周期
通常是 1 ~ 4 个机器周期组成。

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

单片机(中断系统-串口通信) 的相关文章

  • 更改ubuntu中默认python版本

    在ubuntu中更改python版本 因为刚开始学习python 不论是网上教程还是书上都推荐python3 因为学习需要我用的电脑上只有ubuntu系统 在终端输入python它默认是如下 xff1a python exit 退出pyth
  • vlc 提取音轨_如何使VLC自动选择英语音轨

    vlc 提取音轨 If you ve used VLC player to play anything that has multiple audio tracks you ve probably noticed that it doesn
  • Android 串口通信 原来如此简单

    EasySerial串口通信SDK 一 前言二 SDK的使用介绍引入库EasyKeepReceivePort的使用EasyWaitRspPort的使用其他API的使用介绍 三 github传送门四 鸣谢五 转载请注明出处 一 前言 如果你的
  • 超声波模块HC-SRO4

    1 xff09 引脚和原理 xff1a 该模块有VCC GND Trig和Echo针脚 TRIG是输出和ECHO是输入 该模块的工作原理为 xff0c 先向TRIG脚输入至少10us的触发信号 该模块内部将发出 8 个 40kHz 周期电平
  • HTTP Auth

    文章目录 关于 HTTP Auth1 session2 authorization 的 http header2 1 Basic 形式2 2 Bearer 类型 xff08 token xff09 参考资源 free coder xff1a
  • Ubuntu 18.04安装ROS

    1 换源 span class token function sudo span sh c span class token string 39 etc lsb release amp amp echo 34 deb http mirror
  • Python应用之爬虫基础:requests爬虫库的简单使用(1)

    引言 在生活中 xff0c 大家都使用过浏览器 xff0c 通过输入要搜索的内容以及鼠标点击等操作方式 xff0c 来获取互联网上的信息 直观的理解这个过程就是 xff0c 客户端 用户 发送请求给服务器 xff0c 服务器通过解析请求 x
  • 51单片机学习篇-- --ULN2003芯片的总结

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 先说下写这篇的原因 在学习蜂鸣器的时候 xff0c 看过教学视频之后 xff0
  • 51单片机学习篇-- --静态数码管的显示(74HC138译码器,74HC245锁存器,74HC573锁存器)

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 数码管的介绍 啥是个数码管呢 xff1f 先来看一些数码管的照片 其实数码管就
  • 51单片机应用篇-- --倒计时数字钟,矩阵按键可调

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 项目要求 这篇也和之前那篇文章单片机应用篇 数码管60秒计时 xff0c 独立
  • 51单片机学习篇-- --超声波测距(HC--SR04)笔记

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 开篇 本单片机购买的时候带的超声波模块是HC SR04 xff0c 根据好多材
  • 51单片机应用篇-- --智能门锁

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 智能门锁 开篇项目要求项目分析3 2初始状态说明3 3设置按键功能即对应处理按
  • arduino 电压表_如何使用Arduino制作数字电压表

    arduino 电压表 by Harshita Arora 通过Harshita Arora 如何使用Arduino制作数字电压表 How to make a digital voltmeter using Arduino Last Sun
  • 嵌入式stm32f411系列-- --学前准备(mdk+器件支持包+stm32cubemx+固件包)

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 开篇 之前学习了51单片机最基础的Stc89c52 xff0c 因为一些原因
  • 登录和退出登录

    1 登录 1 1 接口说明 接口url xff1a login 请求方式 xff1a POST 请求参数 xff1a 参数名称参数类型说明accountstring账号passwordstring密码 返回数据 xff1a span cla
  • Java char[]数组转成String类型(char to String)详细介绍

    前言 string toCharArray 方法将给定的字符串转换为字符序列 Java中字符串转换为字符数组的方法在之前的博客已经介绍了 xff01 今天介绍char 数组转成String 方法有4种 xff1a 使用 String 类的
  • 超声波相关——抗干扰

    https blog csdn net xiaoyuanwuhui article details 88411896 用STM32单片机成功驱动一个超声波模块后 xff0c 接下来便有了疑问如何用stm32单片机驱动多个超声波模块呢 xff
  • java实现模拟用户登录功能

    java实现模拟用户登录 功能描述 运用String类与Scanner类实现模拟用户登录基础功能 xff0c 简单的登录验证模拟程序 本案例要求编写一个程序 模拟用户登录 程序要求如下 1 用户名和密码正确 提示登录成功 2 用户名或密码不
  • Flash loader demo下载与使用之最小系统STM32C8T6使用USB转TTL串口下载

    一般只能通过三种方式下载程序到stm32单片机中 xff1a 1 JTAG 2 ISP 3 IAP 具体可参考 xff1a 单片机程序下载方式ISP IAP JTAG 接下来介绍如何ISP烧录代码 xff1a 要通过ISP方式下载程序 xf
  • 最小系统stm32f103c8t6如何使用SWD模式烧录代码?

    参考资料 xff1a 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx STM32F102xx和STM32F103xx微控制器 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx ST

随机推荐

  • MiniFly Firmware V1.1开源四轴代码分析三:usblink.c

    usblinkRxTask USB 通信接收任务 该任务主要负责接收上位机发下来 USB 虚拟串 口方式 的数据 然后对数据进行打包和校验 打包成 ATKP 格式并校验无误后发送到 atkpRxAnlTask 的接收队列里 usblinkT
  • MiniFly Firmware V1.1开源四轴代码分析六:stabilizer.c

    在stabilizer c定义四个结构体 span class token comment 以下变量都是布尔变量 span span class token keyword static span span class token keyw
  • NRF24L01+模块:一对一双向通信,成功!

    查找了很多资料 xff0c 好多都是复制粘贴转发 xff0c 或者安装英文手册直译的 xff08 比如我自己上篇笔记 xff0c xff0c xff09 xff0c 看完还是一脸懵逼 xff0c 没几个可行的 xff0c 推荐几个比较实在的
  • NRF24L01几个函数的分析

    首先看两个版本关于NRF的宏定义 xff1a 开发板 xff1a 遥控器 xff1a 1 xff0c 最基本的读写函数 xff0c 函数的返回值就是读来的数据 xff0c 形参就是写入的数据 stm32mini开发板例程中 xff1a sp
  • stm32f103之HC_SR04超声波测距

    参考资料 xff1a stm32与HC SR04超声波传感器测距 HC SR04超声波测距注意事项 STM32 驱动HC SR04超声波测距模块 HC SR04初识 HC SR04 超声波原理图讲解与时序分析与arduino使用 HC SR
  • stm32之蓝牙模块HC-05使用

    参考资料 xff1a 常用模块 HC 05蓝牙串口通信模块使用详解 xff08 实例 xff1a 手机蓝牙控制STM32单片机 xff09 HC 05蓝牙模块使用教程 HC 05蓝牙模块使用记录 补充与理解 xff1a 套餐有两个板子 一个
  • MPU9250的MPL移植_HAL库(以STM32F103为主控)

    准备材料 xff1a 驱动库 xff1a motion driver 6 12 硬件 xff1a 正点原子MINI STM32f103RCT6硬件IIC PB8 PB9 GY 91模块 看图可知AD0接地 xff0c 地址是0X68 硬件连
  • MPU9250简单快速更改MPL驱动,方便使用MPL和DMP

    附件准备材料 xff1a 我自己的资料MPU9250 c和MPU9250 h 1 xff0c 使用stm32cubemx配置好IIC 2 xff0c 在c c 43 43 处加入宏定义MPU9250 EMPL 最后为 xff1a USE H
  • 重定向printf,不使用微库,采用ARM Compiler 6 报错如何解决?

    复制正点原子的以下代码 xff0c 不使用微库 xff0c 采用ARM Compiler 6 报错 xff1a 报错 xff1a pragma import is an ARM Compiler 5 extension and is not
  • uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?

    uint8 t uint16 t uint32 t uint64 t 都是别名 xff0c c语言中有哪些数据类型 xff1f 怎么样取别名 在C语言中有6种基本数据类型 xff1a short int long float double
  • 使用stm32c8t6和mpu6050制作一台穿越机

    飞控部分 xff1a 介绍 xff1a 使用stm32c8t6和mpu6050制作一款低价飞控 xff0c 固件用的是开源的betaflight 3 2 5 NAZE xff0c 飞行噪声很小 xff0c 可能是桨叶好 xff0c 乾丰5寸
  • 小米平衡车plus放久后无法充电解决办法

    半年没在家 xff0c 电池没充电 xff0c 回来后发现已经无法充电 xff0c 看了网上一些 激活神器 的产品 xff0c 有人说是智商税 xff0c 我猜那个东西也没什么神奇的东西 xff0c 像这款plus的充电线上3孔的 xff0
  • c语言宏函数怎么传递宏参数_C语言中的宏参数评估

    c语言宏函数怎么传递宏参数 We can define a function like Macro in which we can pass the arguments When a Macro is called the Macro bo
  • MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵、控制分配矩阵等分析介绍

    很久没更新 看见订阅数量持续增加 感觉得加点料才对得起大家的 旋转矩阵 前言 在网上搜索到的一下关于旋转矩阵的表达形式 看起来很像 都是三角函数组合成 不同资料的正负号或者字母不一样 甚至一些是有模有样的复制粘贴 看的脑壳疼 旋转矩阵的形式
  • 数据区、栈区、堆区、代码区

    简介 1 栈区 stack xff1a 由系统的编译器自动的释放 xff0c 主要用来存放方法中的参数 xff0c 一些临时的局部变量等 xff0c 并且方法中的参数一般在操作完后 xff0c 会由编译器自动的释放掉 2 堆区 heap 由
  • 上位机PC控制UR3机器人实现方式

    一 在计算机上安装urx 库 终端输入 xff1a pip install urx xff1b 参考和例程下载见 xff1a https github com SintefManufacturing python urx xff1b 二 利
  • STM32实战项目-串口打印

    前言 xff1a 本小结主要实现串口打印功能 xff0c 主要将上一结的状态机运行次数 xff0c 通过串口在串口终端上打印出来 xff0c 硬件电路上主要是TTL转USB驱动电路 xff0c 软件上主要有状态机函数 xff0c 串口发送函
  • CURL详解

    原文链接 xff1a https www cnblogs com xishaonian p 6550613 html span class token number 1 span CURL详解 span class token number
  • STM32F103C8T6串口通信

    STMF103C8T6串口通信 串口相关的固件函数 xff1a mainusart cusart h 串口作为 MCU 的重要外部接口 xff0c 同时也是软件开发重要的调试手段 xff0c 其重要性不言而喻 关于STM32F103C8T6
  • 单片机(中断系统-串口通信)

    1 RETI 中断操作指令 这条指令的功能和RET指令相似 xff0c 2条指令的不同之处是 xff1a 本指令清除了中断响应时 xff0c 被置1的MCS 51内部不可寻址的 优先级生效 触发器清零 中断程序完成后 xff0c 一定要执行