51单片机是单片机中的一种,单片机(single-chip microcomputer)是一块集成芯片,但不是一块实现某一个逻辑功能的芯片,而是在这块芯片当中,集成了一个计算机系统。如中央处理器(CPU)、存储器(ROM,RAM)、I/O接口、定时器/计数器、中断系统等。中央处理器是单片机的核心单元,他由运算器和控制器组成,他的主要功能是实现算术运算、逻辑运算、和控制。
1、有优异的性价比。
2、集成度高、体积小、有很高的可靠性。
3、控制功能强。
3、扩展性能好,非常容易构成各种应用系统。
两者主要的区别是AT89S51支持ISP(In System Programming,即“在线可编程”)。而AT89C51无此功能。
以下描述更加详细:
很多初学51单片机的网友会有这样的问题:AT89S51是什么?书上和网络教程上可都是8051,89C51等!没听说过有89S51?!
这里,初学者要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、89C51等),各高校及学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。
有些文献甚至也将8051泛指MCS-51系列单片机,8051是早期的最典型的代表作,由于MCS-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。
其他的公司的51单片机产品都是和MCS-51内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS(菲利浦),和WINBOND(华邦)等,我们常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更的是由Flash(程序存储器的内容至少可以改写1000次)存储器取带了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。
不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。89S51就是在这样的背景下取代89C51的,现在,89S51目前已经成为了实际应用市场上新的宠儿,作为市场占有率的Atmel目前公司已经停产AT89C51,将用AT89S51代替。89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89SXX可以像下兼容89CXX等51系列芯片。同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。如果市场需要,Atmel当然也可以再恢复生产AT89C51。
89S51相对于89C51增加的新功能包括:
-- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!
-- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。
-- 工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
-- 具有双工UART串行通道。
-- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
-- 双数据指示器。
-- 电源关闭标识。
-- 全新的加密算法,这使得对于89S51的**变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
-- 兼容性方面:向下完全兼容51全部字系列产品。比如8051、89C51等等早期MCS-51兼容产品。也就是说所有教科书、网络教程上的程序(不论教科书上采用的单片机是8051还是89C51还是MCS-51等等),在89S51上一样可以照常运行,这就是所谓的向下兼容。
比较结果:就如同INTEL的P3向P4升级一样,虽然都可以跑Windows98,不过速度是不同的。从AT89C51升级到AT89S51 ,也是同理。和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的。
********上面这些就是AT89S51的由来********
下面是初学网友对51系列的选型的常见问题
1问:网友常见问题:请问现在学习51系列单片机应该选择AT89C51还是89S51?
答:89C51和89S51内核相同,89S51针对89C51的明显的几个升级如下 ;
1.程序存储器写入方式:二者的写入程序的方式不同,89C51只支持并行写入,同时需要VPP烧写高压。89S51则支持ISP在线可编程写入技术!串行写入、速度更快、稳定性更好,烧写电压也仅仅需要4~5V即可。
2.电源范围:89S5*电源范围宽达4~5.5V,而89C5*系列在低于4.8V和高于5.3V的时候则无法正常工作。
3.工作频率:目前89S1*的性能远高于89C5*,89S5*系列支持高达33MHZ的工作频率,而89C51工作频率范围只支持到24M。
4.市场价格:由于89C51已经全面停产,所以在市场价格方面,库存的89C5*的批发价格要比89S5*贵将近一倍!
5.兼容型:89S5*向下兼容89C5*,就是说用89S5*可以替代89C5*使用,同样的程序,运行结果相同。就是说89S5*也同样兼容目前所有的教科书范例程序。
6.加密功能:89S5*系列全新的加密算法,这使得对于89S51的**变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。
7.抗干扰性:内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
8.烧写寿命更长:89S5*标称的1000次,实际最少是1000次~10000次,这样更有利初学者反复烧写,减低学习成本。综合上面的一些区别,个人认为89C51的停止使用只是时间问题而已,就象当年的8031。
2问:采用89C2051开发制造产品是不是要比用89S51更好?因为2051看起来体积比较小。
答:这个问题并不能一概而论,主要的区别如下:
1.功能差别:因为2051不是标准的51内核,所以205*的程序不能直接移植到51上。由于205*是精简型,所以P口变得很少,这样一来就只能用来做一些小的简单产品,可利用资源比较紧张。实际上,做产品的话用205*是不一定合算的,除非是非常简单的产品。
2.市场价格:由于89C2051的产量不是非常大,所以市场价格方面89C2051的批发价格和89S51比较接近!相对性能价格比就比较低。
3.产品体积:除非对产品的体积有苛刻的要求,否则二者的PCB面积相差不多,因为40脚的51芯片也有PLCC44小体积封装。
什么是单片机的最小系统啊?初学者可能对单片机最小系统感觉很神秘,其实单片机最小系统很简单,就是能使单片机工作的最少的器件构成的系统。最小系统虽然简单,但是却是大多数控制系统所必不可少的关键部分。
对于MCS-51 单片机,其内部已经包含了一定数量的程序存储器和数据存储器,在外部只要增加时钟电路和复位电路即可构成单片机最小系统。下面对51单片机最小系统需要的时钟电路和复位电路做一下详细的说明。
时钟电路
单片机系统中的各个部分是在一个统一的时钟脉冲控制下有序地进行工作,时钟电路是单片机系统最基本、最重要的电路。
MCS-51 单片机内部有一个高增益反相放大器,引脚XTAL1 和XTAL2 分别是该放大器的输入端和输出端,如果引脚XTAL1 和XTAL2 两端跨接上晶体振荡器(晶振)或陶瓷振荡器就构成了稳定的自激振荡电路,该振荡电路的输出可直接送入内部时序电路。MCS-51 单片机的时钟可由两种方式产生,即内部时钟方式和外部时钟方式。
(1)内部时钟方式。内部时钟方式即是由单片机内部的高增益反相放大器和外部跨接的晶振、微调电容构成时钟电路产生时钟的方法,其工作原理如图(a)所示。外接晶振(陶瓷振荡器)时,C1、C2 的值通常选择为30pF(40pF)左右;C1、C2 对频率有微调作用,晶振或陶瓷谐振器的频率范围可在1.2MHz ~ 12MHz之间选择。为了减小寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机引脚XTALl 和XTAL2 靠近。由于内部时钟方式外部电路接线简单,单片机应用系统中大多采用这种方式。内部时钟方式产生的时钟信号的频率就是晶振的固有频率,常用fsoc 来表示。如选择12MHz 晶振,则fsoc=12×106Hz。
(2)外部时钟方式。外部时钟方式即完全用单片机外部电路产生时钟的方 法,外部电路产生的时钟信号被直接接到单片机的XTAL1 引,此时XTAL2 开路, 具体电路如图(b)所示。 在介绍完了MCS-51 单片机的时钟电路后,笔者不得不介绍一下CPU 的以及 工作周期问题,因为CPU 的工作周期是基于时钟信号的,是与时钟信号密不可分 的。 CPU 在执行指令时,都是按照一定顺序进行的,由于指令的字节数不同,取 指所需时间也就不同,即使是字节数相同的指令,执行操作也会有很大差别,不同的指令的执行时间当然也不相同,即CPU 在执行各个指令时,所需要的节拍数 是不同的。为了便于对CPU 时序的理解,人们按指令的执行过程定义了几个名词, 即时钟周期、机器周期和指令周期。 时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲频率(fOSC)的倒数, 是单片机中最基本的、最小的时间单位。由于时钟脉冲控制着计算机的工作节奏, 对同一型号的单片机,时钟频率越高,计算机的工作速度显然就会越快。然而, 受硬件电路的限制,时钟频率也不能无限提高,对某一种型号的单片机,时钟频 率都有一个范围,如对MCS-51 单片机,其时钟频率范围是0~33MHz。为方便描 述,振荡周期一般用P(pause)表示。
机器周期:完成一个最基本操作(读或写)所需要的时问称为机器周期。 MCS-51 单片机的机器周期是固定的,即一个机器周期由12 个时钟周期组成。采 用6MHz 的时钟频率时,一个机器周期就是2μs ,采用12MHz 的时钟频率时, 一个机器周期就是1μs 。 指令周期:指令周期是执行一条指令所需要的时间,一般由若干个机器周期 组成,指令不同,后需要的机器周期数也不同。对于一些简单的单字节指令,分 指令周期可能和机器周期时间相同;而对于一些比较复杂的指令,如乘除运算则 需要多个机器周期才能完成,这时指令周期大于机器周期。 通常,一个机器周期即可完成的指令称为单周期指令,两个机器周期才能 完成的指令称为双周期指令。 MCS-51 单片机中的大多数指令都是单周期或双周 期指令,只有乘、除运算为四周期指令。 复位电路 大规模集成电路在上电时一般都需要进行一次复位操作,以便使芯片内的一 些部件处于一个确定的初始状态,复位是一种很重要的操作。器件本身一般不具 有自动上电复位能力,需要借助外部复位电路提供的复位信号才能进行复位操 作。
MCS-51 单片机的第9 脚(RST)为复位引脚,系统上电后,时钟电路开始工 作,只要RST 引脚上出现大于两个机器周期时间的高电平即可引起单片机执行 复位操作。有两种方法可以使MCS-51 单片机复位,即在RST 引脚加上大于两个 机器周期时间的高电平或WDT 计数溢出。单片机复位后,PC=0000H,CPU 从程序 存储器的0000H 开始取指执行。复位后,单片机内部各SFR 的值也复位。单片 机的外部复位电路有上电自动复位和按键手动复位两种。 (1)上电复位电路。最简单的上电复位电路由电容和电阻串联构成,如图下(a) 所示。
上电瞬间,由于电容两端电压不能突变,RST 引脚电压端为VR 为VCC,随着 对电容的充电, RST 引脚的电压呈指数规律下降,如图(b)所示。经过时间t1 后,VR 降为高电平所需电压的下限3.6V,随着对电容充电的进行,VR 将接 近0V。为了确保单片机复位,t1 必须大于两个机器周期的时间,机器周期取决 于单片机系统采用的晶振频率,图(a)中,R 不能取得太小,典型值10kΩ;t1 与RC 电路的时间常数有关,由晶振频率和R 可以算出C 的取值。
(2)上电复位和按键复位组合电路 上图(c)为上电复位和按键复位组合电路,R2 的阻值一般很小,只有几十 欧姆,当然也可以直接短接。当按下复位按键后,电容迅速通过R2 放电,放电 结束时的VR 为(R1*Vcc)/(R1+R2),由于R1 远大于R2,VR 非常接近VCC,使 RST 引脚为高电平,松开复位按键后,过程与上电复位相同。 以上两种是最基本的复位电路,在51 单片机,多采用上电复位和按键复位 组合电路,笔者也建议采用这种复位电路。
在时钟电路和复位电路设计完毕后,我们的单片机最小系统就做好了,现在单片机就可以正常工作了。
一个8 位CPU、一个偏内振荡器及时钟电、128 字节的片内数据存储器、4KB 的 片内程序存储器、可寻址的64KB 字节外部数据存储器和64KB 字节外部程序存储 器的控制电路、21 字节的专用寄存器、4 个8 位并行I/O 接口、一个全双工的串 行口、2 个16 位的定时器/计数器和一个布尔处理机。在MCS-51 系列单片机中 具有5 个中断源和2 个中断优先级,片内采用单一总线结构连接。
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
· 中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
· 数据存储器(RAM):
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
· 程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
· 定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
· 并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
· 全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
· 中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
· 时钟电路:
8051内置频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
· 时钟电路:
8051内置频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
在研究采场瓦斯积聚模拟试验台的过程中,笔者设计了主从式多机采控系统结构。主从式多机控制系统是实时控制系统中较为普遍的结构形式,它具有可靠性高,结构灵活等优点。当选用单串口51单片机构成这种主从式多机系统时,51单片机一方面可能要和主机Computer通信,一方面又要和下位机通信,这时就需要扩展串行通道。本文具体介绍了两种串行通道的扩展方法。
2 串行口的扩展方法
常用的标准51单片机内部仅含有一个可编程的全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。当以此类型单片机构成分布式多级应用系统时,器件本身的串口资源就不够用了。笔者在实际开发中,查阅了有关资料,总结出如下两种常用而有效的串行通道扩展方法。
2.1 基于SP2538的扩展方法
SP2538是专用低功耗串行口扩展芯片,该芯片主要是为解决当前基于UART串口通信的外围智能模块及器件较多,而单片机或DSP原有的UART串口又过少的问题而推出的。利用该器件可将现有单片机或DSP的单串口扩展至5个全双工串口。使用方法简单、高效。
在应用SP2538扩展串行通道时,母串口波特率K1=2880*Fosc[_]in,单位是MHz,且Fosc[_]in小于20.0MHz, 在SP2538输入时钟Fosc[_]in =20.0MHZ时母串口可自适应上位机的56000bps和57600bps两种标准波特率输入。子串口波特率K2=480*Fosc[_]in。
母串口和所有子串口都是TTL电平接口,可直接匹配其他单片机或TTL数字电路,如需连接PC机则必须增加电平转换芯片如MAX202 、MAX232 等。SP2538具有内置的上电复位电路和可关闭的看门狗监控电路。上位机写命令字0x10可实现喂狗,写命令字0x15关闭看门狗,初次上电后看门狗处于激活状态或写命令字0x20激活看门狗监控功能。上位机可通过芯片复位指令0x35在任何时候让芯片进行指令复位,也可通过芯片睡眠指令0x55在任何时候让芯片进入微功耗睡眠模式以降低系统功耗。初次上电后芯片不会自行进入睡眠模式,但只能由上位机通过母串口任意发送一个字节数据将其唤醒,其他子串口不具备这一功能。
图(1)是AT89C52单片机与SP2538的电路连接,图中,AT89C52的全双工串口与SP2538的母串口5相连,该串口同时也作为命令/数据口。SP2538的ADRI0、ADRI1、ADRI2分别与AT89C52的P2.3、P2.4、P2.5口相连,可用于选择发送数据是选择相应的串口0~4;ADRO0、ADRO1、ADRO2与P2.0、P2.1、P2.2相连,用于判断接收的数据来自哪一个串口。 SP2538的时钟频率选为20.0MHZ,此时母串口5的波特率为57600bps,串口0~4的波特率为9600bps。
下面是与上述硬件电路相关的接口程序,该程序用A51汇编语言编制,程序仅说明了中断方式下对子串口0(TX0、RX0)的操作,其它子串口类似。
TBLOCK DATA20H
RBLOCK DATA30H
LENGTH DATA14H
…
TXR[_]REV[_]SEND: CLRES
JBCRI,RECEIVE
CLRTI
MOVA,@R0
CLRP2.0 ; 写数据到"SBUF"前必须先置欲发送子串口的地址
CLRP2.1
CLRP2.2
MOVSBUF,A
DJNZ R2,NEXT
SJMP $
NEXT: INCR0
RETI
RECEIVE:MOVA,P2
ANDA,#31H;判断是否为子串口0
JNZELSE
MOVA,SBUF
MOV@R1,A
INCR1
RETI
图(1) AT89C52与SP2538的电路连接
2.2 基于Intel8251的串行口扩展方法
上面基于SP2538的串口扩展方法可以说是一种串行的扩展方法,这里基于Intel8251的扩展方法则是一种并行的方法。Intel8251是一种通用的同步/异步发送器(USART),它的工作方式可以通过编程设置。能够以同步或异步串行通信方式工作,能自动完成帧格式。
Intel8251具有独立的接收/发送器。在异步方式下,用于产生8251内部时序的时钟CLK输入至少应为发送或接收时钟的4.5倍。接收/发送(RXC/TXC)时钟应为波特率的1倍、16倍或64倍(由8251的工作方式字设定)。
图(2)是用Intel8251扩展一个串行通道的电路原理,图中,11.0592MHZ晶振经ALE6分频后于 、组合,产生1.8432MHZ的时钟频率,分别作为8251与8253的时钟输入,若设定8251通信波特率为9600bps,波特率因子为16,则需要 153.6KHZ的接收/发送时钟频率,该频率可由8253的OUT0产生。
下面的A51程序段说明了如何设置8253使其产生153.6KHZ的方波,以及如何用8251收/发数据:
设置8253的程序段:
MOVA,#36H ; 计数器0输出方波控制字
MOVDPTR,#0FFFFH; 指向控制字寄存器
MOVX @DPTR,A
MOVDPTR,#0FFFCH; 指向0计数器地址
MOVA,#0DH
MOVX @DPTR,A
MOVA,#0
MOVX DPTR,A
SETB P1.0
操作8251的程序段:
…
START: MOVDPTR,#7FFFH;8251控制、命令口地址
MOVA,#5EH;一个停止位,奇校验,8位数据,异步*16
MOVX @DPTR,A;写入方式字
MOVA,#15H
MOVX @DPTR,A;命令字,启动发送和接收器
…
LOOP: SJMP LOOP ;等待8251中断
8251[_]INT: ;现场保护
MOVDPTR,#7FFFH
MOVA,@DPTR
JBACC.0,TX[_]INT
JBACC.1,RX[_]INT
INT[_]EXIT: ;恢复现场
RETI
发送数据
TX[_]INT:MOVDPTR,#7FFEH ;8251数据口地址
MOVA,20H
MOVX @DPTR,A
…
AJMP INT[_]EXIT
接收数据
RX[_]INT:MOVDPTR,#7FFEH
MOVX A,@DPTR
MOV30H,A
…
AJMP INI[_]EXIT
图(2)用8251扩展串行通道的硬件电路原理
3 结束语
以单片机为核心的多级分布式系统的应用越来越广泛,上面讨论的两种串行口的扩展方法为此类多串口应用领域提供了一个良好的解决方案。笔者在实际中采用基于SP2538的扩展方法,设计了采场瓦斯积聚模拟试验台的多级分布式采控系统,效果良好。
1、明确学习单片机的目标,不要为学单片机而学,将单片机理解为一个电子元件,只有在一个系统中单片机才能实现它的功能。学习单片机的应用目的是,为了应用,通过使用单片机和一定的外围电路,来实现一个系统。
2、要有一块开发板,可以购买或自己做一块(单片机都没学会怎么做啊?可以到网上下载一份单片机的原理图自己焊接,先不用了解电路的原理,一边学习,以便分析电路。),因为单片机应用时一门实践性很强的课程。市场上卖的单片机实验班从50~300不等,我用的那块是一块170左右的。单片机实验板配有这些功能:流水灯、矩阵键盘、7段数码管、蜂鸣器、液晶、AD、DA、串口通信等模块。
注:单片机入门简易学习51单片机,因为这个单片机最经典,使用范围最广,学习资料最多。如果有特殊需求的也可以用其他单片机进行学习。不必讨论学习哪一种单片机,因为单片机原理基本一样,不同的只是功能模块。只要精通一种单片机之后,学习其他单片机只要花上很少的时间就可以学会。
3、要准备一本C语言教材和一本单片机原理教材,放在自己的案子上,随时可以查阅。
4、准备一本笔记本,随时记录自己的学习心得,毕竟”好记心不如烂笔头“。
5、要多看多想多问,可以再网上收集一些例程来看,多分析别人的程序,找出不同的地方,分析为什么要这样。
6、按照如下顺序进行单片机的实验,可以方便学习。
单片机IO口的使用>>单片机定时器/计数器的使用>>单片机中断系统的使用>>单片机和PC的通讯(RS232)>>AD转换>>UART、SSI、IIC等通讯总线的使用>>输出比较、输入捕捉、PWM输出等>>USB、ICP/IP协议等。
7、多做实验,多敲代码。在网上找一些实验来,自己先模仿着做,然后自己设计出属于自己的风格的产品。