51单片机入门基础知识

2022-12-07  

单片机简介

1.什么是单片机

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。


单片机结构框图如下:

2.单片机能做什么

小到玩具车、电子手表,大到航天器、机器人,无论是数据采集、工业控制还是智能化仪器仪表及通信设备,到处都有单片机的身影。其主要的应用领域如下:(1)在机电一体化中的应用。单片机与传统的机械产品结合使传统的机械产品结构简化、控制走向智能化,让传统的产品向新一代的机电一体化产品转变,这是机械工业发展的方向。(2)在监控系统中的应用。单片机应用于仪器仪表设备中促使仪器仪表向数字化、智能化、多功能化和综合化等方向发展。单片机的软件编程技术使长期以来测量仪表中的误差修正、线性化的处理等问题迎刃而解。(3)在测控系统中的应用。单片机可以用于各种工业控制系统、自适应控制系统、数据采集系统等。例如,工业上的锅炉控制、电机控制、车辆检测系统、水闸自动控制、数控机床及军事上的兵器装备等。(4)在智能接口中的应用。计算机系统,特别是较大型的工业测控系统采用单片机进行接口的控制管理,单片机与主机并行工作,可大大提高系统的运行速度。


3.新手学习什么单片机

新手推荐51系列单片机。该系列的单片机相关的学习资料比较多,网上也比较好找。 51 系列单片机在当前市场份额比较大,在很多产品中都能找到它的身影。同时, 51 系列单片机也是学习 ARM、 DSPFPGA 等高端MCU的基础。


4.单片机硬件结构

(1)单片机内部三大资源

Flash——程序存储空间,早期单片机是 OTPROM:在早期的单片机中,主要是用 OTPROM(One Time Programmable Read-Only Memory,即一次可编程只读存储器)来存储单片机的程序,程序只能写入一次。随着技术的发展, Flash 以其可重复擦写且容量大成本低的优点成为现在绝大多数单片机的程序存储器。对于单片机来说 Flash 最大的意义是断电后数据不丢失。

RAM——数据存储空间:RAM 用来存储程序运行过程中产生的和需要的数据,关电后数据丢失。它的优点,第一是读写速度非常快,第二是理论上是可无限次写入的,即寿命无限,不管程序怎么运行怎么读写它都不会坏。

SFR——特殊功能寄存器:单片机有很多很多功能,每个功能都会对应一个或多个 SFR,我们就是通过写程序控制 SFR 的读写来实现单片机的多种多样的功能的。

(2)标号信息


以下介绍以STC89C52RC 单片机为例:

芯片上的全部标号为 STC89C52RC、 40I-PDIP40、 1428HBS967.C90C,标识解释如下所示。

STC——芯片的生产公司, STC 表示宏晶公司。这个前缀常见的有 AT、P、 W、 SST 等。其中 AT 表示 Atmel 公司, P 表示 Philips 公司, W 表示 Winbond 公司,SST 代表 SST 公司。

8——该芯片是 8051 内核芯片。

9——芯片内部含有 Flash EEPROM 存储器。 其他如 80C51 中的 0 表示内部含有掩膜存储器( Mask ROM), 87C51 中的 7 表示内部含有紫外线可擦除 ROM( EPROM)。

C——该器件为 CMOS 产品。其他如 89LE52、 89LV52、 89LS52,其中的 LE、 LV、 LS表示低电压产品(通常它们的工作电压为 3.3V),89S52 中的 S 表示该系列的芯片带有 ISP 在线编程功能。

5——固定不变。

2——该芯片的内部程序存储空间的大小。 1 为 4 KB, 2 为 8 KB, 3 为 12 KB,也就是该数乘以 4 KB 就是该芯片内部程序存储空间的大小。 空间越大能装入的程序代码就越多。 当然,空间越大芯片的价格也会越高。因此在选择芯片时,要根据我们的需求进行合理选择,够用就可以。这个空间的大小跟单片机的其他性能不产生关联,不影响单片机的功能。

RC——STC 单片机内部 RAM 为 512 B,RD+表示内部 RAM 为1280B。

