嵌入式开发电子信息工程每天一点单片机知识

扯会儿单片机开发:开始

2016-06-03  本文已影响1690人  兔子泽

前言

正在写作这篇文章的笔者是一名大四的软件工程学生,因为实习工作的需要,奉命研究单片机开发,所以我所扯的内容可能更适合跟我的情况比较相同的人。
如果你懂一些计算机原理和C语言开发,读下面的文章就不会很费劲。但如果不懂也没关系,那就交叉学习吧。


什么是单片机

从CPU说起。

CPU(Central Processing Unit, 中央处理器)

CPU由运算器、缓存器及总线构成。其中,运算器是指ALU(Arithmetic logic unit,算术逻辑单元),是CPU的核心;缓存器(Cache)可分为一级缓存、二级缓存和三级缓存,容量逐步递增,读写速度速度递减,成本递减;总线(Bus)分为数据、控制和状态三种。典型代表:8086

计算机(Computer)

依照冯诺依曼体系,计算机的五大组成部件为运算器、控制器、存储器、输入设备和输出设备。其中运算器和控制器合起来就是CPU;存储器又可以拆分为内存和外存;输入和输出设备就是键盘、鼠标、显示器等。

单片机(MCU, Microcontroller Unit)

是一种集成电路(IC, Integrated Circuit),其实应该叫微控制器,单片机这个名字主要是指之前的SCM(Single Chip Micyoco, 嗯… Micyoco是个神奇的单词)。而现在MCU是由SCM发展而来的,在高级点就可以说是SoC(System on Chip)。但后面的我所提到的单片机就是说MCU啦(因为我主要玩了下51单片机,这个是什么鬼我后面会说)。

说正事儿,单片机可以说是“浓缩的计算机”而不是“浓缩的CPU”,首先维基百科对他的解释是:

a small computer on a integrated circuit。

其次是因为它内部不仅仅有运算器、控制器和寄存器这种CPU三件套,他还常封装有RAM、ROM这种存储器部件,还有I/O口供人们编程及操作。所以总结来说,他有处理器、存储器和I/O,也算是符合冯诺依曼体系的“浓缩计算机”

封装 全称 中文名称
DIP Dual In-Line Package 双列直插式封装
PLCC Plastic Leaded Chip Carrier 带引线的塑料芯片封装
QFP Quad Flat Package 塑料方形扁平式封装
PGA Pin Grid Array Package 插针网络阵列封装
BGA Ball Grid Array Package 球栅阵列封装

这里不做详细描述,具体资料可点击封装名称进入查阅。


51单片机

你若是初学单片机,并且直接上网去查“单片机入门”之类的关键词,你绝对会看到“51单片机什么什么的”。谁知道51单片机是啥玩意,一开始我还以为51是个牌子,然后就开始吐槽满世界的广告啊,能不能安安静静的学个单片机啊。

什么是51单片机

百度百科的摘要是这样说的:

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。

维基百科是这样说的:

The page "51-MCU" does not exist. You can ask for it to be created, but consider checking the search results below to see whether the topic is already covered.

嗯,看来这个词是国内出来的。根据百度百科上的内容我们可以了解到如下信息

Key Value
指令集 8031
始祖 Intel 8004 单片机
处理器 8位
I/O线 32条

引脚

单片机的操作向来靠引脚,51系列也不除外。常见的是40脚DIP封装,以此为例说说以下几类引脚。

引脚 说明
Vcc 电源,用于引入正电平
GND 地线,引入负电平

关于电平的资料请参考:逻辑电平

引脚 说明
XTAL2 片内震荡电路输出端
XTAL1 片内震荡电路输入端
引脚 说明
RST 用于复位
PSEN 当有扩展ROM时用,在读外部ROM时,低电平有效
ALE/PROG 当有扩展RAM时用
EA/Vpp 当有扩展ROM时用,高电平读取内部ROM,低电平读取外部ROM
引脚 说明
P0 双向,8位,三态
P1 准双向,8位
P2 准双向,8位
P3 准双向,8位,拥有第二功能

P3第二功能定义:

标号 第二功能 说明
P3.0 RXD 串行输入口
P3.1 TXD 串行输出口
P3.2 INT0 外部中断0
P3.3 INT1 外部中断1
P3.4 T0 定时器/计数器0外部输入端
P3.5 T1 定时器/计数器1外部输入端
P3.6 WR 外部数据存储器写脉冲
P3.7 RD 外部数据存储器读脉冲

扩展的关键字

单片机编程支持汇编和C,其他的我没用过也不太清楚。如果入门的话最好的选择就是C啦,首先你很有可能学过C,就算没学过也很好上手,去买本谭浩强的《C程序设计》吧。

除了标准的ANSI C关键字外,单片机编程还扩展了如下几个类型的关键字:

关键字 说明
bit 声明一个位标量或位类型函数
sbit 声明一个可位寻址变量,必须定义为外部变量
关键字 说明
sfr 声明一个特殊功能寄存器,必须定义为外部变量
sfr16 声明一个16位的特殊功能寄存器,必须定义为外部变量
关键字 说明
data 直接寻址的内部数据存储器
bdata 可位寻址的内部数据存储器
idata 间接寻址的内部数据存储器
pdata 分页寻址的外部数据存储器
xdata 外部数据存储器
code 程序存储器
关键字 说明
interrupt 定义一个中断函数
reentrant 定义一个再入函数
using 定义芯片的工作寄存器

STC89C52

我的第一个实体单片机开发,就是这款了,STC89C52,可以说是增强型8051单片机。来,先看一下它的配置:

Key Value
核心 MCS-51
最高运作频率 35MHz
关键字 说明
I/O 39
工作温度 商业级:0°C75°C;工业级:-40°C85°C
封装 DIP
关键字 说明
RAM 512B
ROM 8KB
EEPROM 4KB
关键字 说明
定时器 3个
串口 1个,全双工
外部中断 4个
看门狗 支持
内置复位 支持
ISP/IAP 支持
关键字 说明
掉电模式 支持
空闲模式 支持

我的这款的具体型号为:STC89C52_35I_PDIP40_1550HHT352.C90C
关于标识命名规则请参阅:STC全系列芯片命名规则说明


软件准备

既然要编程,我们就需要开发环境,你可以选择Keil,也可以选择加载Keil插件的Eclipse。
代码写好后,通过编译器编译成单片机可以识别的机器码。机器码通常会保存为.hex文件,这个文件可以用那些十六进制文件查看器查看。这个文件的数据要写入到单片机的程序存储器中,通常为一个ROM。通常买的开发板都会集成串口及其芯片,还有配套的下载软件。你只需要安装好它的串口芯片的驱动程序,然后用下载器直接下载就好。如果是自己焊的板子就会麻烦一些了。这里不做说明,因为笔者还没干过。
还有一种就是通过Proteus模拟,在没有实体板的情况下可以考虑这种方式。Proteus可以模拟单片机的逻辑线路和演示效果。向里面的逻辑单片机下载程序的话,更是十分方便,在Proteus内可以很方便的操作完成。若是要模拟单片机与PC通信,那你就需要一个模拟串口连接的程序了---VSPD(Virtual Serial Port Driver)。

程序 说明
Keil 单片机开发的IDE,支持编译c、asm、c++。
单片机串口驱动 用于让计算机识别单片机
Proteus 模拟集成电路,可以演示效果
VSPD 模拟串口连接
程序下载程序 用于将编译好hex文件下载到单片机

一个软工狗的总结

作为一个软工狗,我对我们专业的理解是更专注于一个软件的工程项目的始终而不是技术实现,偏向于“工”。而单片机开发是更加贴近计算机底层的一种开发,更偏向于“理”,而且也不会采用面向对象的思想。所以,比起之前所做的网页开发也好,客户端开发也罢,都显得更加不友好。

我很推荐软工狗们尝试单片机开发,因为这可以让你对计算机原理和底层有更深的认识,还可以体会到设计并实现各种DIY小器件的乐趣。望各位就着汗水尽情释放创造力吧!

玩的开心~

上一篇 下一篇

猜你喜欢

热点阅读