当前位置: 首页 > article >正文

【浅谈】单片机基本概念

这里写目录标题

  • 一 引言
  • 二 存储器
    • 1 ROM(read only memory)
    • 2 RAM (random access memory)
    • 3 累加器(ACC : accumulator)
  • 三 I/O口
  • 四 堆栈
  • 五 定时/计数器
  • 六 中断
    • 1、`一些中断词汇`:
    • 2 中断的`响应过程`:
    • 3 `作用`:
  • 七 复位
    • 1 `启动方式`:
    • 2 常见的复位电路:
  • 八 看门狗(watchdog tinmer)
    • 1 看门狗的`作用`:
    • 2 看门狗的`4大本质`要素:
  • 九 时钟电路和振荡源
    • 1`常见的时钟电路`:
    • 2 片内`锁相环`(PLL)技术
  • 十 脉宽调制(PWM)
  • 十一 模拟/数字转换(ADC)
    • 1`常用的ADC方法`:
    • 2 A/D转换器的主要`技术指标`
    • 3 采样后的滤波处理
  • 十二 串行通信
    • 1 概念:
    • 2 串行通信最主要的问题:
    • 3 实现同步的方法:

机缘巧合知道了一本关于单片机的书,书名是《匠人手记:一个单片机工作者的实践和思考》,翻了翻,大有裨益,边学习边记录,算是对整个框架的重新梳理吧,仅供学习参考。

一 引言

一个单片机系统,就是一个微型化的计算机。
主要包括:中央处理器CPU、存储器、输入/输出(I/O)设备。
个人计算机是将这些模块分成若干个芯片或模块,安装在主板上,
而单片机是将这些部分集成到一颗芯片中。

中央处理器:主要负责进行算术和逻辑运算,以及对系统其它设备的控制。
存储器:主要用于存储数据和程序。【单片机的一个主要作用就是数据信息处理】
输入/输出设备:是系统与外界交换数据的通道。

一个单片机基础系统框图如下:
在这里插入图片描述
目前单片机继承了更多功能模块,如:A/D D/A PWM LCD驱动电路等。

二 存储器

存储器的物理实质是一组(或多组)具备数据输入/输出和数据存储功能的集成电路,用于充当设备缓存或保存固定的程序及数据。

按存储信息功能不同分为:ROM和RAM

1 ROM(read only memory)

ROM只读存储器:一次写入后只能被读出。一般用于存固定程序或数据表格。
但“只读”有时可被一些新特性的器件颠覆。
如EPROM 和 闪存就可以使用适当的方法进行擦除或改写。
(1) EPROM (Erasable Programmable ROM)
它与一般的ROM不同的是,可用特殊的装置擦除或重写其中的内容。
(2)闪存(flash memory)
也叫PEROM(programmable and erasable ROM),它是完全非易失的,可在线写入,且可按页连续字节写入,读出速度快。

特点:电源关闭或端点后数据仍会保留下来。

2 RAM (random access memory)

随机存储器。即内存。
作用:用来存放各种输入/输出数据、中间计算结果,以及与外部存储器交换信息,或作堆栈用。其存储单元根据具体情况可读出或改写。

特点:暂时存放程序和数据,断电或电源关闭,数据会丢失

3 累加器(ACC : accumulator)

是一种暂存器。
作用:存储计算所产生的的中间结果,提升计算效率。

三 I/O口

它是单片机与外界联系的通道,可多各类外部信号(开关量、模拟量、频率信号)进行检测、判断、处理,并可控制各类外部设备。

输入/输出大多是双向三态的
有些单片机允许设置I/O口的输入/输出状态,当输入时,对外呈“高阻态”,输出时,对外可提供更大的灌电流或拉电流,可直接驱动一些负载(如LED)
输入口:用来读取外部输入的电平信号;
输出口:用来对外输出一个电平信号。

输入门槛电流、最大输出电流、输出电平(高电平、低电平)
I/O口附加功能,包括内部上拉/下拉电阻功能,R-OP-TION功能以及漏极开路功能。
I/O口功能的扩展和复用:中断、唤醒、ADC检测以及PWM输出等。

四 堆栈

堆栈(Stack)是一种线性数据结构,可简单看作是一维数组。

不同的是对一维数组进行元素插入、删除,可在任意位置。但对于堆栈来说,插入、删除操作是固定在一端进行,这一段为栈顶(TOP),另一端为栈底(Bottom)

堆栈操作:压栈和出栈。
向栈中插入数据的操作称为“压入(push)”,从栈中删除数据称为“弹出(pop)”
“向上生长”型堆栈和“向下生长”型堆栈。向上则压栈时指针+1,向下压栈时指针-1

特性:“后进先出(LIFO)”。堆栈是只有一个进出口的一维空间,所以最后一个放入的要先出来。

堆栈指针(SP):用于指示栈顶位置(地址)。发生压栈和出栈操作时,导致栈顶位置变化时,堆栈指针会随之变化。
有的单片机,堆栈指针可通过程序去设置,堆栈空间仅受整个系统的RAM空间大小制约。
有的不允许甚至堆栈指针。

