是MCU微控制器单元的缩写,中文叫微控制器,俗称MCU。就是适当降低CPU的频率和规格,将存储器、计数器、USB、A/D转换、UART、PLC、DMA,甚至LCD驱动电路等外设接口集成在一个芯片上,形成芯片级计算机,可以控制不同应用的不同组合,从手机、PC外设、遥控器到汽车电子、工业。
单片机发展简史
单片机的历史不长,但发展很快。它的产生和发展大致与微处理器同步。自1971年英特尔公司首次推出4位微处理器以来,其发展至今大致可分为五个阶段。以下是对英特尔 发展的介绍。s单片机。
1971 ~1976
单片机发展的初级阶段。1971年11月,Intel公司首先设计出每芯片集成2000个晶体管的4位微处理器Intel 4004,配以RAM、ROM和移位寄存器组成第一个MCS-4微处理器,随后推出8位微处理器Intel 8008,以及其他公司陆续推出的8位微处理器。
1976 ~1980
低性能单片机级。以Intel公司1976年推出的MCS-48系列为代表,采用单片结构,将8位CPU、8位并行I/O接口、8位定时器/计数器、RAM和ROM集成在一个半导体芯片上。虽然其寻址范围有限,没有串行I/O,RAM和ROM容量小,中断系统简单,但其功能可以满足一般工业控制和智能仪器的要求。
1980 ~1983
高性能单片机级。现阶段的高性能8位单片机一般都配有串口、多级中断处理系统和多个16位定时器/计数器。增加了片上RAM和ROM的容量,寻址范围可达64 KB。有些芯片还有A/D转换接口。
从1983年到80年代末
16位MCU级。1983年,英特尔推出了MCS-96系列高性能16位单片微型计算机。由于其最新的制造技术,芯片集成度达到了120,000个晶体管/芯片。
在1990年代
单片机在集成度、功能、速度、可靠性、应用领域等各个方向都向更高的水平发展。
单片机的分类及应用
单片机按其存储器类型可分为不带片内ROM和带片内ROM两种。对于没有片上ROM的芯片,应用前必须连接外部EPROM;片上ROM类型的芯片可分为片上EPROM型、掩膜片上ROM型和片上Flash型。
按用途可分为一般型和特殊型;根据数据总线的宽度和一次能处理的数据字节的长度,可分为8位、16位和32位MCU。
目前,国内MCU应用市场最广泛的是消费电子领域,其次是工业领域和汽车电子市场。电子消费包括家用电器、电视、游戏机、影音系统等。工业领域包括智能家居、自动化、医疗应用和新能源发电和配电。汽车领域包括汽车动力总成和安全控制系统等。
MCU的基本功能
对于绝大多数的单片机来说,下面这些功能是最常见最基本的。对于不同的MCU,描述方法可能不同,但本质基本相同:
定时器:虽然定时器的种类很多,但大致可以分为两类:一类是时间间隔固定的定时器,即其计时时间由系统设定,用户程序可以 我控制不了它。系统只提供几个固定的时间间隔供用户程序选择,如32Hz、16Hz、8Hz等。这种定时器在4位单片机中比较常见,可以用来实现时钟、定时等相关功能。
另一种是可编程定时器。顾名思义,这个定时器的计时可以由用户控制 的程序。控制方法包括时钟源的选择、预分频的选择和预置数的设置等。有些MCU同时具备这三种特性,而有些则可能是其中的一种或两种。这种定时器的应用非常灵活,实际用途千变万化。最常见的应用之一就是用它来实现PWM输出。
由于可以自由选择时钟源,这种定时器通常与事件计数器相结合。
IO端口:任何MCU都有一定数量的IO端口。没有IO端口,MCU就失去了与外界通信的通道。根据IO口的可配置情况,可以分为以下几种:
纯输入或纯输出口:这种IO口是由MCU硬件设计决定的,只能输入或输出,不能通过软件实时设置。
直接读写IO口:如MCS-51的IO口就属于这种IO口。执行读取IO口的指令时,为输入口;当执行写IO端口指令时,它将自动成为输出端口。
编程设置输入输出方向:这类IO口的输入或输出由程序根据实际需要设置,应用灵活,可以实现一些总线级的应用,如I2C总线、各种LCD和LED驱动控制总线等。
对于IO口的使用,一定要记住:对于输入口,必须有明确的电平信号,以保证它能 float;对于输出端口,其输出的状态电平必须考虑其外部连接,要保证待机或静态时没有拉电流或吸电流。
外部中断:外部中断也是大多数单片机的基本功能,一般用于信号的实时触发、数据采样和状态检测。中断模式由上升沿、下降沿和电平触发触发。外部中断一般通过输入端口实现。如果是IO口,其中断功能只有设置为输入时才会开启。如果是输出端口,外部中断功能会自动关闭。外部中断的应用如下:
外部触发信号的检测:一种是基于实时性要求,如可控硅的控制,突发信号的检测等。而另一个则是省电的需要。
在测量频率时,为了保证信号不被遗漏,外部中断是最理想的选择。
数据解码:在遥控应用领域,为了降低设计成本,往往需要使用软件对各种编码数据进行解码,如曼彻斯特和PWM编码。
按键检测和系统唤醒:一般进入睡眠状态的MCU需要通过外部中断唤醒,最基本的形式是按键,通过按键的动作产生电平的变化。
通信接口:单片机提供的通信接口一般有SPI接口、UART、I2C接口等。分别描述如下:
SPI接口:这种接口是大多数单片机提供的最基本的通信方式,其数据传输受同步时钟控制。信号包括SDI、SDO、SCLK和就绪信号;在某些情况下,可能没有就绪信号;这种接口可以在主模式或从模式下工作。通俗点说,就是看谁提供时钟信号。提供时钟的是主设备,另一个是从设备。
UART:属于最基本的异步传输接口,信号线只有Rx和Tx。基本数据格式为:起始位数据位奇偶校验位停止位。一位数据占用的时间称为波特率。
对于大多数MCU ,数据长度,数据校验方式,停止位长度和波特率可通过编程灵活设置。这种接口最常见的方式是与PC机的串口进行数据通信。
接口:I2C是飞利浦公司开发的数据传输协议。它也由两个信号实现:SDAT和SCLK。它最大的优点是可以在这条总线上连接多个设备,并且可以通过地址来识别和访问它们。I2C总线最大的一个优点就是通过IO口用软件实现非常方便。I2C总线传输的数据速率完全由SCLK控制,可快可慢。与UART接口不同,I2C总线有严格的速度要求。
看门狗:看门狗也是大部分MCU的基本配置。大多数单片机的看门狗只能允许程序复位它,但不能 关机。而有些MCU则以特定方式决定是否开启,比如Samsung KS57系列。只要程序访问看门狗寄存器,它就会自动开启并能 不要再关掉了。一般来说,看门狗的复位时间可以通过程序设置。Watchdog最基本的应用是为MCU提供因意外故障而崩溃的自我恢复能力。
单片机的学习技巧
任何MCU的基本原理和功能都是相似的。唯一不同的是其外围功能模块的配置、数量和指令系统。
对于指令系统来说,虽然看起来形式不同,但实际上只是符号不同而已。它们的含义、要完成的功能和寻址方式基本相似。
要了解一个MCU,首先需要知道它的ROM空间、RAM空间、IO口数量、定时器数量和定时方式、提供的外围电路、中断源、工作电压和功耗等。
了解了这些MCU的特性之后,接下来就是将所选MCU的功能与实际项目开发所需要的功能进行对比,明确目前需要哪些资源,哪些资源在本项目中没有用到。
对于项目中需要用到但所选MCU没有提供的功能,需要仔细了解MCU的相关信息,以便用间接的方法实现。例如,如果开发的项目需要与PC的COM口通信,而选用的MCU没有提供UART口,可以通过外部中断来实现。
对于项目开发所需的资源,需要仔细理解和阅读其手册,不必要的功能模块可以忽略或浏览。对于单片机学习来说,应用是关键,也是主要目的。
定义好MCU的相关功能后,就可以开始编程了。
对于初学者或者第一次使用这款单片机的设计师来说,可能会有很多对单片机功能的模糊描述。对于这样的问题,有两种方法可以解决。一种是编写专门的验证程序,理解数据中描述的功能;另一个可以暂时忽略,单片机程序设计按其目前的理解写,留待调试时修改完善。前一种方法适合时间比较宽松的项目和初学者,后一种方法适合有一定单片机开发经验的人或者项目进度比较紧迫的时候。
千万不要花特别的时间去理解说明书。指令系统只是一个逻辑描述的符号。编程时只能根据自己的逻辑和程序的逻辑要求去查相关指令。而且随着编程的进展,你会对指令系统越来越熟练,甚至不自觉的背下来。
单片机编程
单片机的编程和PC机的编程有很大的不同。虽然基于C的单片机开发工具越来越流行,但是对于一个高效的程序代码和喜欢用汇编的设计人员来说,汇编语言仍然是最简洁有效的编程语言。
对于单片机的编程,其基本框架可以说是大体一致的,一般分为三个部分:初始化部分、主程序循环体和中断处理程序,解释如下:
初始化:对于所有单片机程序的设计来说,外化是最基本也是最重要的一步,一般包括以下内容:
屏蔽所有中断并初始化堆栈指针:初始化部分一般不会 我不想有任何打扰。
清空系统的RAM区域和显示内存:虽然有时候可能不完全需要,但是从可靠性和一致性的角度,特别是为了防止意外错误,建议养成良好的编程习惯。
IO口初始化:根据项目的应用需求,设置相关IO口的输入输出模式,设置输入口的上拉或下拉电阻;对于输出端口,需要设置其原始电平输出,以防止不必要的错误。
中断设置:打开项目需要的所有中断源,设置中断的触发条件,不使用的不必要中断必须关闭。
其他功能模块的初始化:所有需要使用的MCU外围功能模块都必须根据项目的应用需求进行设置,如UART通信、波特率、数据长度、校验模式、停止位长度等。而对于编程器定时器,必须设置其时钟源、分频数和重载数据。
参数外化:MCU的硬件和资源外化后,下一步就是初始化程序中用到的一些变量和数据。这部分的初始化需要根据具体项目和程序的整体安排来设计。对于一些使用EEPROM保存预设项目数的应用,建议在初始化时将相关数据复制到MCU的RAM中,以提高程序对数据的访问速度,降低系统功耗。
主程序循环:大多数单片机都是长时间连续运行的,所以它的主程序基本上是以循环的方式设计的。对于有多种工作模式的应用,可能会有多个循环体,通过状态标志进行转换。对于主程序体,通常主要安排以下模块:
计算程序:计算程序一般比较耗时,所以坚决反对任何中断,尤其是乘除法。
传输程序:主要用于带外置LED和LCD驱动器的应用。
中断处理程序:中断程序主要用于处理实时性要求高的任务和事件,如外部突发信号检测、按键检测与处理、定时计数、LED显示屏扫描等。
一般来说,中断程序应该保持代码尽可能的简洁。对于不执行 需要实时处理,可以在中断中设置触发标志,然后主程序会执行具体的事务——这一点非常重要,尤其是对于低功耗低速的MCU,必须保证所有中断的及时响应。
对于不同任务体的安排,不同MCU # 039的处理方式也不同。
比如对于低速低功耗MCU的应用,考虑到这些项目都是手持设备和普通的LCD显示器,对按键和显示器的响应要求实时性很高。因此,一般采用定时中断来处理按键动作和数据显示。对于高速MCU,如Fosc》1MHz的应用,由于此时MCU有足够的时间执行主程序循环,所以各种触发标志只能在相应的中断中设置,所有任务都可以在主程序中执行。
在单片机的编程中,还需要特别注意防止在中断和主程序体中同时访问或设置同一个变量或数据。有效的防范方法是将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行数据的相关操作;在其他程序中,只对需要处理数据的地方设置触发标志。——这可以确保数据的执行是可预测的和唯一的。
王者之心2点击试玩