单片机关键技术基础详解(二)

时间:2022-02-24 19:46:48

一、CPU与单片机的复位电路的作用及基本复位方式

  在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。

  无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。

  基本的复位方式

  单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。

  1、手动按钮复位

  手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。

  

单片机关键技术基础详解(二)

 

  图1

  2、上电复位

  AT89C51的上电复位电路如图2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1?F。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在图2的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。

  

单片机关键技术基础详解(二)

 

  图2

  3、积分型上电复位

  常用的上电或开关复位电路如图3所示。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。

  根据实际操作的经验,下面给出这种复位电路的电容、电阻参考值。

  图3中:C:=1uF,Rl=lk,R2=10k

  

单片机关键技术基础详解(二)

 

  图3 积分型上电复位电路

二、编制单片机应用程序的步骤和难点

  1前言

  如何编写单片机应用程序,这是一个实践性很强的题目,也是1项艰苦而细致的工作。如果按照一定的步骤并且找出难点,事先对这些难点加以处理,能够收到事半功倍的效果。下面根据实际工作中的经验,谈谈实际开发中必经的几个步骤和可能遇到的难处理。对于1个单片机应用程序,其编制过程如图1所示。

  

单片机关键技术基础详解(二)

 

  2编制步骤

  2.1搞清功能和编写方案

  接到一个单片机项目设计文件之后,并不是马上动手编写程序,而是仔细研究用户提出的技术要求或者技术说明,根据这些技术要求和技术说明,也就是客户要求,把程序应该具备的主要功能写清楚,写仔细,这是最关键的工作。如不清楚,应向客户和使用者问清楚,否则在设计完成以后会发现有些功能由于事先没有考虑清楚再重新设计将会很麻烦,可能有些需要重新增加的功能很容易补充,而有些可能由于没有事先考虑周全而无法实现。

  2.2编写总流程图和各功能模块流程图

  根据要完成的程序功能写出总流程图,根据总流程图把整个程序划分成几个主要的功能模块,每个功能模块都要写出基本流程图,这主要是为以后的程序编写起到一个指导作用。当然,在实际的程序编写过程中肯定会有一些改动,1个基本的流程会指导您在写程序的过程中不会出现太大的偏差。例如,编写键盘扫描并且区分是功能键还是数字键的子程序,如果是功能键就转相应的功能处理程序;如果是数字键就在相应的数码管上显示出来;可以写出其流程图,如图2所示。

  

单片机关键技术基础详解(二)

 

  2.3准备编程所需的资料

  这些资料主要是编程语言方面的书籍、杂志等。因为程序语言的有些资料任何编程人员都不可能记得太清楚,如每条指令的含义,具体操作每条指令所牵涉的硬件电路等。如果资料准备得比较充分,可以放在案边,若有需要,顺手查阅。

  2.4人机界面的编程

  用单片机实现的项目人机界面相对简单。若为LED显示,应根据LED的位数选取简单、明燎、用户一看便知的提示符;显示的数据位数应充分考虑用户提出的技术要求。

  2.5分析编程的难点和技术解决方案

  即使1个熟练的编程人员,编程过程中会遇到一些困难。为了能比较顺利地完成程序设计,应根据程序所完成的功能和程序流程对整个程序的框架分析一下,并根据自己掌握的技能定位整个程序的难点,然后找到最佳的算法。例如对于稍微大一点的项目,键盘扫描和显示部分的程序编制应该是单片机编程的难点。

  (1)无论是键盘扫描还是显示过程都和硬件部分息息相关

  送片选信号选取键盘就必须搞清单片机芯片是高电平选通还是低电平选通;选通键盘后,还需要读回键盘的状态。对读回的键盘状态还要进行防抖处理;若键盘抖动,放弃读回的数据,重新读键盘状态;若确定为键盘按下,才能对按键值进行处理;处理后的键值送显示或作为其它使用。由此可知以上的每一过程都和硬件电路打交道。

  (2)键盘扫描和显示牵涉到的算法比较复杂

  因为扫描键盘的过程就是遍历每个按键,识别抖动,识别按键是否松开等过程;除此之外还要延迟合适的时间,以便再次读取键值。显示过程也要遍历每个数码管或液晶字符;其中查表过程,送显示过程都要用到比较复杂的循环遍历算法。

  (3)数字键和功能键的区分

  是数字键就送显示,是功能键就转相应的功能子程序,把两者结合起来就构成比较复杂的散转程序。MCS51单片机有现成的散转子程序可供参阅,PIC可以参照MCS51的散转子程序套用。

  以上3点都是单片机编程的难点部分,在编程之前都应该找出来仔细分析。通过分析,将所有可能成为难点之处都一一找出并找出相应的算法,在以后的程序编写过程中也相应地比较顺利。

  2.6写程序

  在上面的准备工作完成后,就可以着手编写程序。因为有了明确的程序流程,有了充足的资料,可能遇到的难点基本上找到了解决方法;这样,事先准备得比较充分,即使在以后的程序编写过程中遇到困难,也较易解决。这样就可以节省很多时间,以便静下心来认真按照方案和流程编写程序。另外,一般写完1个功能程序就进行调试,通过后再编写另外1个功能代码,这样可以防止全部代码编写完毕后再调试可能带来的相互影响,从而可以搞清楚到底是哪部分程序有问题。

  2.7程序调试

  程序的调试过程是1个比较复杂的过程,有些需要高度的技巧和一定的方法。一般的编程软件都提供单步、单步越过、断点、运行到光标处等基本方法,一般掌握这几种基本方法就可以解决绝大部分问题。经过长时间的调试实践之后自然就可以掌握一定的调试技巧,即熟能生巧。

  3结束语

  以上是编程一般单片机程序必须经过的7大步骤,假如这7个过程的工作做得比较充分,一定能够编写出令人满意的单片机程序。