堆栈的应用
1、调用子程序,或响应中断,堆栈用作保存现场。
2、临时变量存取。

注意事项
1、堆栈溢出:覆盖老的数据,造成数据丢失或错乱,或程序结构发生混乱。
2、压栈和出栈的匹配(对应关系)

五 定时/计数器

定时/计数器,实质都是计数器。
定时器:对微机内部时钟脉冲进行计数;
计数器:对微机外部输入的脉冲进行计数。
若输入脉冲周期相同,也可将计数器作为定时器来使用。

作用
(1)计时、定时或延时控制
(2)脉冲计数
(3)测量脉冲宽度或频率(捕获功能)

实现定时的几种方式
(1)软件延时。(占用系统时间)
(2)可编程定时/计数器方法
(3)不可编程的硬件方法(设计一个数字逻辑电路,如555定时器)

六 中断

优先级更高的事件发生,打断优先级低的事件进程时,称为中断。引起中断的事件称为中断源。
通常我们将主应用程序称为后台程序;
中断服务程序称为:前台程序。

1、一些中断词汇

现场保护、中断响应,现场恢复、中断返回、中断嵌套(一个中断事件没做完,更高级别的中断又来了,优先级)、中断屏蔽等

中断嵌套处理示意图:
在这里插入图片描述

2 中断的响应过程

(1)现场保护。将当前地址、ACC、状态寄存器保存到堆栈中。
(2)切换指针。切换到相应的入口地址。
(3)执行中断处理程序。
(4)现场回复。将保存在堆栈中的数据恢复。
(5)中断返回。执行完中断指令后,从中断处返回到主程序,继续执行。

有的单片机会自动执行现场保护和恢复,有的需编写这部分程序。
有的的那篇及为每个中断源分配了不同的入口地址,甚至可自定义,有的则将所有中断源共用一个入口,就需要进行中断查询。

3 作用

某个任务对实时性要求较高时,应交由中断服务程序去做。
当主应用程序对实时性要求较高时,应避免被打扰。

七 复位

复位是通过外部电路给单片机的复位引脚一个复位信号,让系统重新开始运行。

1 启动方式

(1)冷启动:上电复位
(2)热启动:不断电,复位引脚一个复位信号;内部看门狗计时溢出导致的复位等。

常见的复位动作

  • PC指针从起始位置开始运行;
  • I/O扣变成缺省状态(高阻态,或输出低电平);
  • 部分专用控制寄存器恢复到缺省值状态;
  • 普通RAM不变;

注意事项
(1)注意复位信号的电平状态及持续时间必须满足系统要求。
(2)注意避免复位不良。

2 常见的复位电路:

(1)简易的上电复位电路。(有一个电阻和一个电容构成)
在上电时,电容被充电。在电容充电期间,系统复位。电容充电结束后,系统复位结束,开始正常工作。
复位电平的宽度(持续时间)由电阻值和电容值共同决定。

如下复位电路图,为高电平复位有效。

在这里插入图片描述

(2)防电源抖动复位电路

在这里插入图片描述
可以防止因电源抖动而产生的反复复位。

(3)残余电压保护复位电路
在这里插入图片描述
以上两个为欠压保护复位电路,在电源频繁插拔过程中,这两个电路可有效保证复位。

(4)施密特特性复位电路
在这里插入图片描述
避免在Vcc在复位阈值附近时复位振荡,关键器件是反馈电阻R3

(5)掉电预警复位电路

当前一级电源电压(假设为I2V)开始下降时,Vcc由于电容C2的保护作用,还没有下降,这为系统弄的可靠复位提供了宝贵时间。当复位电路检测到I2V电源下降后,利用时间差让cpu提前进入复位状态,从而避免复位不良。

八 看门狗(watchdog tinmer)

需求:程序需要一个独立于系统之外的单元对系统的工作进行监测,在发生异常状况时及时予以纠正。

1 看门狗的作用

防止程序发生死循环,或程序抛费。
在这里插入图片描述
看门狗的工作状态
看门狗是一个定时器电路,平时只要一通电,就会不断计时。计时达到设置,产生一个溢出信号,该型号被接到RST端,引发系统复位。
CPU正常工作时,每隔一段时间就输出一个信号到喂狗端,用来让定时器清零(也称“喂狗”),从而避免在正常工作状态复位。当程序跑飞或死机,程序异常,若超过规定时间不喂狗,看门狗会发生计时溢出,出发系统复位。

2 看门狗的4大本质要素:

定时器
复位电路
可清零
独立性。

喂狗注意事项

  • 喂狗间歇不得大于看门狗溢出时间。
  • 避免在中断中喂狗。
  • 尽可能避免多处喂狗。

看门狗电路发展阶段:
(1)片外分立器件电路(用555或4060等构成)
(2)专用WDT集成电路。
(3)CPU片内集成。(虽是内置,一般都有独立的RC振荡源)

