上一篇文章我们介绍了嵌入式系统
嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求,如嵌入在家电、汽车、医疗设备、工业自动化、消费电子产品、通信设备等各种应用领域。
简单说嵌入式:就是嵌入到对象体中的专用计算机系统 三要素 嵌入 专用 计算机
嵌入式系统往往是一个较为复杂的系统,由单片机和硬件平台和嵌入式计算机系统等组成,其中的核心是嵌入式处理器
我们主要讲解单片机
单片机系统是经典的嵌入式系统
单片微型计算机简称单片机,他不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一块芯片上,往往集合了如下一些部分
? (1)CPU中央处理器
? (2)RAM 随机存取存储器
? (3)ROM 只读存储器
? (4)定时/计数器/ IO接口
采用哈佛结构 Harvard结构
将程序 指令储存和数据储存分开的存储器 结构。拥有独立的指令总线和数据 总线,可以让取指与数据访问分开 进行,提高了执行效率。
而不是传统我们熟悉的冯诺依曼结构
1)高集成度,体积小,高可靠性
2)控制功能强
3)低电压,低功耗,便于生产便携式产品
4)易扩展
5)优异的性能价格比
1 按数据处理位数来分
由于4位单片机性能比较低,目前已逐步退出市场。
而16位 和32位单片机虽然性能比8位的强得多,但由于成本和应用 场合的限制,尤其是近年来ARM嵌入式技术的发展,导致它 的应用空间也不如8位单片机广泛。而16位和32位单片机主 要应用于视频采集、图形处理等方面。
2 按内核分类
单片机按内核分为
51系列 爱特梅尔公司
ARM系列 安谋国际科技股份有限公司
PIC系列 美国微芯科技公司
AVR系列 爱特 梅尔公司
MSP430系列 德州 仪器公司
3 按指令类型分类 单片机按指令类型可以分为
精简指令集和复杂指令集。
1)中央处理器
运算器和控制器是核心,合称中央处理器或中央处理单元。
运算器执行所有的算术和逻辑运算;
控制器负责把指令逐 条从存储器中取出,经译码后向计算机发出各种控制命令;
而寄存器为处理单元提供操作所需要的数据。
2)存储器
存储器主要包括只读存储器和随机存储器。
3)输入设备和输出设备
输入设备和输出设备主要包括并行I/O端口和串行接口等通 信方式。
并行I/O端口即输入/输出引脚,这是单片机与外部电路和 器件主要联系的端口,它既可以接收外界输入的电平信号, 也可以向外发送指定的电平信号
串行通信是一条信息的各位数据逐位按顺序传送的通信方 式。其数据传送按位顺序进行,最少只需要一根传输线即可。串行通信主要采用通用异步收发传输器(UART)实现。 其中,RxD表示接收数据端口,TxD表示发送数据端口
4)时钟电路
主要为单片机提供运行所需要的节拍信号,每到 来一个节拍,单片机就执行一步操作,所以时钟电路提供 的信号频率越高,单片机的运行速度就越快,相应的功耗 也越大。
5)中断控制系统
中断的种类大体来说,主要包括硬体中断、软体中断两类。
硬体中断的形成,通常是外界的硬体装置利用由CPU拉出的 中断要求信号线来通知 CPU中断的请求。
软体中断,通 常是CPU自己引发的,比如说执行了不该执行的指令、计算 错误或者执行了某个用来产生软体中断的指令。
6)定时器/计数器
单片机将CPU、存储器、输入/输出设备、中断控制系统、 定时器/计数器和通信等多种功能部件集成到一块硅片上, 从而构成一个体积小但功能完善的微型计算机系统。
解下来我们重点介绍一款应用较多的单片机
以ALU为中心的运算器
还有以各种寄存器和译码器为核心的控制器
除了CPU以外,有名的是单片机的三大资源
FLASH(程序存储空间ROM)
RAM (数据存储空间)
SFR 特殊功能寄存器
FLASH 存储器是一种非易失性存储器,用于存储嵌入式系统的程序代码。它通常用于存储固件、操作系统、应用程序和其他必要的程序代码。与传统的RAM不同,FLASH 存储器的数据在断电后仍然保持,因此适用于存储长期保持的程序代码。
对于单片机来说Flash最大的意义是断电后 数据不丢失,
RAM是单片机的数据存储空间,用来存储程序运 行过程中产生的和需要的数据
跟电脑的内存是 相似的概念,关电后数据丢失,所以我 们每次打开计算器,都是从归零开始计算。
它的优点,第一是读写速度非常快,第二是理论 上是可无限次写入的,即寿命无限,不管程序怎 么运行怎么读写它都不会坏。
特殊功能寄存器是嵌入式系统中的一类寄存器,用于控制和配置系统的特殊功能和硬件模块。这些寄存器通常包括控制寄存器、时钟寄存器、中断寄存器、输入/输出端口控制寄存器等。通过编写和读取这些寄存器的值,开发者可以配置和控制系统的各种功能。
SFR,特殊功能寄存器。这 个概念大家可能刚开始理解不了,但是一 定要记住。单片机有很多很多功能,每个 功能都会对应一个或多个SFR,我们就是 通过对SFR的读写来实现单片机的多种多 样的功能的。
(1)CPU和内存
CC2530芯片中使用的8051CPU内核是一个单周期的8051兼容内核。
它有3种不同的内存访问总线,分别用于访问特殊功 能寄存器、数据和代码/外部数据
此外,它还包括一个调试接口和一个18路输入扩展中断单元。
(2)时钟和电源管理
数字内核和外设由一个1.8V低压差稳压器供电。它提供了 电源管理功能,可以实现使用不同供电模式的长电池寿命 的低功耗运行。CC2530有5种不同的复位源来复位设备
(3)外设
调试接口执行一个专有的两线串行接口,用于内电路调试。 通过这个调试接口,可以执行整个闪存存储器的擦除、控 制振荡器、停止和开始执行用户程序、执行8051内核提供 的指令、设置代码断点,以及内核中全部指令的单步调试。 使用这些技术,可以很好地执行内电路的调试和外部闪存 的编程。
定时器1是一个16位定时器,具有定时器/PWM功能。的消费 型IR信号。
定时器2是专门为支持IEEE 802.15.4 MAC或软件中其他时 槽的协议设计的。该定时器有一个可配置的定时器周期和 一个8位溢出计数器
定时器3和定时器4是8位定时器,具有定时器/计数器/PWM功能。
睡眠定时器在除供电模式3之外的所有工作模式下不断运行。该定时器 的典型应用是作为实时计数器,或作为一个唤醒定时器跳出供电模式1 或2
ADC支持7~12位的分辨率,分别在30kHz或4kHz的带宽。DC和音频转换 可以使用高达8个输入通道(端口0),输入可以选择作为单端或差分。 参考电压可以是内部电压、AVDD或一个单端或差分外部信号。ADC还有 一个温度传感输入通道。ADC可以自动执行定期抽样或转换通道序列的 程序
串口1(USART 0)和串口2(USART 1)被配置为一个SPI主/从或一个 UART。它们为RX和TX提供双缓冲,以及硬件流控制。
单片机最小系统 ,也叫做单片机 最小应用系统, 是指用最少的原 件组成单片机可 以工作的系统。 单片机最小系统 的三要素就是电源、晶振、复位
常用单片机的电源系统有5V系统 和3.3V系统这两种。
晶振,又叫晶体振荡器,他起到的作用是 为单片机系统提供基准时钟信号。
单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。
STC89C52单片机的18脚和19脚是晶振引 脚,我们接了一个11.0592M的晶振(它每 秒钟振荡11,059,200次),外加两个20pF 的电容,电容的作用是帮助晶振起振,并 维持振荡信号的稳定
电容分为不同种
晶振分为有源晶振和无源晶振
两种时钟产生方式
? 内部振荡器方式
? 外部时钟源方式
CPU总是按照一定的时钟节拍与时序工作,时序 定时单位共有4个,从小到大依次是:
振荡周期/时钟周期:Tc=晶振频率fosc(或外加频率)的倒数 MCS-51单片机中最小的时序单位
状态周期:Ts=2个时钟周期(Tc)(很少用到此概念)
机器周期:CPU完成一个基本操作所需的时间称为机器周期
指令周期: 执行一条指令所需的机器周期?数,是MCS-51 单片机最大的时序单位。通常含有1~4个机器周期。
相互转换关系
振荡周期 = 晶振频率fosc的倒数;
1个状态周期= 2个振荡周期;
1个机器周期 = 12个振荡周期=6个状态周期;
1个指令周期 = 1、2、4个机器周
CC2530指令周期与标准51不同
标准51:1个机器周期为12个振荡周期 ? CC2530包含一个单周期的增强51内核,不 同于标准51
CC2530
四个时钟源 两个内部振荡器,两个外部晶振
: 不做任何配置时,系统时钟 为16Mhz ? 机器周期是多少? 1/16 us
复位电路需要接到接到了单片机的RST(Reset)复位引脚 上。
单片机复位一般是3种情况:
上电复位、手动复位、程序 自动复位。
(1)上电复位:单片机上电后进行的一个内部的初始化过程。保证单 片机每次都从一个固定的相同的状态开始工作。
(2)手动复位: 遭受到意外干扰而导致程序死机,或 者程序跑飞的时候,我们就可以按下一个复位按键,让程序重新 初始化重新运行。
(3)自动复位 当程序死机或者跑飞的时候,单片机往往有一套自动复位机制, 比如看门狗。如果程序长时间失去响应,单片机看门狗模块会自 动复位重启单片机
电源、晶振、复位构成了单片机最小系统 的三要素,也就是说,一个单片机具备了 这三个条件,就可以运行我们下载的程序 了
而其他的比如LED小灯、数码管、液晶等设 备都是属于单片机的外部设备,即外设。
外设
通常红色贴片LED:靠电流驱动,电压 1.8V~2.2V,电流1到20mA,在1到 5mA亮度有所变化,5mA以上亮度基本 无变化
嵌入编程中要注意数据类型,
char 8位 一般给寄存器赋值,因为寄存器一般是八位
需要考虑编程的取值范围