三、关于单片机中的flash和eeprom

  FLASH的全称是FLASH EEPROM,但跟常规EEPROM的操作方法不同

  FLASH 和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有 FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。

  至于那个“总工”说的话如果不是张一刀记错了的话,那是连基本概念都不对,只能说那个“总工”不但根本不懂芯片设计,就连MCU系统的基本结构都没掌握。在芯片的内电路中,FLASH和EEPROM不仅电路不同,地址空间也不同,操作方法和指令自然也不同,不论冯诺伊曼结构还是哈佛结构都是这样。技术上,程序存储器和非易失数据存储器都可以只用FALSH结构或EEPROM结构,甚至可以用“变通”的技术手段在程序存储区模拟“数据存储区”,但就算如此,概念上二者依然不同,这是基本常识问题。

  没有严谨的工作精神,根本无法成为真正的技术高手。

  EEPROM:电可擦除可编程只读存储器,Flash的操作特性完全符合EEPROM的定义,属EEPROM无疑,首款Flash推出时其数据手册上也清楚的标明是EEPROM,现在的多数Flash手册上也是这么标明的,二者的关系是“白马”和“马”。至于为什么业界要区分二者,主要的原因是 Flash EEPROM的操作方法和传统EEPROM截然不同,次要的原因是为了语言的简练,非正式文件和口语中Flash EEPROM就简称为Flash,这里要强调的是白马的“白”属性而非其“马”属性以区别Flash和传统EEPROM。

  Flash的特点是结构简单,同样工艺和同样晶元面积下可以得到更高容量且大数据量下的操作速度更快,但缺点是操作过程麻烦,特别是在小数据量反复重写时,所以在MCU中Flash结构适于不需频繁改写的程序存储器。

  在很多应用中,需要频繁的改写某些小量数据且需掉电非易失,传统结构的EEPROM在此非常适合,所以很多MCU内部设计了两种EEPROM结构,FLASH的和传统的以期获得成本和功能的均衡,这极大的方便了使用者。随着ISP、IAP的流行,特别是在程序存储地址空间和数据存储地址空间重叠的MCU系中,现在越来越多的MCU生产商用支持IAP的程序存储器来模拟EEPROM对应的数据存储器,这是低成本下实现非易失数据存储器的一种变通方法。为在商业宣传上取得和双EEPROM工艺的“等效”性,不少采用Flash程序存储器“模拟”(注意,技术概念上并非真正的模拟)EEPROM数据存储器的厂家纷纷宣称其产品是带EEPROM的,严格说,这是非常不严谨的,但商人有商人的目的和方法,用Flash“模拟”EEPROM可以获取更大商业利益,所以在事实上,技术概念混淆的始作俑者正是他们。

  从成本上讲,用Flash“模拟”EEPROM是合算的,反之不会有人干,那么那位“总工”和楼上某网友所说的用EEPROM模拟Flash是怎么回事呢?这可能出在某些程序存储空间和数据存储空间连续的MCU上。这类MCU中特别是存储容量不大的低端MCU依然采用EEPROM作为非易失存储器,这在成本上反而比采用Flash和传统EEPROM双工艺的设计更低,但这种现象仅仅限于小容量前提下。因Flash工艺的流行,现在很多商人和不够严谨的技术人员将程序存储器称为Flash,对于那些仅采用传统EEPROM工艺的MCU而言,他们不求甚解,故而错误的将EEPROM程序存储器称为“ 模拟Flash”,根本的原因是他们未理解Flash只是一种存储器结构而非存储器的用途,错误的前提自然导致错误的结论。商业上讲,用EEPROM模拟 Flash是不会有人真去做的愚蠢行为,这违背商业追求最大利益的原则,技术上也不可行,而对于技术人员而言,尤其是IC业内的“总工”如果再这么讲那只能说明他或她要么根本不了解相关技术细节,要么非常不严谨,这都不符合“总工”的身份。本质的问题是Flash是一种存储器类型而非MCU中的程序存储器,即使MCU的程序存储器用的是Flash,但其逆命题不成立。

  在此写此文,一方面是要澄清技术概念,另一方面更是不想令错误的说法误人子弟,搞技术也需要严谨的科学精神。

  28系列是最早的EEPROM,28F则是最早的Flash,甚至Flash一词是Intel在1980S为推广其28F系列起的“广告名”,取其意“快”,仅此而已。当年的Flash不比传统EEPROM容量更大只是容量起点稍高。至于现在的手册中有无EEPROM字样并不重要,非要“较枝”的话,看看内容有无“电可擦除”存储器的说法,至少我随手打开SST的Flash手册上都写的很清楚,不过这些根本就是无意义的皮毛,典型的白马非马论。

  至于AVR的地址连续问题是我随手之误,应指68HC系列,但即使如此,就算我没有用过包括AVR在内的任何MCU也跟Flash的性质毫无关系。