九 时钟电路和振荡源

单片机是一种时序电路,必须提供脉冲信号才能正常工作,所以需有个专门的时钟电路。

1常见的时钟电路

(1)外置晶振+内置振荡器
在这里插入图片描述

(2)外置陶振+内置振荡器
(3)RC振荡器
(4)外部直接给时钟输入

2 片内锁相环(PLL)技术

有时,高时效性和低功耗是矛盾的。有了锁相环技术,就可以控制的单片机的工作频率。
作为编程者需要知道如何去设置系统的工作评率,以及何时选择怎样何种工作频率。

几个概念
振荡周期:指振荡源的振荡节拍
机器周期:一个机器周期包含了多个振荡周期
指令周期:执行一条指令,需要几个机器周期。不同指令操作需要的机器周期不同。

十 脉宽调制(PWM)

pulse width modulation (脉冲宽度调制),简称脉宽调制。

PWM技术原理
通过调整一个周期固定的方波的占空比,来调节输出的平均电压、电流或功劳簿等被控量。

应用场景:

  • 控制电机转速;
  • 控制充电电流;
  • 控制磁场力矩大小。

PWM技术的种类:
相电压控制PWM、脉宽PWM、随机PWM、SPWM、线电压控制PWM等。

十一 模拟/数字转换(ADC)

1常用的ADC方法

  • 积分型ADC
  • 逐次逼近型ADC
  • (sigma-delta)型ADC
  • 闪速ADC
  • 平行比较型ADC
  • 电容阵列逐次比较型
  • 压频变换器

2 A/D转换器的主要技术指标

(1)分辨率
(2)转换速率
(3)量化误差
(4)偏移误差
(5)满刻度误差
(6)线性度
(7) 其它:绝对精度、相对精度等

3 采样后的滤波处理

经过ADC获得的数据一般不能直接用,需要去除其中干扰成分,并且让数据曲线更平滑、稳定。所以要对采样值进行软件滤波,常用的方法有:算数平均滤波法、一阶滤波法、程序判断滤波法等

十二 串行通信

1 概念:

外设和计算机间使用一根数据信号线。数据在数据信号线上逐位地进行传输,每一位数据都占据一个固定的时间长度。

并行通信:数据是被分组同步传输的,每次可传输N位数据;
串行通信:数据是被逐位传输的。其占用的通信端口资源比并行通信少的多。

2 串行通信最主要的问题:

是数据收发同步问题。只有一根数据线。

3 实现同步的方法:

(1)双方约定一个相同的通信速度(如RS232协议),即波特率(bps=bit/s)。波特率决定了通信的速度。

(2)引入时钟信号(如I2C通信协议),意味着增加一段时钟线。该线上每发生一个同步时钟脉冲,双方就完成一个位(bit)的传输。

(3)类似红外通信那样采用特殊的编码方式。
在这种通信方式中,每一位数据都是用一个脉冲来表示。该脉冲有两种不同的脉冲宽度或占空比,分别代表数据0和1。而脉冲边沿则用来实现同步的目的。

串行通信的数据校验:
数据校验是确保通信正常的手段。具体方法包括:奇偶校验、和校验、冗余数据表决校验、CRC校验等

学习书目:《匠人手记:一个单片机工作者的实践和思考》
借用作者的一句话勉励自己,也和大家共勉。“技术源于积累,成功源于执着。


http://www.kler.cn/news/305347.html

相关文章:

  • 在WPF中使用矢量图标
  • 【ArcGISProSDK】初识
  • Vue Router push方法的使用
  • vm虚拟机中ubuntu连不上网络,网络图标消失解决办法
  • 技术成神之路:设计模式(十三)访问者模式
  • 2.1 溪降技术:溪降运动的定义
  • 链路层和交换网_计算机网络
  • vue+el-table 可输入表格使用上下键进行input框切换
  • Qt常用控件——QSpinBox
  • STM32的寄存器深度解析
  • Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询
  • uni-app和Node.js使用uni-push2.0实现通知栏消息推送功能
  • Centos挂载和删除nfs
  • python选择排序算法
  • 基于Java+Mysql实现(web)大型企业管理系统
  • API安全测试 | Postman + BurpSuite 配置证书代理
  • chapter14-集合——(List)——day17
  • 828华为云征文|部署在线文件管理器 Spacedrive
  • 大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
  • 【LLM多模态】CogVideoX文生视频模型结构和训练过程
  • 【openGauss】检查工具gs_check,gs_checkperf的应用
  • Redisson 异步释放锁
  • 什么是485无线通信
  • 磁盘写操作压力测试工具的设计与实现
  • ChatGLM3模型搭建教程
  • OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCircle()的使用
  • 研1日记12
  • C++系列-函数对象/仿函数
  • [网络]TCP/IP协议 之 网络层IP协议(3)
  • 艾丽卡的区块链英语小课堂