单片机基础知识是什么(学习单片机需要哪些基础知识)
单片机发展简史
单片机的历史不长,但发展很快。它的出现和发展大致与微处理器同步。自1971年英特尔首次推出4位微处理器以来,其发展大致可分为五个阶段。以下是对英特尔发展的介绍。s单片机
1971 ~1976
单片机发展的初级阶段。1971年11月,Intel首先设计了4位微处理器Intel 4004,每个芯片有2000个晶体管,它与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年,Intel推出MCS-96系列高性能16位单片机。由于其最新的制造工艺,芯片集成度达到了120000个晶体管/芯片。
1990年代
单片机在集成度、功能、速度、可靠性和应用领域都在向更高的水平发展。
单片机的分类及应用
单片机按其存储器类型可分为不带片内ROM和带片内ROM两种。对于没有片上ROM的芯片,外部EPROM应用前必须连接;片上ROM芯片可分为片上EPROM、掩膜片上ROM和片上Flash。
按用途可分为一般型和特殊型;根据数据总线的宽度和一次能处理的数据字节的长度,分为8位、16位和32位MCU。
目前国内应用最广泛的MCU市场是消费电子领域,其次是工业领域和汽车电子市场。电子消费包括家用电器、电视、游戏机、影音系统等。工业领域包括智能家居、自动化、医疗应用和新能源发电和配电。汽车领域包括汽车动力总成和安全控制系统。
MCU的基本功能
对于绝大多数的单片机来说,以下功能是最常见和最基本的。对于不同的MCU,描述方法可能不同,但本质基本相同:
定时器:定时器虽然种类繁多,但大致可以分为两类:一类是时间间隔固定的定时器,即其计时时间由系统设定,用户程序可以控制。系统只提供几个固定的时间间隔供用户选择,如32Hz、16Hz、8Hz等。这种定时器常见于4位单片机,可以用来实现时钟、定时等相关功能。
另一个是可编程定时器。顾名思义,计时器可以由用户控制的程序来计时。控制方法包括时钟源的选择、预分频的选择和预置数的设置。有的单片机同时具备这三个特点,有的可能是其中的一两个。这个定时器的应用非常灵活,实际用途千变万化。最常见的应用之一就是用它来实现PWM输出。
由于可以自由选择时钟源,该定时器通常与事件计数器结合使用。
IO端口:任何MCU都有一定数量的IO端口。没有IO口,单片机将失去与外界的通信通道。根据IO端口的配置,可以分为以下几类:
纯输入或纯输出端口:此IO端口由MCU硬件设计决定,只能输入或输出,不能通过软件实时设置。
直接读写IO口:比如MCS-51的IO口就属于这个IO口。执行读取IO口的指令时,为输入口;当执行写IO端口的命令时,它将自动成为输出端口。
编程设置输入输出方向:这类IO口的输入或输出由程序根据实际需要设置,应用灵活,可以实现一些总线级的应用,如I2C总线、各种LCD和LED驱动控制总线等。
对于IO口的使用,一定要记住:对于输入口,一定要有明确的电平信号,保证可以浮动;;对于输出端口,其输出的状态电平必须考虑其外部连接,需要保证待机或静态时没有拉电流或吸电流。
外部中断:外部中断也是大多数单片机的基本功能,一般用于信号的实时触发、数据采样和状态检测。中断模式由上升沿、下降沿和电平触发触发。外部中断通常通过输入端口实现。如果是IO口,其中断功能只有设置为输入时才会开启。如果是输出端口,外部中断功能会自动关闭。外部中断的应用如下:
外部触发信号的检测:一种是基于实时性要求,比如可控硅的控制,突发信号的检测。另一个是节约用电的需要。
测量频率时,为了保证信号不被遗漏,外部中断是最理想的选择。
数据解码:在遥控应用领域,为了降低设计成本,往往需要使用软件对各种编码数据进行解码,如曼彻斯特和PWM编码。
击键检测和系统唤醒:一般进入睡眠状态的MCU需要通过外部中断来唤醒,最基本的形式就是击键,通过击键的动作来改变等级。
通信接口:一般单片机提供的通信接口有SPI接口、UART、I2C接口等。它们描述如下:
SPI接口:该接口是大多数单片机提供的最基本的通信方式,其数据传输受同步时钟控制。信号包括SDI、SDO、SCLK和就绪信号;在某些情况下,可能没有就绪信号;该接口可以在主机模式或从机模式下工作。一般来说,就是看谁提供时钟信号。主器件提供时钟,另一个是从器件。
UART:属于最基本的异步传输接口,信号线只有Rx和Tx。基本的数据格式是:起始位数据位奇偶校验位停止位。一位数据占用的时间称为波特率。
对于大多数单片机,可以通过编程灵活设置数据长度、数据校验模式、停止位长度和波特率。这种接口最常见的方式是与PC机的串口通信。
接口:I2C是飞利浦公司开发的数据传输协议。这也是通过两个信号实现的:SDAT和SCLK。它最大的优点是可以在这条总线上连接多个设备,并且可以通过地址来识别和访问它们。I2C总线最大的一个优点就是通过IO口用软件实现非常方便。I2C总线传输的数据速率完全由SCLK控制,可快可慢。与UART接口不同,I2C总线有严格的速度要求。
看门狗:看门狗也是大多数MCU的基本配置。大多数单片机看门狗只能允许程序复位它,而不能关闭它。但是有些MCU是以特定的方式决定开启与否的,比如三星KS57系列。只要程序访问看门狗寄存器,就会自动开启,不能再关闭。一般来说,看门狗的复位时间可以通过程序设置。看门狗最基本的应用是在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的应用,考虑到这些项目是手持设备和普通的液晶显示器,对按键和显示器的响应要求实时性很高。所以一般用定时中断来处理按键动作和数据显示。对于高速MCU,如FOSC 1 MHz的应用,由于此时MCU有足够的时间执行主程序循环,所以各种触发标志只能设置在相应的中断中,所有任务都可以在主程序中执行。
在单片机编程中,要特别注意防止中断和主程序体中同时访问或设置同一个变量或数据。有效的防范方法是将这类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行数据的相关操作;在其他程序中,只在需要处理数据的地方设置触发标志。-这确保了数据的执行是可预测的和唯一的。
王者之心2点击试玩。