【笔记】微机原理及接口技术5 -- MCS51单片机概述

news2024/12/27 10:53:52

MCS-51


CPU

由两个部分组成:运算器和控制器

运算器:算术逻辑单元(ALU)、位处理器、累加器 ACC 等组成;
控制器:主要有内部晶振和一些定时、控制逻辑组成


存储器

拥有三个存储器地址空间

  1. 程序存储器地址空间
  2. 内部数据存储器地址空间
  3. 外部数据存储器地址空间

累加器 ACC:一个最常用的专用寄存器,大部分单操作数指令的操作数取自累加器,指令系统中采用 A 作为累加器的助记符

程序状态字 PSW:一个 8 位寄存器,它包含了程序状态信息

栈指针 SP:它指示出栈顶在内部 RAM 块中的位置;SP 的初值越小,堆栈深度就可以越深

数据指针 DPTR:一个 16 位专用寄存器,当对 64KB 外部数据存储空间寻址时,可作为间址寄存器使用

IO 专用寄存器:统一使用 MOV 指令操作

串行数据缓存器SBUF:用于存放欲发送或已接受的数据,由两个独立的寄存器组成,一个是发送缓冲器,另一个是接受缓冲器

定时器与计数器


时序系统

XTAL1 作为芯片内部振荡电路的输入端,XTAL2 为其输出端

标准内部时钟
在 XTAL1 和 XTAL2 上面接定时原件,内部振荡电路实现自激振荡

在这里插入图片描述


外部时钟方式?
下图展示了 HMOS 型芯片的外部时钟连接方式

在这里插入图片描述

单片机复位

计算机启动,系统默认进入复位状态;
复位状态下 CPU 和其余转筒寄存器均设置默认值;


在单片机的 RESET 引脚上出现 24 个时钟振荡脉冲(两个机器周期)以上的高电平,单片机就能实现复位

下图表示内部复位的典型格式,RESET 接外部复位电路,而施密特触发器可以用来进行整形操作

在这里插入图片描述


简单复位电路有上电复位和手动复位两种
不管是哪一种复位电路都要保证在 RESET 引脚上提供 10ms 以上稳定的高电平


低功耗

目前存在两种低功耗模式

  1. 空闲方式
  2. 掉电保护方式

空闲方式中,仅 CPU 停止工作,但振荡器仍然运行,中断控制器等仍然在时钟控制下进行。

掉电保护方式中,片内振荡器停止工作,片内所有功能全部停止工作,而 RAM 等寄存器内容可维持不变


低功耗工作方式是通过 电源控制寄存器PCON 来确定的

PCON.0=1 进入空闲方式
可以使用中断、硬件复位两种方式退出空闲方式

PCON.1=1 进入掉电保护方式
只能使用硬件复位的方式退出掉电保护方式
不建议通过降低 VCC 电压使得其“不自然的”进入掉电保护状态!


定时器计数器原理

重点关注以下图形,C51 和 STM32 的定时器和计数器对应寄存器名称和布局都差不多,学会了就直接融会贯通即可

在这里插入图片描述


T0 由 TH0 和 TL0 构成,T1 由 TH1 和 TL1 构成
TMOD用于控制和确定各个定时器/计数器的功能和工作模式
TCON用于控制定时器/计数器 T0、T1 的启动和停止计数,同时包含定时器/计数器的状态


下图为定时器与计数器的工作原理图

  • 计数脉冲有两个源:一个是片内振荡器输出经 12 分频得到;一个是外部脉冲 TX
  • C/T 用于设置使用内部振荡(0)还是外部振荡(1)
  • 控制信号有效时(闭合),开始计数
  • 计数开始,每获得一个脉冲则让加 1 计数器给计数器加 1
  • 当计数器全 1 时,发生溢出,计数器归零,置位 TCON 表示定时时间到或者计数值满

在这里插入图片描述


控制寄存器 TCON 可以设置以下几个主要的位

  • TF1:定时器 1 溢出标志位,当定时器/计数器 1 计满溢出时,由硬件置 1
  • TR1:定时器 1 运行控制位,置位时,启动定时器/计数器工作;清零时,停止工作
  • TF0:定时器 0 溢出标志位
  • TR0:定时器 0 运行控制位

定时器与计数器工作模式

定时器/计数器的初始化流程

  1. 确定定时器的工作模式,设置 TMOD
  2. 写入定时初值到 TH0、TL0 或 TH1、TL1 中;
  3. 设置 IE,开放定时器中断;
  4. 将 TR0 或 TR1 置位,启动定时器/计数器工作。

串行通讯

串行口基本结构

  • 收发缓冲器 SBUF 可同时收发数据
  • 发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入
  • SBUF 的作用是设置针对接收缓存区操作还是发送缓冲器操作