四、自制AVR仿真器

  自制AVR仿真器用JtagICE仿真Mega16芯片进行开发,开发成功后,才移植到M8/48/88/168上。只要开发时留意一下,移植并不会有困难。

  使用贴面IC的效果图:

  

单片机关键技术基础详解(二)

 

  但使用贴面IC一个不好的地方是,芯片无法拆下来(如果我们要重新烧录芯片的ROM,能拆下来就方便多了)。所以,这个活动,我们推荐使用DIP40封装的Mega16. 以下是实物图:

  

单片机关键技术基础详解(二)

 

  

单片机关键技术基础详解(二)

 

  

单片机关键技术基础详解(二)

  网上关于自制Jtag的线路有许多种。根据搜集到的资料,设计出本文介绍的最简易、制作最容易的 JTAG。RS232接口是用分立件制作,就地取材,简单可靠.

  本线路的J1双排十针座,既可以做Jtag,又可以做ISP(通过跳针JP1控制)。JP1跳针短路时,J1用作ISP下载,方便更新本Jtag的ROM。J1 跳针开路时, 用作JTAG.

  

单片机关键技术基础详解(二)

 

  如果你有232芯片,可以按以下线路代替上面的分立件RS232部分:

  

单片机关键技术基础详解(二)

 

  烧录文件:

  按以上的硬件制作好PCB后,检查焊接无误,就可以进行烧录了。

  烧录的方法有很多,我(armok)推荐的一个方法是:将M16芯片从JTAG板上拆下来,放到普通的带ISP口的实验板,使用SL-ISP1.32 软件,将本文附录所带的将AVR Studio 4.10 Rom 烧录文件中的flash.rom 及 epprom.rom 直接烧入到Jtag ATmega16 就可以了。

  

