本节书摘来自异步社区《例说51单片机(c语言版)(第3版)》一书中的第1章,第1.2节,作者 张义和 , 王敏男 , 许宏昌 , 余春长,更多章节内容可以访问云栖社区“异步社区”公众号查看
例说51单片机(c语言版)(第3版)
“89s51”源自intel公司的mcs-51系列,而目前所采用的8x51并不仅限于intel公司所生产的,反倒是以其他厂商所发行的兼容芯片为主,如atmel公司的89c51/89s51系列,其价格便宜,质量稳定,开发工具齐全,早就被学校或培训机构所接受。
在此先介绍8x51的基本知识,包括基本结构、引脚、基本电路及51系列等,其中很多数据最好要熟记,本书也会提供许多快速背记的技巧,让读者能在极短的时间里记住40个引脚、基本电路等。
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输入/输出端口中的一位
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就是地址引脚与数据引脚混合的复用引脚,好像有点复杂,但如果不接外部存储器时就当它不存在。
所谓“基本电路”是指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所示。
一般地,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 可重复写入型
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通信协议。