串行口控制寄存器 SCON 设置串行通信接口的工作方式及收发方式
电源控制寄存器 PCON


波特率解释

  • 波特率指串行口每秒发送(或接收)的位数
  • 工作方式 0 中,波特率为时钟频率的 1/12,即 fosc/12
  • 工作方式 2 中,波特率取决于 PCON 中的 SMOD 值

中断系统

下图展示了中断系统的程序框图
下面介绍当设置对应寄存器的值后对应含义

  • IT0=1 设置 INT0 为脉冲触发,下降沿有效
  • IT0=0 设置 INT0 为电平触发,低电平有效
  • IE0 INT0 请求标志位
  • TF0 T0 定时计数溢出标志位
  • EA=1 CPU 开放所有中断
  • EX0=0 禁止 INT0 中断
  • ET0=0 禁止 T0 中断
  • PX0 外部中断 0 优先级设定位
  • PT0 定时器 T0 中断优先级设定位
  • PX1 外部中断 1 优先级设定位
  • PT1 定时器 T1 中断优先级设定位
  • PS 串行口中断优先级设定位。

在这里插入图片描述


外部中断 0:对应引脚 INT0
外部中断 1:对应引脚 INT1

外部中断有两种触发方式

  1. 低电平有效:即 CPU 时刻监测 INT 输入电平,若为低电平则触发中断
  2. 边沿触发:连续监测 INT 两次输入电平,若前一次为高电平,后一次为低电平,则触发中断

低电平或高电平的宽度至少要保持一个机器周期,即 12 个振荡周期以上


PX PT PS 可以设置中断的优先级,设置为 0 为低优先级,设置为 1 为高优先级

中断规则

  • 低优先级中断请求不能打断高优先级的中断服务
  • 高优先级中断请求可以打断低优先级的中断服务
  • 一个中断一旦得到响应,与它同级的中断请求不能中断它
  • 如果同级的多个中断请求同时出现,则按 CPU 查询次序确定哪个中断请求被响应

单片机的中断处理流程

分为 3 个阶段,即中断响应、中断处理和中断返回

中断响应

  • 中断响应条件满足,且不存在中断阻断的情况,开始触发中断响应
  • 中断系统通过硬件生成长调用指令(LCALL),其把断点地址压入堆栈保护起来
  • 将对应的中断入口地址装入程序计数器 PC,使程序转向该中断入口地址,执行中断服务程序

中断处理

  • 从入口地址开始执行,直至遇到指令 “RETI” 为止
  • 过程包括:一是保护现场;二是处理中断源的请求

中断返回

  • 由专门的中断返回指令 RETI 来实现的
  • RETI 把断点地址取出,送回到程序计数器 PC 中去
  • 通知中断系统已完成中断处理,将清除优先级状态触发器

PS:中断请求撤销(对于某些中断,如果不及时清除就会触发下一次中断)

  1. 定时器溢出中断 TF0 或 TF1 是自动清除的,不用管
  2. 边沿触发 IE0 或 IE1 也是自动清除
  3. 串行口中断需要手动清除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【内网穿透】Linux服务使用宝塔面板搭建网站,并内网穿透实现公网远程访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自cpolar极点云文章:Linux使用宝塔面板搭建网站,并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面板&#xf…

第七章 商品详情三