单片机关键技术基础详解(二)
五、80C51的复位技术盘点

 

 

  标准80C51片内现有的复位逻辑比较简单,只有通过一条复位引脚RST进行外部扩展。技术手册中给出了上电复位(POR,power on reset)和人工复位(MRST,manual reset)电路的接线方法;借助于一只专用外围芯片,如MAX813L或DS1323等,来扩充欠压复位(LVR,low voltage reset)和看门狗复位(WDR,watch dog timer reset)也有文章介绍。

  本文将介绍三种非常规扩展复位方式:软件复位(SWR,software reset)、软硬件复位(SHR,software and hardware reset)和非法地址复位(IAR,illegal address reset)。

  软件陷阱技术及其改良方法

  软件陷阱(software trap)是一种捕捉程序“跑飞”的编程方法。通常可以在程序中设置软件陷阱,引导程序失控的单片机跳转到一个指定的地址去执行,最终回复到正常轨道上来。软件陷阱可以设置在用户程序的空隙处或者转移指令之后,还可以利用一系列的陷阱指令来填充程序存储器的空白区。实现软件陷阱功能的指令是一个“5字节指令串”,通常包含2条单字节NOP指令和1条3字节跳转指令。

  NOP ;利用空操作指令

  NOP ;来增加捕捉有效性

  LJMP SWRST;无条件跳转到指定地址去

  其中“SWRST”可以是一段“软件复位程序”的入口地址标号,也可以是复位矢量“0000H”,即主程序入口地址。

  如果SWRST等于复位矢量0000H,则会把捕捉到的跑飞程序引导到初始化程序入口地址去执行,从而达到回复到正常轨道的目的。这种处理方法只适合中断功能没有被启用的场合。可以设想,假如是在(低级或高级)中断服务程序中跑飞的,这时即使把程序拉回到起点,而中断激活触发器不能够被清除,会影响以后的中断请求无法被 CPU响应。

  如果SWRST等于“软件复位程序”的入口地址,则会引发一次“软件复位”。关于软件复位程序的设计方法,随后介绍。

  总之,这种方法的指导思想是指,把未使用的ROM空间用跳转引导指令填满,作为软件“陷阱”,以捕获“飞掉”的程序,并强行将捕获到的跑飞程序引向一个特定的地址,在那里由一段专门处理错误的程序进行处理,以恢复系统的正常运行。为提高跑飞程序的捕获率,通常还要在引导指令之前放置上几条空操作指令 NOP。理由是,8051的指令编码采用的是不等长方式,长度分别为1~3字节,而程序跑飞又是通过非法随机改变PC值形成的。假若跑飞后的PC值落到3 字节指令LJMP的中间,就会把操作数当作操作码来执行,将会产生不可预知的结果。为了提高捕捉的有效性,就在LJMP指令之前至少填充2条单字节的 NOP指令。

  如果把“5字节指令串”改换成如下作者新设计的“4字节指令串”,陷阱指令将会更加有效。理由是,该指令对应的目标码为“00 20 00 20H”,这段码无论重复多少次都是等同的。另外,应该在程序存储器0020H开始的3字节中再放置一条跳转到“软件复位程序”真正入口的中转指令 LJMP SWRST。经过核查,0020H~0022H字节恰好位于定时器T1中断矢量区尾部和串口中断矢量之前。

  SWRST0 EQU 0020H;定义“软件复位程序”的间接入口地址为“0020H”

  NOP ;填充一条单字节的空操作指令,机器码是“00H”

  LJMP SWRST0 ;无条件跳转到指定地址去。对应的机器码是“20 00 20H”

  软件复位技术

  软件复位是一种新技术,目前有越来越多的新型单片机配备了该功能。例如Philips公司的P87LPC700和P89LPC900系列、TI- BB公司的MSC1200系列和SunPlus公司的SPMC65系列等,内部都设计了专门用于实现软件复位的控制寄存器或者控制位。

  软件复位是在利用软件陷阱技术或软件看门狗技术时,必需配套实施的一项后续处理工作。所谓“软件复位”是一种由用户软件控制的复位活动,就是利用一系列指令来模拟硬件复位所实现的各种操作内容,并且重新从头开始执行用户程序。

  其中的操作内容应该包含:(1)对于标准80C51的21个特殊功能寄存器SFR的复位操作,利用MOV指令很容易实现。全部复位可能不是必需的,只管那些在用户程序中用到的SFR即可,可以由用户自己定制。

  2)对于无统一编址的程序计时器PC的复位,利用一条跳转指令即可。(3)中断激活触发器的复位既容易被人们忽略,也不容易实现。理由是它们对于用户程序是不可见的,无法直接读写其内容。有的编程人员采用LJMP 0000H(机器码为20 00 00H)作为软件陷阱,认为直接跳转到复位矢量就完成了软件复位,就是这类失误案例的典型代表。

  清除中断激活触发器有何必要呢?程序的跑飞是随机发生的,其起飞点完全可能发生在低级或高级中断服务子程序中,这时的中断激活触发器已经被置位。如果在程序回复之后没有及时清除它们,将阻止以后出现的所有的同级或低级中断请求。

  

