1.2 8051基础知识
例说51单片机(C语言版)(第3版)
“89S51”源自Intel公司的MCS-51系列,而目前所采用的8x51并不仅限于Intel公司所生产的,反倒是以其他厂商所发行的兼容芯片为主,如Atmel公司的89C51/89S51系列,其价格便宜,质量稳定,开发工具齐全,早就被学校或培训机构所接受。
在此先介绍8x51的基本知识,包括基本结构、引脚、基本电路及51系列等,其中很多数据最好要熟记,本书也会提供许多快速背记的技巧,让读者能在极短的时间里记住40个引脚、基本电路等。
1.2.1 8x51的结构
8x51单片机发展至今,虽然有许多厂商各自开发了不同的兼容芯片,但其基本结构并没有多大的变动,如下所示为标准的8x51结构(如图1-3所示)。
程序存储器ROM:内部4KB,外部最多可扩展至64KB。
数据存储器RAM:内部128B,外部最多可扩展至64KB。
4组可位寻址的8位输入/输出端口,即P0、P1、P2及P3。
一个全双工串行口,即UART;两个16位定时器/计数器。
5个中断源,即INT0、INT1、T0、T1、TXD/RXD。
111条指令码。
8x51为8位微控制器。8位指的是微控制器内部数据总线或寄存器一次处理数据的宽度。相对于目前个人计算机(PC)所用的CPU,早期的CPU从8088/8086到80286都是16位的CPU;而从80386到Pentium 3都属于32位的CPU。尽管如此,目前所采用的单片机微控制器仍是以8位为主,只有在特殊场合才会采用16位的单片机,如8096等。
通常存储器的操作是以字节(B)为单位的,“可位寻址”是存取存储器、寄存器或输入/输出端口时,可指定其中的一位,例如,要指定P0输入/输出端口中的bit 1,则指定为P0.1即可,如图1-4所示。
图1-3 MCS-51 内部基本结构图
图1-4 指定P0输入/输出端口中的一位
1.2.2 89C51/89S51的封装与引脚
89C51的元件封装方式有3种,除了这3种外,89S51的元件封装方式还多出了一种PDIP42元件封装,说明如下。
QFP封装
89C51/89S51的PQFP或TQFP(Thin Plastic Gull Wing Quad Flatpack)封装为扁平的44个引脚表贴式封装,这种封装的体积很小,成本较低,适合于机器粘贴,为目前商用的主流;但在学校或培训机构这是不太适用的。如图1-5所示,在俯视图里,左上方有记号者为第1脚,然后逆时针排列,分别为2~44脚,其中包括3个空脚,而相邻两个脚的间距为0.8mm,元件厚度(高度)为1.2mm。
图1-5 PQFP(TQFP)封装
PLCC封装
PLCC(Plastic J-Leaded Chip Carrier)封装也是89C51/89S51常用的封装方式,这也是一个44个表贴式引脚(SMT)的封装,其中包括4个空脚,而其引脚编号与QFP封装非常相似(兼容),如图1-6所示,在俯视图里,上面中间有个记号者为第1脚,然后逆时针排列分别为2~44脚,相邻两个脚的间距为0.05英寸(即1.270mm),元件高度(含引脚)为4.572mm。
图1-6 PLCC封装
一般地,这种表贴式的元件可直接粘着于电路板上,而不必钻孔(其引脚如图1-7所示)。在研发、实验或教学时,也可利用芯片管座,这样可缩短开发与生产的时间。
图1-7 PLCC 引脚
直插式封装PDIP42
89S51的直插式封装有两种,第一种是42个引脚双列直插式的封装(Plastic Dual Inline Package),简称PDIP42;第二种是40个引脚双列直插式封装,与89C51、MCS-51兼容,稍后说明。如图1-8所示,在双列直插式封装里,俯视图左上方有记号者为第1脚,然后逆时针排列分别为2~42脚。相邻两个脚的间距为1.588mm,元件长度为36.96mm,两排引脚的间距为13.97mm,元件厚度为4.826mm(不含引脚),与一般的面包板或IC芯片管座不符。
图1-8 PDIP42直插式封装
直插式封装PDIP40
89C51/89S51的第二种直插式封装为40个引脚双列直插式的PDIP40,这种封装与 MCS-51完全兼容。PDIP40与PDIP42除引脚数量不同外,尺寸差异也很大,PDIP40刚好可插在面包板或40引脚的芯片管座上,图1-9所示俯视图左上方有个记号者为第1脚,然后逆时针排列分别为2~40脚。相邻两个脚的间距为0.1英寸(即2.540mm),元件长度为52.578mm,两排引脚之间距为0.6英寸(即15.875mm),元件厚度为4.826mm(不含引脚),特别适用于学校、培训机构使用。不过,由于直插式封装体积较大,电路板制作成本较高,很少用在商品里。
除了采用PDIP42封装,89S51与89C51完全兼容,本书将以采用PDIP40封装的 89S51为探讨的对象,当然,要学习8x51,笔者强烈建议先将其引脚“背”下来,在此提供了独门的技巧,让大家轻松记住这40个引脚。
图1-9 PDIP40直插式封装
电源引脚
几乎所有IC都需要接用电源,而89S51的电源引脚与大部分数字IC的电源引脚类似,右上角接VCC,左下角接GND。所以89S51的40脚为VCC引脚,连接(5V±10%)的电源;20脚为GND引脚,必须接地。
输入/输出端口
有了电源之后,再来看看89S51的“主角”——输入/输出端口。VCC引脚下面是第39脚,为P0的开始引脚,即39脚到32脚这8个引脚为P0;与P0的相对的是P1,也就是第1脚到第8脚。P1从第1脚开始,所以P2从其斜对角第21脚开始,也就是在右下方,21脚到28脚是P2。第10脚到第17脚就是P3。39、1、21、10就是这4个Port的开始引脚,我们可通过图1-10来辅助记忆这4个输入/输出端口。
图1-10 引脚辅助记忆图
复位引脚
几乎所有微处理器都需要复位(Reset)的动作,对于89S51而言,只要复位引脚接高电平超过2个机器周期(约2μs),即可产生复位的动作。而89S51的复位引脚在P1与P3之间,即第9脚,辅助记忆的方法是“系统久久不动,就要按一下Reset键,以复位系统”,这“久久”就是第9脚的谐音。
圓 频率引脚
微控制器都需要时钟脉冲引脚,而在接地引脚的上方两个引脚,即19、18脚,就是时钟脉冲引脚,分别是XTAL1、XTAL2。
存储器引脚
89S51内部存储器外部也可接存储器,至于使用内部存储器,还是外部存储器,则需视31脚(P0下面那个脚)而定。31脚就是overline {{text{EA}}} 引脚,即存取外部存储器使能(External Access Enable)引脚。当overline {{text{EA}}} =1时,系统使用内部存储器;当overline {{text{EA}}} =0时,系统使用外部存储器。对于初学者而言,所写的程序比较简单,大多只使用内部存储器,所以就把31脚直接接到VCC。若使用无内部存储器的8031/8032(稍后在1-2-4节再详细介绍),则31脚接到GND。
外部存储器控制引脚
现在只剩下overline {{text{EA}}} 引脚下面的那两个引脚,而这两个引脚与overline {{text{EA}}} 引脚有点类似,都是针对存储器的控制,说明如下。
30脚为地址锁存使能ALE(Address Latch Enable),其功能是在存取外部存储器时,送出一个将原本在P0的地址(A0~A7)信号锁存到外部锁存器IC(如 74373),让P0空出来,以传输数据。简单讲,当外接存储器电路时,若ALE=1,P0被用作地址总线;若ALE=0,P0被用作数据总线。
29脚为程序存储使能overline {{text{PSEN}}} (Program Store Enable),其功能是读取外部存储器。通常此引脚连接到外部存储器(ROM)的overline {{text{OE}}}引脚,当89S51要读取外部存储器的数据时,此引脚就会输出一个低电平信号。
相对于前面的38个引脚,29、30脚比较难以说明,但是只要不用到外部存储器,就可当它们不存在,留待后面关于外部存储器的章节再行说明。
根据上述要诀,很容易记住这些引脚。或许有人会质疑:“有这么简单吗?”当然没这么容易!89S51的40个引脚里有很多是复用引脚,简单讲就是多用途的引脚,以39脚到32脚为例,平时为P0;若是连接外部存储器时,则当成AD0~AD7引脚,而AD0~AD7就是地址引脚与数据引脚混合的复用引脚,好像有点复杂,但如果不接外部存储器时就当它不存在。
1.2.3 89S51的基本电路
所谓“基本电路”是指89S51电路工作所不可或缺的基本连接线路。在此我们也有熟记基本电路的方法,基本电路包括以下四部分。
先接电源
电路都需要电源,这里首先将40脚接VCC,也就是+5V、20脚接地。
再接时钟脉冲
89S51内部已具备振荡电路,只要在GND引脚上方的两个引脚(即19、18脚)连接简单的石英振荡晶体(Crystal)即可。至于89S51的时钟脉冲频率,目前MCS-51芯片的工作频率已大为提升,例如Atmel公司的89C51的工作频率为0~24MHz,而华邦电子(Winbond)更提供了40MHz的版本,未来必然还会有更高频率的版本。尽管如此,目前还是采用12MHz时钟脉冲。如果不再设计一个振荡电路,则可按图1-11所示连接即可。如果要自行设计一个振荡电路,则可按图1-12所示连接。
图1-11 使用内部振荡电路
图1-12 使用外部时钟脉冲产生电路
复位电路
89S51的复位引脚(Reset)是第9脚,当此引脚连接高电平超过2个机器周期(1个机器周期包含12个时钟脉冲,请参考后面章节),即可产生复位的动作。以12MHz的时钟脉冲为例,每个时钟脉冲为1/12μs,2个机器周期为2μs。因此,我们可在第9脚上连接一个可让该引脚上产生一个2μs以上的高电平脉冲,即可产生复位的动作,如图1-13所示。
图1-13 Power On Reset电路
电源接上瞬间,电容器C上没有电荷,相当于短路,所以第9脚直接连接到VCC,即89S51执行复位动作。随着时间的增加,电容器上的电压逐渐增加,而第9脚上的电压逐渐下降,当第9脚上的电压降至低电平时,89S51恢复正常状态,称为“Power On Reset”(自动复位)。在此使用10kΩ电阻器、10μF电容器,其时间常数远大于2μs,所以第9脚上的电压可保持2μs以上的高电平,足以使系统复位。当然,只要时间常数大于2μs即可,而不一定要使用10kΩ电阻器、10μF电容器,本书所提供的89S51在线刻录实验板就使用0.1μF电容器(体积较小,电流也较小)及约100kΩ电阻器。
通常,我们还会在电容器两端并接一个按钮开关,如图1-14所示,此按钮开关就是一个手动的Reset开关(强制Reset)。
图1-14 手动复位电路
存储器设置电路
基本电路的最后一个部分是存储器的设置,如果把31脚(overline {{text{EA}}})接地,则采用外部存储器;如果把31脚(overline {{text{EA}}})接VCC,则采用内部存储器。在本书里大多采用内部存储器,所以把31脚与40脚及VCC相连接。整个基本电路如图1-15所示。
图1-15 基本电路
其中的元件如表1-1所示。
1.2.4 MCS-51系列
一般地,MCS-51系列(Micro Controller System,MCS)可分为51与52两大系列,52系列可说是51系列的增强型,其最大的特色就是内部存储器加倍,定时器/计数器增加了一个,价格却相差不大。
若根据芯片内的ROM来区分,MCS-51可分为无ROM型(8031/8032)、Mask ROM型(8051/8052)、EPROM型(8751/8752)及EEPROM型(89C51/89C52、89S51/89S52),如表1-2所示。
下面简述这几种8x51。
无ROM型
8031/8032为无ROM型单片机,如图1-16所示,使用这种单片机必须外接程序存储器。由于其封装成本与含ROM型的单片机很接近,且必须外接程序存储器,反而使电路成本大增;目前除非程序很大,无法完全放入单片机外,已经很少有人会采用这种单片机。
Mask ROM型
8051/8052为Mask ROM型单片机,如图1-16所示。这种单片机直接将程序放入芯片中的程序存储器,所以不必刻录程序(也不能刻录),单价低廉。但由于这种芯片需要制作其独有的光罩(Mask),需要量大的场合才能生产。键盘里所用的单片机(8048,是8051的上一代)就是Mask ROM型单片机。
图1-16 不可写入型
EPROM型
8751/8752为EPROM型单片机,如图1-17所示。这种单片机可将程序烧入芯片中的程序存储器,也可以紫外线擦除程序存储器里的数据,所以可重复使用不同的程序。IC上面有一个窗口,可看到内部的芯片与连接线,通常在刻录完毕后,在窗口上贴黑色胶布,以防止数据消失。如要擦除ROM里的数据,则使用紫外线照射窗口,15到30min即可。由于这种封装成本较高,再加上其擦除动作麻烦且费时,目前几乎不再生产这种元件了。
EEPROM型
89C51/89C52、89S51/89S52为使用Flash技术的EEPROM型单片机,如图1-17所示。这种单片机可将程序下载到芯片的程序存储器里,所不同的是,89C51/89C52是以5V及12V电压刻录与擦除程序存储器数据,而89S51/89S52只要5V电压即可刻录与擦除器,早已成为主流。厂商的技术数据宣称,这种晶片可重复写入与擦除器,可达1000次以上。而根据经验,如果不是操作上的失误或折断引脚,就算是经常对它烧写也很难把它烧坏。
图1-17 可重复写入型
1.2.5 关于Atmel的51系列
Atmel半导体公司所提供的89C51系列已成为MCS-51兼容单片机中的主流。在89C51系列中,当然是以停产的89C51最具代表性,取而代之的是更强劲的89S51,这两种单片机微控制器的结构比较如表1-3所示。
表1-3 89C5x与89S5x的比较
由表1-3可知,只要89C51/52有的,89S51/52都有。而其中比较特殊的是89S51/52新增了一个14位看门狗计数器(Watchdog Timer,WDT)。虽然,89S51/52的工作频率提升为0~33MHz,但实质性帮助并不大。就像0~24MHz的89C51/52一样,还是会应用12MHz的工作频率,如此才能直接沿用原有的程序设计;另外,设计程序时也比较容易计算,且耗用的资源也比较少。
虽然89C51停产了,但其核心仍存在于89S51及许多89C51的增强版本中,例如:
AT89C51RC单片机微控制器具有32KB程序存储器、512B数据存储器、WOT等,除存储器比较多外,都与89S51相同。
AT89C51CC001、AT89C51CC002、AT89C51CC003等单片机微处理器以89C51为核心,并扩展外围设备,除配置更多的存储器外,更增加了10位的ADC、CAN控制器等,而其重复数据刻录/擦除器的次数更可达到10万次。
说明:
ADC为Analog to Digital Converter的简称,也就是将模拟信号转换成数字信号的转换器。CAN为Controller Area Network的简称,这是一种微处理器与CAN总线的界面,而CAN控制器应用BOSCH CAN 2.0B Data Link Layer Protocal通信协议。