流程: 1、用户在订单服务(192.168.232.101)下单后,订单服务以生产者身份往rabbitmq(192.168.232.104)推送消息,下单后将减库存信息推送到rabbitmq 2、数据worker(192.168.232.100&…

造船码头行车/电动葫芦限位器无线应用

一、应用背景 近年来,我国造船业在高技术船舶研发和建造方面持续取得新突破,据统计截止到2022年,我国造船业完工量、新接订单量、手持订单量三大指标国际市场份额均保持世界前列。连续13年位居全球居首。随着船舶制造的综合能力不断提高&…

【算法与数据结构】459、LeetCode重复的子字符串

文章目录 一、题目二、解法2.1 暴力破解法2.2 KMP算法2.3 Sunday算法2.4 官方查找算法 三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 2.1 暴力破解法 思路分析:子串多次循环才能构成整个…

【回溯算法part03】| 39.组合总和、40.组合总和||、131.分割回文串

目录 🎈LeetCode39. 组合总和 🎈LeetCode40.组合总和|| 🎈LeetCode131.分割回文串 🎈LeetCode39. 组合总和 链接:39.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 …

nuxt3 fullpage.js踩坑, fullpage.js 全屏滚动

nuxt3 fullpage.js踩坑, fullpage.js 全屏滚动, fullpage is underfind 我用的是 nuxt 3.6.1 1.引入 fullpage.js(3.0.1), 下载地址 github链接,下载后放到assets文件下 app: {head: {script: [{ src: /assets/fullpage.js, type: "text/javascript…

[BitSail] Connector开发详解系列二:SourceSplitCoordinator

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 ource Connector 本文将主要介绍创建、管理Split的角色SplitCoordinator。 SourceSplitCoordinator 大数据处理框架的核心目的就是将大规模的数据拆分成为多个合理…

皂液机低功耗红外测距感应方案 免触碰红外感应模块WTU201F2 B004

近年来,随着卫生意识的提高,自动感应设备在公共场所、家庭和工作场所中变得越来越重要。在这个领域中,皂液机的自动感应功能成为了关键。为了提供更为智能、高效的用户体验,深圳唯创知音推出了全新的皂液机红外测距感应方案——WT…

自动生成的webservice客户端设置请求消息头信息

这里讲的头消息是指发送webservice请求的HTTP头信息(MIME 头信息),而不是SOAP报文里面的Header标签内容。 package example;import mypackage.GetOperInfoRequest; import mypackage.GetOperInfoResponse; import mypackage.Webservice11; i…

怎么把MP3文件转换成OPUS,分享这两个方法给大家!

MP3和OPUS是两种常见的音频格式,用于存储和传输音乐、语音等内容。然而,随着技术的进步和需求的变化,有时我们需要将MP3文件转换为OPUS格式,以便在特定场景下获得更好的音频体验。本文将介绍两种简单而有效的方法,以帮…

flutter RepaintBoundary 截屏图片下载,保存图片不清晰的问题

flutter RepaintBoundary 截屏图片下载,保存图片不清晰的问题 前言一、什么是RepaintBoundary二、RepaintBoundary 能干什么三、RepaintBoundary 保存图片模糊的问题四、RepaintBoundary 使用小demo总结 前言 最近工作中,突然遇到截屏保存图片的问题&…

宝塔安装Jenkins-图文小白教程

一、Jenkins包下载 大家可以从Jenkins官网(https://www.jenkins.io/)根据自己的需要下载最新的版本。 但Jenkins官网下载较慢,容易造成下载失败。可以去国内的开源镜像网站下载Jenkins最新版本。目前博主使用的是清华大学的开源镜像网站&…

这样建立自己的『知识管理系统』,效率翻倍

在移动互联网时代,我们可以轻松获取大量的知识,但这些知识往往是碎片化的,没有系统性,缺乏深度。尽管我们努力学习了很多知识,但能力的提升却变得缓慢。 为了解决这个问题,我们需要建立一个系统化的知识体系…

【Leetcode】27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…

Gerrit REST API简单介绍

Gerrit是一款开源免费的代码审查工具,如果其它平台想要获取gerrit数据,比如统计仓库代码提交数据等信息,可以使用Gerrit提供的REST API来获取,本文记录一些我使用到的Gerrit API。 目录 准备工作gerrit APIGerrit REST API使用实例…

一例.bat脚本打包样本的分析

样本的基本信息 hosts.exe MD5: 72ddf833fa206326e15c2c97679d323e SHA1: ad148ff4b7f77831b469be8bb19d32d029c23b50banish.exe MD5: 4a43ea617017d5de7d93eb2380634eee SHA1: b0af5aa27cd0e49955f1ab2d18d69f7bc8fd4d21分析过程 查壳 脱掉upx壳,用IDA打开&…

【文件 part 6 - 格式化读写文件函数 随机读写】

格式化读写文件函数 /* 函数调用: */ fprintf ( 文件指针,格式字符串,输出表列); fscanf ( 文件指针,格式字符串,输入表列);/** 函数功能:* 从磁盘文件中读入或输出字符* fprint…

用 ChatGPT 制作中英双语字幕

用 ChatGPT 制作中英双语字幕 0. 背景1. 使用剪映生成英文字幕2. 使用 ChatGPT 的制作中英双语字幕 0. 背景 最近在学习 AI 相关的知识,有很多视频是英文的。 为了提高学习效率,我考虑将这些视频加上中英双语字幕。 效果展示如下, 1. 使用…

如何用logrotate管理每日增长的日志

这篇文章主要介绍了如何用logrotate管理每日增长的日志问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教! logrotate简介 logrotate is designed to ease administration of systems that gen…

数据结构--二叉树的存储结构

数据结构–二叉树的存储结构 二叉树的顺序存储 #define MaxSize 100 struct TreeNode {ElemType value;bool isEmpty; }; TreeNode tree[MaxSize];初始化 void init() {for (int i 0; i < MaxSize; i)tree[i].isEmpty true; }几个重要常考的基本操作: i的左孩子: 2 i 2…