什么是单片机?用专业语言讲,单片机就是一块硅片上集成的微处理器、存储器及各种输入/输出接口的芯片,这样一块芯片就具有了计算机的属性,因此被称为单片微型计算机,简称单片机(MCU)。
国内很多厂商都有生产单片机,由于厂商及芯片型号太多,我就不一一举出了。
但是当我们看到其标识的时候,希望能知道其解释:如 STC89C51RC-DIP
STC——前缀,表示芯片为STC公司生产的产品。
8——表示该芯片为8051内核芯片。
9——表示内部含Flash E^2PROM存储器,0表示内部含Mask ROM(掩模ROM)存储器,7表示内部含EPROM存储器(紫外线可擦除ROM)。
C——表示该器件为COMS产片,LV和LE表示为该芯片为低电压产片(通常为3.3V电压供电),S表示该芯片含有可串行下载功能的Flash存储器,既具有ISP可在线编程功能(在线系统编程一种无需将存储芯片(如 EPROM)从嵌入式设备上取出就能对其进行编程的过程,简称ISP)。
5——固定不变
1——表示芯片内部程序存储空间的大小,1为4KB,2为8KB,3为12KB。
RC——STC单片机内部RAM(随即读写存储器)为512B,RD+表示内部RAM为1280B。
DIP——表示封装型号,双列直插式封装。
知识点:芯片上标号对应温度范围
C:表示商业用产品,温度范围为 0°C ~ +70°C。
I:表示工业用产品,温度范围为 -40°C ~ +85°C。
A:表示汽车用产品,温度范围为 -40°C ~ +125°C。
M:表示军用产品,温度范围为 -55°C ~ +150°C。
知识点:芯片封装简介
DIP:双列直插式封装。
PLCC:带引线的塑料芯片封装。
QFP:塑料方型扁平式封装。
PFP:塑料扁平组件式封装。
PGA:插针网格阵列封装。(计算机的CPU用的就是这种封装)
BGA:球栅阵列封装。
在这里我只是简单的说一下有什么封装,详细的图和资料可以自己去拓展。
这是51单片机的PDIP封装引脚图
我简单的说一下每个引脚的,按其功能类别将它们分为三类:
1、电源和时钟引脚。如Vcc、GND、XTAL1、XTAL2。
2、编程控制引脚。如%20RST、~PSEN、ALE/~PROG、~EA/Vpp。
3、I/O口引脚。如%20P0、P1、P2、P3,4组8位I/O口。
Vcc(40脚)、GND(20脚)——单片机电源引脚。
XTAL1(19脚)、XTAL2(18脚)——外接时钟引脚。
RST(9脚)——单片机的复位引脚。
~PSEN(29脚)——程序存储器允许输出控制端。
ALE/~PROG(30脚)——在单片机扩展外部RAM时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。
~EA/Vpp(31脚)——~EA接高电平时,单片机读取内部程序存储器。当扩展有外部ROM时,当读取完内部的ROM后自动读取外部ROM。~EA接低电平时,单片机直接读取外部(ROM)。
P0口(39脚~32脚)——双向8位三态%20I/O%20口,每个口可独立控制,且需要加上拉电阻。
P1口和P2口(1脚~8脚%20和%2021脚~28脚)——准双向8位%20I/O%20口,每个口可独立控制。
P3口(10脚~17脚)——准双向8位%20I/O%20口,每个口可独立控制。作为第二功能使用的时候:
RXD——串行输入口;
TXD——串行输出口;
~INT0——外部中断0;
~INT1——外部中断1;
T0——定时器/计数器0%20外部输入端;
T1——定时器/计数器1%20外部输入端;
~WR——外部数据存储器写脉冲;
~RD——外部数据存储器读脉冲。
这是一些对单片机芯片的一些简单了解,如果想深入了解可以去购买一些书籍去深入学习。由于本人学的是软件工程,在一些方面了解的程度可能没有机电、电气的那么深入,所以我分享的一些学习资料都是一些我认为这个专业需要知道的知识。
这是一个最小系统的电路图,大家可以按照这个电路图去焊接一个最小系统。
里面包含的元件有:插座,51芯片,10K的上拉电阻,30pF电容,11.0592M的晶振,开关,LED指示灯,1K电阻,USB口。
这是我焊的一个最小系统,大家可以按照这样的排线来焊接一个练练手。
前面我给大家分享了一些基本的单片机的知识,那么下面我会说一些关于电平特征、二进制的逻辑运算和C51中的基础知识,在最后也会告诉大家怎么去使用单片机程序常用编译软件Keil。
单片机是一种数字集成芯片,数字电路中只有两种电平:高电平和低电平。
常用的逻辑电平有:TTL、COMS、LVTTL、ECL、PECL、GTL、RS-232、RS-422、RS-485、LVDS等。
其中TTL和COMS的逻辑电平按典型电压可分为四类:5V类型,3.3V类型,2.5V类型和1.8V类型。
5V TTL 和 5V COMS是通用的逻辑电平;3.3V 、2.5V 和 1.8V 的逻辑电平被称为低电压逻辑电平,常用的为LVTTL电平;ECL/PECL 和 LVDS 是差分输入/输出;RS-422/485 和 RS-232 是串口的接口标准,RS-422/485 是差分输入/输出,RS-232是单端输入/输出。计算机的串口为RS-232C电平,其中高电平为-12V,低电平为+12V,为负逻辑电平。
TTL电平信号用的最多,数据表示通常采用二进制,+5V 等价于逻辑1,0V 等价于逻辑0,这被称为TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。CMOS电平Vcc可达12V,CMOS电路输出高电平约为0.9Vcc,而输出低电平约0.1Vcc。CMOS电路中不使用的输入端不能悬空,否则会造成逻辑混乱。
TTL和CMOS的逻辑电平转换:
这里要注意的是 CMOS电平能驱动TTL电平,但TTL电平不能驱动CMOS电平,需要上拉电阻。
常用逻辑芯片的特点如下:
74LS系列:TTL输入:TTL 输出:TTL
74HC系列:CMOS输入:CMOS输出:CMOS
74HCT系列:CMOS输入:TTL输出:CMOS
CD4000系列:CMOS输入:CMOS输出:CMOS
单片机、DSP、FPGA之间引脚能否直接相连可以参考一下这个方法:
一般来说,同电压的是可以相连的,不过最好还是好好查看芯片技术手册上的VIL(逻辑电平0的输入电压)、VIH(逻辑电平1的输入电压)、VOL(逻辑电平0的输出电压)、VOH(逻辑电平1的输出电压)的值,看是否能够匹配。
二进制的逻辑运算:与、或、非、同或和异或
与:运算符“&”,规则 0&0=0,0&1=0,1&0=0,1&1=1;
或:运算符“|”,规则 0&0=0,0&1=1,1&0=1,1&1=1;
非:运算符“!”,规则 !0=1,!1=0;
同或:运算符“⊙“,规则 0⊙0=1,0⊙1=0,1⊙0=0,1⊙1=1;
异或:运算符”⊕“,规则 0⊕0=0,0⊕1=1,1⊕0=1,1⊕1=0;
这些我想很多人都知道了,在这里我就不详细说。
那么接下来我们说一下C51中的基础知识,单片机开发大多都是用C语言编程的,我们需要知道一些关于C语言方面的知识,但是在单片机中的要求的C语言知识会比平时我们知道的C语言有所拓展,所以我们用C51来区分:
C51中的基本数据类型:
无符号字符型: unsigned char
有符号字符型: char
无符号整型: unsigned int
有符号整型: int
无符号长整型: unsigned long
有符号长整型: long
单精度实型: float
双精度实型: double
位类型: bit
C51数据类型扩充定义
单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般我们会根据寄存器功能的不同给寄存器赋予各自的名称,当我们需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的过程实际就是将这个寄存器在内存中的地址编号赋给这个名称,这样编译器在以后的程序中才可认知这些名称所对应的寄存器。而这些声明已经包括在一个叫”reg51.h“中了。
sfr——特殊功能寄存器的数据声明,声明一个8位的寄存器。
sfr16——16位特殊功能寄存器的数据声明。
sbit——特殊功能位声明,也就是声明某一个特殊功能寄存器中的某一位。
bit——位变量声明,当定义一个位变量时可使用此符号。
C51中常用的头文件
通常有reg51.h、reg52.h、math.h、ctype.h、stdio.h、stdlib.h、absacc.h、intrins.h
C51中的运算符
+ - * / ++ -- % > >= < <= == != && || ! & | ^ ~ >> <<
这些跟C语言里面的运算符是一样的。
C51中的基本语句
if 选择语句
while 循环语句
for 循环语句
switch/case 多分支选择语句
do-while 循环语句
关机C语言的语法细节,可以去找一本关于C语言的书籍去阅读。
学习单片机应该要掌握:
1)掌握单片机最小系统能够运行的必要条件。
①电源
②晶振
③复位电路
2)掌握对单片机任意I/O口的操作。
①输出控制电平高低
②输入检测电平高级
3)定时器:重点掌握最常用的方式2。
3)中断:掌握外部中断、定时器中断、串口中断。
4)串口通信:掌握单片机之间通信、单片机与计算机之间的通信。
接下来呢,我会以图文的方式告诉大家怎么用编译软件Keil。
首先我们先打开这一个软件。
选择 Project 菜单里面的 New uVision Project,出现一个保存的框,选择你要保存的位置和名称,然后确定。
确定后出现一个选择框,在这里我们选择 Atmel ,然后再选择里面的 AT89C52,选择OK。
这时我们选择File菜单下面的一个白色图标,新建一个文档。
然后选择File 菜单里面的 Save 按钮保存,记得保存为后缀为 .c 文件,且最好是保存到和工程的同一目录下。
保存完双击Source Group1,把保存的c源文件添加进来。
这样就添加完成了。
那么下面我会告诉大家怎么去编译c源文件。
我们选择 Target Options的按钮。
选择Output 选项,把 Create HEX File 选项的钩打上,按OK确定。
然后按 Rebuild 按钮,对源文件进行编译。
编译通过后会生成后缀为hex的文件,这个文件就是下载到单片机的文件。
完毕!
下面说说:
这是单片机初学者经常问的问题。对于这个问题,我想没有人敢下定论。因为每一种单片机各有所长,都适用于其所能充分发挥作用的领域,不存在优差之分。学单片机应该先学51单片机,学会了51单片机再去学其他单片机,这是学习单片机过来人的同感,也是公认的学习方法。为什么要先学51单片机?因为51单片发展最早,应用最广泛,特别是I/O口的操作非常简单,而且相关的学习资料最多、教材最成熟,学习起来得心应手,入门很快。有了这个基础再去学习其他单片机那就是小菜一碟了,只是对着芯片数据手册设置寄存器罢了,快则一两个星期,多则一个月就能掌握另一种单片机了。如果一开始就选择非51单片机学习,那将是“路漫漫其修远兮,你将艰难而求索!”
那学51单片机用C语言还是汇编语言好?当然是C语言了。因为:1.C语言是高级语言,代码移植性好,易于维护;2.编程灵活,随心所欲;3.语言层次分明,思路清晰,可读性强。4. C语言是目前最流行的单片机编程语言,例程代码多,便于参考,单片机技术发展之快,应用之广,学习群体日益庞大,这和keil C51开发环境的问世是分不开的。5.C语言是大众编程语言,是其他编程语言的基础,学会了C语言,对于进一步深造的选择就很自由了。汇编语言是早期单片机学习使用的语言,优点是执行指令比C语言稍快外,其他方面笔者不敢恭维。
学会51单片机以后,就可以根据你从事的工作或者你的目标选择以下一种或多种继续深造。
1.AVR单片机-----速度快,一个时钟周期执行一条指令,而普通的51单片机需要12个时钟周期执行一条指令。当然,Atmel公司出品的AT89LP系列单片机也是一个时钟执行一条指令,但目前还未普及。AVR单片机比51单片机多了USB通信模块、SPI通信模块、I2C通信模块、PWM模块、AD转换模块等,但在C语言编程方面对I/O的操作比51麻烦得多。
2.PIC单片机------品种齐全,应用领域广泛,片内资源也很丰富,也是很受欢迎的单片机。比51单片机多SPI通信模块、I2C通信模块、PWM模块、AD转换模块等片内资源。4个时钟周期执行一条指令,速度看似比51单片机快,事实上并非如此,PIC单片机最高时钟频率一般为8MHZ,而51单片机最高时钟频率可达到33MHZ 。速度上PIC单片机并不占优势,而抗干扰能力则也比51单片机略强。C语言编程方面对I/O的操作要比51麻烦。
3.MSP430单片机-----16位单片机,速度快,一个时钟周期执行一条指令,超低电压低功耗,适合用于电池供电设备。
4.Motorola单片机-----抗干扰能力极强,适用于恶劣环境,这是以降低速度为代价的。
5.DSP技术------用于音频、视频、通信等快速数字处理领域,速度超快,编程算法也比较复杂。
6.FPGA技术------难度和单片机差不多,应用领域逐渐广泛。
7.嵌入式系统-----应用于非PC机控制以外的复杂的智能控制系统,以及智能通信设备、掌上电脑、学习设备、娱乐设备等,应用领域也很广泛。学习难度也较大,需要有操作系统、硬件、驱动原理等方面的知识。山寨版的手机、掌上电脑等满街泛滥都是嵌入式系统发展惹的祸。
8.其他单片机,如德州仪器单片机,合泰单片机,NEC单片机等。
要说学哪一种单片机最有前途,笔者也不敢妄加断言。不管选择那一种,前途光明与否都由你的造诣深度来决定,精则兴,不精则废。