单片机关键技术基础详解(二)

 

  图1 中断激活触发器示意图

  中断激活触发器包含高权组和低权组两个触发器,电路组成如图1所示,该图是根据作者的理解和经验绘制的。电路中包括1个逻辑或门G1、两个S-R触发器FF1和FF2。当CPU响应低级中断请求之后,FF1被置位,其Q = 0,*“低权组”不再受理新的低级中断请求;当CPU响应高级中断请求之后,因为G1的作用而使FF1和FF2同时被置位,FF1的Q = 0*“低权组”,FF2的Q = 0*“高权组”,不再受理新的高级和低级中断请求。

  如何设计“软件复位程序”呢?其编写方法如下。

  SWRST: ;定义软件复位程序的实际入口地址

  CLR EA ;首先关闭中断源总使能位

  SETB F0 ;设置一个软件复位标志位

  MOV P0,#0FFH ;设定通用端口P0为高阻输入状态

  MOV P1,#0FFH ;设定通用端口P1为高阻输入状态

  MOV P2,#0FFH ;设定通用端口P2为高阻输入状态

  MOV P3,#0FFH ;设定通用端口P3为高阻输入状态

  MOV PSW,#00H ;设定程序状态字寄存器为原始值

  …… ;(据实际需要还可初始化其他SFR)

  MOV DPTR,#SWR0 ;为RETI准备弹出地址,而又不想改变执行顺序

  PUSH DPL ;压栈低字节,在先

  PUSH DPH ;压栈高字节,在后

  RETI ;中断返回指令,清除高级中断激活触发器

  SWR0: CLR A ;准备复位地址

  PUSH ACC ;压栈低字节00H

  PUSH ACC ;压栈高字节00H

  RETI ;清除低级中断激活触发器,并跳到0000H

  以下几点需要说明:(1)首先关闭总的中断使能位,以确保软件复位过程顺利完成;(2)其中的核心指令是中断返回指令RETI,因为在整个指令集中只有该指令能够清除中断激活触发器;(3)末尾RETI指令的作用还代替了一条3字节的“LJMP 0000H”指令;(4)由软件陷阱捕获的跑飞程序并不一定同时置位了所有两个中断激活触发器,但是该程序仍然适用,并且也没有任何负面影响;(5)软件复位标志这里利用了PSW中的一个通用位F0,也可以利用F1、GF0、GF1以及RAM字节单元或位单元等;(6)软件复位是一种不外扩任何硬件电路、不导致单片机发生状态迁移、纯软件的复位方法。

  软硬件复位技术

  软硬件复位是软件复位功能的一种延伸,也是单片机的一种自主复位方式,既具有软件复位的特点(可以由编程人员按需要来启用),又具有硬件复位的特点(能够实现硬件复位的全部操作内容)。这种复位方式是本文作者自行规划、设计和命名的。

  

单片机关键技术基础详解(二)

 

  (a)分立件电路方式

  

单片机关键技术基础详解(二)

 

  (b)IC电路方式

  在上述软件复位的基础上很容易实现这里所说的软硬件复位方式,不过需要外扩一定的硬件电路的支持。图2是两种配合软硬件复位的外扩电路。其中,图2 (a)电路是在普通复位电路的基础上,添加1只三极管Q1和3只阻容元件而成的,并且其导通与截止由一条并口引脚控制,如P1.0。平时P1.0维持高电平,Q1截止;当内部软件需要实施该复位时,从P1.0脚输出低电平,Q1导通把RST脚拉高,强行复位单片机。这里R3、R4和C2起着延时和限流的双重作用。图2(b)电路是在MAX812M对接80C51电路基础上添加一条连线而成的,其工作原理与上类似。该连线把MAX812M的人工复位输入脚 MR和一条通用I/O脚(如P1.0)连接起来即可。

  如何设计“软硬件复位程序”呢?其编写方法如下。

  SHRST: ;定义软硬件复位程序的入口地址

  SET F1 ;设置一个软件复位标志位

  CLR P1.0 ;从P1.0输出低电平,开始实施软硬件复位

  ORL PCON,#02H;置位PD,令单片机进入停机状态,即PD模式;经过延时后RST被拉高,迫使单片机进入复位状态;在复位操作完成并且唤醒单片机之后,将重新从0000H开始执行用户程序

  以下几点需要说明:(1)如果利用这里的“软硬件复位程序”代替前面的“软件复位程序”,可以简化用户程序并且复位进行得彻底,但是需要增加一些硬件,并且也把可以定制的复位操作给转化成了固定的复位操作。(2)在图2所示的软硬件复位的支撑电路,除了可以提供复位信号给单片机,还有一个很大的好处,就是可以为其他外围电路提供复位信号,这弥补了传统80C51的一个欠缺。

  标准80C51的复位引脚RST是只能输入的单向结构,不能由单片机主动地为外围芯片提供同步的复位信号;而MC68HC05和MC68HC08系列、ST公司的ST7系列,以及许多新款51兼容单片机都把RST引脚设计为可输入/输出的双向结构,在内部看门狗溢出复位的同时,也从RST输出一个高电平脉冲,控制其他外围芯片与单片机进行同步复位操作。例如,ATMEL公司的AT89S51/52、T89C51RD2、AT89C51RC等型号和 Philips公司的P89C51RC、P89C51RA2/RB2/RD2等型号,它们都带有内部看门狗。

