单片机简介
数字电路简介
在一个控制系统中, 单片机是电路的一部分, 单片机中的程序是针对其所在的电路编写
的。因此,要对单片机编程并实现一定的功能,必须了解整个系统的电路图。单片机编程是
针对某个特定的电路进行的单片机编程是针对某个特定的电路进行的, 这一点和普通的编程不一样。 编程时很可能要经常参照电路图。与单片机直接相关的电路大都是数字电路。 数字电路各部分的功能十分明确, 因此相对比较容易掌握。
简单地说,数字电路就是只有“0”和“1”两种信号的电路。判别信号究竟是“0”还
是“1”是通过电压的大小(常称作“电平” )来判断的。不同的数字器件的电平判断标准是
不一样的。常用的数字器件以高电平(超过某一阈值的电平)作为逻辑“1” ,以低电平(低
于某一阈值的电平)作为逻辑“0” 。其中高电平阈值大于低电平阈值,处于高电平阈值与低
电平阈值之间的电压是无效的。 高电平阈值与低电平阈值的具体值与数字器件的供电电压有
关,如 AT89S51 单片机的高电平阈值为(0.2Vcc+0.9)V,低电平阈值为(0.2Vcc-0.1)V,
其中 Vcc 为单片机的供电电压。 早年常用的数字器件的额定供电电压为 5V, 现在 3.3V、 1.8V
等电压的数字器件已经大量使用了。在 Easy 51 Kit Pro 中,我们仍使用 5V 供电的单片机。
另外,还有一种 RS-232 电平标准,以-12V~-5V 作为逻辑“1” ,以 5V~12V 作为逻辑“0” 。
电脑上的串口都符合 RS-232 标准。还有一个“地”的概念。在电路中“地”并不是通常意义中的地,而是指电路中的一点,这一点的电压被人为地规定为 0V。
MCS-51 单片机简介
目前生产单片机产品的公司非常多, 当中较有影响力的有 intel 公司推出的 MCS-51 系
列等。很多公司的产品都是与 MCS-51 架构兼容(MCS-51 compatible)的。本资料中采用的
atmel 公司的 AT89C51/52 或 AT89S51/52 单片机,就是兼容 MCS-51 架构的单片机。
Atmel 公司的 AT89C51( 以后简称“C51”)、AT89C52( 以后简称“C52”)、AT89C2051
( 以后简称“C2051”)以及 C51、C52 的换代产品 AT89S51( 以后简称“S51”)、AT89S52
( 以后简称“S52”)容易上手、价格低廉(不超过 10 元/片)、资料丰富,是初学者入门
时广泛采用的单片机。
C51 拥有 4096 字节(1 字节=8 位)的片内程序存储器、128 字节的 RAM、32 个 I/O 口、
两个定时器、6 个中断源、一个串口等。C52、C2051 的资源与 C51 差别不大,其中 C52 的片
内程序存储器为 8192 字节、RAM 为 256 节、定时器有 3 个,其它与 C51 一样; C2051 的片
内程序存储器为 2048 字节、I/O 口只有 15 个,另比 C51 多了一个模拟比较器,工作电压范
围比较宽,为 2.7V~6V(C51/52、S51/52 为 4.5~5.5V),其它与 C51 一样。
I/O、 定时器、 中断、 串口等资源的用法在后面有详细介绍。 这里只对程序存储器与 RAM
作一下说明。单片机程序代码经过编译(C 程序)或汇编(汇编程序)后,要把编译或汇编
得到的代码文件(一般来说编译得到 hex 格式文件、汇编得到 bin 格式文件)烧写到单片机
内,存放这个程序的地方就是程序存储器。显而易见,单片机的程序存储器越大,我们就可
以把越大、越复杂的程序放进去。如果我们编写的程序太大,那么单片机的程序存储器就有
可能会放不下这个程序。这时,解决办法就只有精简代码、外接程序存储器(前提是所用的
单片机支持使用外部程序存储器)或采用程序存储器容量更大的单片机。RAM 是单片机程序
运行时存放变量的地方,常量也可以放在 RAM 中。C51 中的 RAM 大小为 128 字节,这就是说
单片机程序中最多只能同时存在 128 个 unsigned char 型的变量或 64 个 unsigned int 型的
变量(在 Keil 环境中,int 型变量的长度为 16 位,这与 VC 的 32 位不一样)或者是相应的
中国科学技术大学业余无线电协会 各种不同类型变量的组合。 可以看出, 单片机程序所允许的规模比 Windows 或其它操作系统环境下的程序要小得多。编写单片机程序时一定要注意不要滥用资源。
S51 与 S52 分别是 C51、C52 的换代产品。从用户的角度看,S5x 单片机比相对应的 C5x
单片机多了看门狗与在线编程 (ISP) 功能, 另外最高运行速度有所增加 (C5x 最高支持 24MHz
的时钟频率, 而 S5x 最高支持 33MHz 的时钟频率, 但市面上比较容易买到的 S5x 单片机仍只
最高支持 24MHz 的时钟频率)。看门狗的使用在后面会有详细介绍,我们来看看单片机的在线编程(ISP)功能。要把程序烧写到 AT89C 系列单片机中, 最常用的做法是把单片机插入专用的编程器中, 通过编程器把程序烧到单片机里。 这样做的麻烦之处是在调试程序时, 编程者对程序作出的每次修改,都要把单片机从电路中拔出来,插到编程器,烧好后又要把单片机重新插回电路板。可以想
象,这种工作是吃力不讨好的。利用 S5x 单片机的 ISP 功能,我们就无须来回插拔单片机,
只要在电路中把单片机的 ISP 编程引脚接出来, 并且这几个引脚所接的外围电路对 ISP 没有
影响,就可以用 ISP 编程器对单片机进行烧写了。另外,支持 AT89C 系列单片机的编程器成
本要比 ISP 下载线高最少几倍。一根并口 ISP 下载线的成本仅几元钱。
除了 S 系列、C 系列外,atmel 公司的 MCS-51 兼容产品也有其它系列,它们的主要区
别在于供作电压范围,在此就不作介绍了。
值得注意的是,一片单片机可以反复擦写的次数是有限的,atmel 的 C 系列、S 系列单
片机的声称可重复擦写次数为 1000 次。
下面以 S52 为例,对其引脚功能一一作出说明。C51、C52 以及 S51 的引脚功能与 S52
大致相同,如有遇到不同的地方会用 粗斜体字 特别说明。
单片机程序指令的执行是以振荡器的振荡来驱动的。在MCS-51架构中,每12个振荡器
周期组成一个指令周期(或称机器周期)。单片机执行指令的时间是以指令周期为单位的。
不同指令的执行时间可能是不同的,一条指令的执行时间最短为一个指令周期。
在MCS-51架构中,每12个振荡器
周期组成一个指令周期(或称机器周期)。单片机执行指令的时间是以指令周期为单位的。
不同指令的执行时间可能是不同的,一条指令的执行时间最短为一个指令周期。因此,单
片机所接的振荡器频率越高,它执行指令的速度就越快。
型号同样为AT89S52的芯片,在其后面还有频率编号,有24MHz和33MHz等可选。读者在
购买和选用时要注意了。 如AT89S52 24PC就是最高振荡频率为24MHz,40P6封装的普通商用芯
片。单片机芯片后缀的详细含义可见相应单片机数据手册的Ordering Information。
复位 RST 9
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将
使单片机复位,只要这个引脚保持高电平,单片机便一直处于复位状态。复位后P0~P3口均
置1,引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位引脚由高电平
变为低电平时,芯片从ROM的00H处开始运行程序。复位操作不会对内部RAM有所影响。常用
的复位电路如图2.4所示。当单片机上电时,由于电容的作用,RST引脚会处于短暂的高电平
状态,直到电容充电到一定程度时,RST引脚的电平会被8.2K的电阻拉低,单片机开始运行
程序。图中的按键为手动复位按键,当按下复位按键后,RST引脚会被1K的电阻上拉至高电
平, 单片机复位, 按键松开后, RST恢复低电平, 单片机重新从程序存储器的00H处运行程序。
手动复位按键在单片机的最小系统中并不是必须的,但对单片机的复位控制会方便些。
输入输出引脚
(1)P0端口[P0.0~P0.7] P0是一个8位漏极开路型双向I/O端口, 端口置1 (对端口写1)
时作高阻抗输入端端口置1 (对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。 P0端口要外接上拉电阻。
(2)P1端口[P1.0~P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱
动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存
储器编程时,接收低8位地址信息。除此之外P1端口还用于一些专门功能,
3)P2端口[P2.0~P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱
动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存
储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口
送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4)P3端口[P3.0~P3.7] P2是一个带有内部上拉电阻的8位双向I/0端口。 输出时可驱
动4个TTL。 端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存
储器编程时,接控制信息。除此之外P3端口还用于一些专门功能,
其它的控制或复用引脚
(1)ALE/-PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的
低位字节。 即使不访问外部存储器, ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频
率的1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash存储器编程时,这个引脚
用于输入编程脉冲PROG。
(2)PSEN 29 该引脚是外部程序存储器的选通信号输出端。 当S52由外部程序存储器取
指令或常数时,每个机器周期输出2个脉冲即两次有效。但访问外部数据存储器时,将不会
有脉冲输出。
(3)-EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。
要使S52只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。当使
用内部的程序存储器时,此引脚应与Vcc相连。当使用内部的程序存储器时,此引脚应与Vcc相连。对Flash存储器编程时,用于施加Vpp编程电压。
C2051 的引脚功能与 C51 相仿,在此不另外介绍了