OTPROM型单片机内内部存储器的使用研究
发布时间:2008/5/26 0:00:00 访问次数:965
    
    
    来源:单片机及嵌入式系统应用 作者:中国石油大学 冯兴田 张加胜
    
    随着变频调速以及微机控制技术的发展,适应电机控制的intel 8xc196mc系列单片机应用越来越广泛。
    
    与80c196mc相比,87c196mc单片机带有16 kb的otprom(one tline programmable read-only memory),可以进行片内编程操作,而且可以增强加密功能。对于普通的控制系统来说,其存储容量足够大,不必再使用外部扩展存储器。然而87c196mc单片机的otprom存在一个缺点:不可擦除,也就是说只能编程一次,不能实现重复编程,不利于大量普及使用。
    
    当程序从仿真器移植到单片机的otprom时,并不能保证程序的一次成功性,由于单片机的不可擦除性,若程序脱机一次就使用一片单片机,显然将造成巨大的资源浪费。另一方面,对于复杂系统,16kb的otprom容量如果不够,则需要采用扩展外部存储器,为了保证有效实现加密功能,应保留一部分程序在片内otprom,此时便涉及到单片机内、外存储器的衔接问题。
    
    本文针对intel 87c196mc单片机内部存储器的不可擦除性,对两种情况下的使用问题提供了可以有效实现重复编程的方法,并可以推广至其他任何带有otprom的单片机系列的编程应用中。
    
    1 87c196mc单片机内部存储器的编程方式
    
    intel 87c196mc单片机支持三种编程方式:自动编程方式(使87c196mc单片机不用eprom编程器即可从外部eprom对自己编程)、从机编程方式(给外部eprom编程器提供了一个标准接口)和实时编程方式(运行中编程方式,可以在软件控制下实时对单个eprom单元编程)。和其他方式不同,实时编程可以在不进入全eprom编程方式下完成。
    
    对于intel 87c196mc单片机的otprom只能编程,不能擦除,但在编程时可以验证是否已确实编程。对0tprom可以采用2种编程方法:在从机编程方式下或在专门的otprom编程方式下编程。otprom为87c196mc单片机提供了辅助的存储器保护手段,它可以禁止总线控制器执行外部取指周期,若企图把一个外部地址装载到pc寄存器,芯片将复位。这种自动复位功能对跑飞的代码也提供了一种额外的恢复手段。使用时应根据实际需要采取不同的编程方式。
    
    2 87c196mc单片机内部存储器的重复编程方法
    
    单片机87c196mc的ea引脚(外部访问允许端,87c196mc plcc84-36脚)用来控制访问内部存储器或外部存储器。当ea=o时,所有访问都是对片外存储器的;当ea=1时,对2000h~5fffh单元的访问都是对片内otprom/rom的。编程方式下,ea=12.5 v。由于复位时ea的电平被锁存,难以通过外部硬件电路来实现程序空间的选择。这里通过应用程序语句来控制程序地址范围,相当于ea的电平变化作用。本文主要应用了intel汇编语言的长跳转指令ump来实现控制访问内、外存储器的功能,下面介绍两种常用的方法。
    
    2.1片内编程操作方法
    
    所谓87c196mc单片机otprom的不可擦除性,实质上是不可实现从“0”到“1”的编程,而只能完成从“1”到“o”的编程。以下通过简单的程序实例来介绍这种方法。
    
    ljmp nextl
    cseg at 2600h
    nextl:……
    
    上述语句实际上代表的是ljmp2600h.其机器码为e79c04,当地址2600h变化时,得到一组对应的机器码,通过对这一组机器码进行分析,就可以得到该方法的原理,如表1所列。
    
    
    
    机器码e79c04的后两个字节代表了汇编程序语句中的地址(04代表了2600h,14代表了3600h……)。当一个字节从4位全是“1”变成4位全是“o”,且每次只有一个“l”变为“0”时,可以有多种不同的变法,如表2所列。
    
    
    
    由于
    
    
    来源:单片机及嵌入式系统应用 作者:中国石油大学 冯兴田 张加胜
    
    随着变频调速以及微机控制技术的发展,适应电机控制的intel 8xc196mc系列单片机应用越来越广泛。
    
    与80c196mc相比,87c196mc单片机带有16 kb的otprom(one tline programmable read-only memory),可以进行片内编程操作,而且可以增强加密功能。对于普通的控制系统来说,其存储容量足够大,不必再使用外部扩展存储器。然而87c196mc单片机的otprom存在一个缺点:不可擦除,也就是说只能编程一次,不能实现重复编程,不利于大量普及使用。
    
    当程序从仿真器移植到单片机的otprom时,并不能保证程序的一次成功性,由于单片机的不可擦除性,若程序脱机一次就使用一片单片机,显然将造成巨大的资源浪费。另一方面,对于复杂系统,16kb的otprom容量如果不够,则需要采用扩展外部存储器,为了保证有效实现加密功能,应保留一部分程序在片内otprom,此时便涉及到单片机内、外存储器的衔接问题。
    
    本文针对intel 87c196mc单片机内部存储器的不可擦除性,对两种情况下的使用问题提供了可以有效实现重复编程的方法,并可以推广至其他任何带有otprom的单片机系列的编程应用中。
    
    1 87c196mc单片机内部存储器的编程方式
    
    intel 87c196mc单片机支持三种编程方式:自动编程方式(使87c196mc单片机不用eprom编程器即可从外部eprom对自己编程)、从机编程方式(给外部eprom编程器提供了一个标准接口)和实时编程方式(运行中编程方式,可以在软件控制下实时对单个eprom单元编程)。和其他方式不同,实时编程可以在不进入全eprom编程方式下完成。
    
    对于intel 87c196mc单片机的otprom只能编程,不能擦除,但在编程时可以验证是否已确实编程。对0tprom可以采用2种编程方法:在从机编程方式下或在专门的otprom编程方式下编程。otprom为87c196mc单片机提供了辅助的存储器保护手段,它可以禁止总线控制器执行外部取指周期,若企图把一个外部地址装载到pc寄存器,芯片将复位。这种自动复位功能对跑飞的代码也提供了一种额外的恢复手段。使用时应根据实际需要采取不同的编程方式。
    
    2 87c196mc单片机内部存储器的重复编程方法
    
    单片机87c196mc的ea引脚(外部访问允许端,87c196mc plcc84-36脚)用来控制访问内部存储器或外部存储器。当ea=o时,所有访问都是对片外存储器的;当ea=1时,对2000h~5fffh单元的访问都是对片内otprom/rom的。编程方式下,ea=12.5 v。由于复位时ea的电平被锁存,难以通过外部硬件电路来实现程序空间的选择。这里通过应用程序语句来控制程序地址范围,相当于ea的电平变化作用。本文主要应用了intel汇编语言的长跳转指令ump来实现控制访问内、外存储器的功能,下面介绍两种常用的方法。
    
    2.1片内编程操作方法
    
    所谓87c196mc单片机otprom的不可擦除性,实质上是不可实现从“0”到“1”的编程,而只能完成从“1”到“o”的编程。以下通过简单的程序实例来介绍这种方法。
    
    ljmp nextl
    cseg at 2600h
    nextl:……
    
    上述语句实际上代表的是ljmp2600h.其机器码为e79c04,当地址2600h变化时,得到一组对应的机器码,通过对这一组机器码进行分析,就可以得到该方法的原理,如表1所列。
    
    
    
    机器码e79c04的后两个字节代表了汇编程序语句中的地址(04代表了2600h,14代表了3600h……)。当一个字节从4位全是“1”变成4位全是“o”,且每次只有一个“l”变为“0”时,可以有多种不同的变法,如表2所列。
    
    
    
    由于