非法地址复位技术

  一般来说,非法地址复位是指由于意外原因导致程序计时器PC内容被破坏,而迫使CPU试图到一个非法地址去抓取指令代码来执行,就强迫单片机进行复位操作。

  由于51系列单片机的硬件结构采用的是“哈佛架构”,其程序区和数据区截然分开、独立编址,不存在CPU到RAM区抓取指令的可能性,因此这极大地降低了非法寻址的概率。但是这并不能彻底杜绝非法寻址的可能性,尤其是对于哪些实际配备ROM容量远小于64Kb的情况。这时就可以狭义地定义非法地址是 PC值超出ROM实际容量的地址编码。

  

单片机关键技术基础详解(二)

 

  (a)IC电路直接复位方式

  

单片机关键技术基础详解(二)

 

  (b)先中断后复位方式

  图3是两种实现非法地址复位的支撑电路。其中,图3(a)电路是在图2(b)的基础上改变一条连线而成的。该连线一端连接PSEN信号引脚,该引脚专门用来提供选通外扩程序存储器ROM的片选信号;另一端连接MAX812M的人工复位输入脚MR。平时PSEN引脚一直维持在高电平上;只有当CPU试图非法到外部ROM抓取指令时,PSEN引脚才会送出低电平脉冲,就是巧妙地利用该脉冲作为复位信号源,来强迫单片机进行复位操作。图3(b)电路可以看作是在图2(b)基础上改变添加一条连线而成的。该连线把PSEN信号引脚和一条外部中断源引脚INT0连接起来,并且设定INT0为下降沿触发和高级中断源。当出现非法地址时,PSEN引脚上的低电平脉冲经过INT0向CPU请求中断;在CPU响应该中断之后可以设置标志,然后实施软件复位或者软硬件复位。

  

单片机关键技术基础详解(二)

 

  

单片机关键技术基础详解(二)

 

  需要提示一点:非法地址复位方式的启用是有前提条件的,它仅适用于那些纯粹利用片上ROM(指程序存储器),即无外扩ROM,并且片上ROM不足64Kb的情况。

  复位方式小结

  标准80C51只有一个外接复位源引脚RST,基本所有硬件中断都是通过RST脚引入的,并且是根据实际需要逐个进行扩充的。其中只有上电复位POR是什么场合下都必不可少的。其扩充顺序大致符合(不是绝对符合)表1中的规律。

  在此对于可能用到的多种复位源和复位的方式,进行如下几种不同的分类。

  1 传统复位方式和非传统复位方式

  传统复位方式(包含上电复位和人工复位)是80C51技术手册和所有教科书中几乎都提及的;而非传统复位方式(包含欠压复位、看门狗复位、软件复位、软硬件复位和非法地址复位)是为了满足技术发展的需要而扩充的,这也是一些新款单片机在片内新增的几种复位方式。

  2 硬件复位、软件复位和软硬件复位

  复位分类如表2所示,将除了软件复位之外的所有复位方式外部都引入到RST复位引脚上。

  3 电源电压监控复位和程序运行监控复位

  电源电压监控复位包含上电复位和欠压复位,它们都是在电源电压的非常时期实施的复位;程序运行监控复位包含人工复位、看门狗复位、非法地址复位、软件复位和软硬件复位,它们都是在用户程序失常的情况下实施的复位。

  4 内部复位和外部复位

  内部复位包含看门狗复位、软件复位、软硬件复位和非法地址复位,它们基本都由内部原因导致的复位;外部复位包含上电复位、人工复位和欠压复位,它们基本都由外部原因导致的复位。

  5 快速复位和延时复位

  前者希望复位操作越快越好,例如人工复位、看门狗复位、非法地址复位等;而后者则希望复位操作有一个延迟时间,例如上电复位、欠压复位等。

  6 冷复位和热复位

  只有上电复位属于冷复位,其余均属于热复位。在冷复位实施之前单片机处于无电状态。