40——芯片外部晶振最高可接入 40 MHz。像 Atmel 的单片机这个数值一般是 24,表示外部最高晶振是 24 MHz。

I——产品级别。 I 表示工业级,温度范围为−40~85℃。其他如 C 表示商业级,温度范围为 0~70℃; A 表示汽车级,温度范围为−40~125℃; M 为军用级,温度范围为−55~150℃。

PDIP——产品封装型号。 PDIP 为双列直插式。其他如 PLCC 为带引线的塑料芯片封装;QFP 为塑料方型扁平式封装; PFP 为塑料扁平组件式封装; PGA 为插针网格阵列封装; BGA为球栅阵列封装。

40——引脚个数。

1428——本批芯片的生产日期是 2014 年的第 28 周。

(3)引脚功能介绍

注意:芯片的第 1 脚,一般会在芯片上标记出来,有的是一个小圆坑或是一个圆点,有的是整个芯片起始脚边的标记。找到第 1 脚后,其他引脚的序号,是按照俯视图从第 1 脚开始,逆时针方向顺序递增来进行编号的。

单片机的引脚大致可分为四类:

电源引脚: VCC、 GND。

② 时钟引脚: XTAL1、 XTAL2。

③ 控制引脚: RST、 PSEN 、 ALE/ PROG 、 EA /VPP。

④ I/O 引脚 : 4个8位并行 I/O 端口 P0、P1、P2、P3 ,共32个引脚。

VCC( 40 脚):单片机电源正极,不同类型单片机的接入电源电压会有不同,通常为+5V,如果是低压为+3.3V。大家在使用前,请查看单片机对应的数据手册。

GND( 20 脚):单片机电源负极,接地端。


XTAL1( 19 脚)、 XTAL2( 18 脚):时钟电路引脚。 XTAL1 接外部晶振和微调电容的一端,在片内它是振荡器反相放大器和时钟发生器的输入端。若使用外部时钟,该引脚必须接地。 XTAL2 接外部晶振和微调电容的另一端,在片内它是振荡器反相放大器的输出端。若使用外部时钟,该引脚接外部时钟的输入端。


RST( 9 脚):单片机复位引脚,持续时间超过两个机器周期的高电平引起系统复位。也就是说程序将从头开始运行。


PSEN ( 29 脚):外部程序存储器选通信号输出引脚,在读外部 ROM 时PSEN 低电平有效,以实现外部 ROM 单元的读操作。随着技术的发展,单片机的内部存储 ROM 越做越大,已经能满足使用需求,基本没人再去扩展外部 ROM。在设计电路时,该引脚一般悬空,不作使用。


① 内部 ROM 读取时, PSEN 不动作;

② 外部 ROM 读取时,在每个机器周期会动作两次;

③ 外部 RAM 读取时,跳过两个 PSEN 脉冲不会输出;

④ 外接 ROM 时,与 ROM 的 OE 脚相接。


ALE/ PROG ( 30 脚):具有两种功能,可以作为地址锁存使能端和编程脉冲输入端。当作为地址锁存使能端时为 ALE。当单片机访问外部程序存储器时, ALE 的负跳变将低8 位地址打入锁存。当访问外部数据存储器时,例如执行 MOVX 类指令, ALE 引脚会跳过一个脉冲。当单片机没有访问外部程序存储器时, ALE 引脚将有一个 1/6 振荡频率的正脉冲信号输出,该信号可以用于外部计数或电路其他部分的时钟信号。当作为编程脉冲输入端时为PROG ,在进行程序下载时使用。现在很多单片机在烧录程序时已不需要编程脉冲引脚往内部写程序。比如我们使用的 STC 单片机,它是通过串行口烧录的,使用更为简便。现在的单片机已带有丰富的 RAM 和更为简便的程序烧录方式,因此 ALE/ PROG 这个引脚已很少用到,我们了解即可。在设计电路时一般悬空,不作使用。


EA /VPP( 31 脚):具有两种功能。EA :程序存储器选择。 EA =1 时,单片机执行内部程序存储器的程序,当扩展有外部程序存储器时,在执行完内部程序存储器的部分程序后,自动执行外部程序存储器的程序。EA =0,单片机执行外部程序存储器的程序。


VPP:在内部程序存储器擦除和写入时提供编程脉冲。现在的单片机一般内部的 ROM 已经足够大,能满足我们的程序存储需求,所以 VPP 的功能一般不用。因此一般在设计电路时,此引脚始终给它接上高电平即可。


I/O 引脚 : STC89C52 共有 4 个 8 位并行 I/O 端口,分别为 P0、 P1、P2、 P3 口,共 32 个引脚。

P0 口( 39 脚~32 脚): P0 口是一个 8 位漏极开路的双向端口,分别为P0.0~P0.7 口,可独立控制。 P0 口在作为低 8 位地址/数据总线使用时不需接上拉电阻;作为一般的 I/O 口使用时,由于内部没有上拉电阻,在使用时需要接上拉电阻。一般选用 10kΩ 电阻作为上拉电阻。

P1 口( 1 脚~8 脚): P1 口是一个带上拉电阻的 8 位准双向端口,分别为 P1.0~P1.7 口,可独立控制,也可做输入或输出口使用。

P2 口( 21 脚~28 脚): P2 口是一个带上拉电阻的 8 位准双向端口, 分别为 P2.0~P2.7 口,可独立控制,可做输入或输出口使用,功能和 P1 口相似。

P3 口( 10 脚~17 脚): P3 口是一个带上拉电阻的 8 位准双向端口, 分别为 P3.0~P3.7 口,可独立控制。是一个双用途端口,可做输入或输出口使用,功能和 P1 口相似。它还具有第二功能,具体如表所示。

(4)最小系统

图 1-1

为什么称之为单片机最小系统呢?单片机最小系统,也叫做单片机最小应用系统,是指用最少的原件组成单片机可以工作的系统。单片机最小系统的三要素就是电源、晶振、复位电路,如上图所示。


1)电源

这个很好理解,电子设备都需要供电,就连我们的家用电器(手电筒^_^)也不例外。目前主流单片机的电源分为 5V 和 3.3V 这两个标准,当然现在还有对电压要求更低的单片机系统,一般多用在一些特定场合,在学习中我们不做过多的关注。我们所选用的 STC89C52,它需要 5V 的供电系统,我们的开发板是使用 USB 口输出的5V 直流直接供电的。从上中图可以看到,供电电路在 40 脚和 20 脚的位置上,40 脚接的是+5V,通常也称为 VCC 或 VDD,代表的是电源正极,20 脚接的是 GND,代表的是电源的负极。+5V 和 GND 之间还有个电容。


这个地方我们还要普及一个看原理图的知识。电路原理图是为了表达这个电路的工作原理而存在的,很多器件在绘制的时候更多考虑的是方便原理分析,而不是表达各个器件实际位置。比如原理图中的单片机引脚图,引脚的位置我们是可以随意放的,但是每个引脚上有一个数字标号,这个数字标号代表的才是单片机真正的引脚位置。一般情况下,这种双列直插封装的芯片,左上角是 1 脚,逆时针旋转引脚号依次增加,一直到右上角是最大脚位,我们现在选用的单片机一共是 40 个引脚,因此右上角就是 40(在表示芯片的方框的内部),如下图所示,大家要分清原理图引脚标号和实际引脚位置的区别。

图1-2

2)晶振电路

晶振,又叫晶体振荡器,从这个名字我们就可以看出来,它注定一生都要不停振荡的。

他起到的作用是为单片机系统提供基准时钟信号,类似于我们部队训练时喊口令的人,单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。STC89C52 单片机的 18 脚和 19 脚是晶振引脚,我们接了一个 11.0592M 的晶振(它每秒钟振荡 11,059,200 次),外加两个 20pF 的电容,电容的作用是帮助晶振起振,并维持振荡信号的稳定。


3)复位电路

在图 1-1 左侧是一个复位电路,接到了单片机的 9 脚 RST(Reset)复位引脚上,这个复位电路如何起作用我们后边再讲,现在着重讲一下复位对单片机的作用。单片机复位一般是 3种情况:上电复位、手动复位、程序自动复位。


假如我们的单片机程序有 100 行,当某一次运行到第 50 行的时候,突然停电了,这个时候单片机内部有的区域数据会丢失掉,有的区域数据可能还没丢失。那么下次打开设备的时候,我们希望单片机能正常运行,所以上电后,单片机要进行一个内部的初始化过程,这个过程就可以理解为上电复位,上电复位保证单片机每次都从一个固定的相同的状态开始工作。这个过程跟我们打开电脑电源开电脑的过程是一致的。


当我们的程序运行时,如果遭受到意外干扰而导致程序死机,或者程序跑飞的时候,我们就可以按下一个复位按键,让程序重新初始化重新运行,这个过程就叫做手动复位,最典型的就是我们电脑的重启按钮。


当程序死机或者跑飞的时候,我们的单片机往往有一套自动复位机制,比如看门狗,具体应用以后再了解。在这种情况下,如果程序长时间失去响应,单片机看门狗模块会自动复位重启单片机。还有一些情况是我们程序故意重启复位单片机。


电源、晶振、复位构成了单片机最小系统的三要素,也就是说,一个单片机具备了这三个条件,就可以运行我们下载的程序了,其他的比如 LED 小灯、数码管、液晶等设备都是属于单片机的外部设备,即外设。最终完成我们想要的功能就是通过对单片机编程来控制各种各样的外设实现的。


点亮LED

1. 了解普通发光二极管的参数,掌握限流电阻的计算方法。

LED ,即发光二极管,俗称LED小灯,它的种类很多,参数也不尽相同。二极管通常的正向导通电压为 1.8 V ~ 2.2 V,工作电流一般在 1 mA ~ 20 mA之间。其中电流在 1 mA ~ 5 mA之间变化时,随着通过LED的电流越来越大,肉眼可明显感觉LED小灯的亮度越来越强。当电流超过20mA时,LED就会存在烧坏的危险,电流越大,烧坏的可能性也就越大。

如上电路图,VCC代表接入电压,其电压值为5 V,发光二极管自身压降为2 V,那么此时 R34电阻上所能承受的电压则应该是 3 V。由上述中 LED所能允许通过的电流范围为 1 mA ~ 20 mA,此时就可以根据欧姆定律(R = U / I, R 代表电阻,U 代表电压, I 代表电流)计算出R34电阻的上下限的电阻值。


2.LED点亮原理

不同发光二极管正向导通电压不同,具体压降根据二极管查询,但同一特点是二极管发光正级电压必须大于负极电压。在原理图所示中二极管的正极连接一个电阻然后接到Vcc上,负极直接连接P20端口。Vcc为高电平,则P20端口为低电平,电阻在这里提供一个压降,避免D1端口两端电压过高同时限制电流过大。于是得到我们需要设置的参数,P20端口电压为0,即在Keil中需要设置的参数为P20电压为0。


3.代码

#include “reg52.h”   

                   //此文件中定义了单片机的一些特殊功能寄存器,调用头文件

 sbit led=P0^0;    //将单片机的P0.0端口定义为led,p是port的缩写

                   //此处LED接在单片机P0^0端口

void main()

{

    while(1)

    {

        led=1;  //P0.0端口设置为高电平

    }       

}

//补充:bit和sbit都是C51扩展的变量类型。sbit用法:sbit 变量名=地址值;在给某个引脚取名的时候经常会用到。

LED灯闪烁

1.C语言常用的预处理命令

typedef使用

typedef unsigned char u8;

typedef unsigned int u16;(后面要加分号)


2.延时函数

void delay(u16 i)//大约延时10us

{

    while(i--); 

}


3.代码

#include "reg52.h"          

typedef unsigned int u16;                    //预处理命令

typedef unsigned char u8;

    sbit led=P0^0;                       //端口定义

 

void delay(u16 i)                                   //大约延时10us

{

    while(i--);                                     

}

 

void main()                                            

{

    while(1)

    {

        led=0;                         //管脚置低电平

        delay(50000);             //大约延时0.5秒

                            led=1;                         //管脚置高电平      

        delay(50000);   

    }       

}  


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。