在应用可编程测控网络设计
电子产品的更新换代越来越快,怎样缩短设计时间,快速推出产品,降低设计成本和提高系统整体性能是每个设计人员共同关心的问题。一种叫做在应用可编程(In Application Programming-IAP)的设计方案应运而生,它可以在现场(当原存在的代码正在运行时)重新写入运行代码。这种方案的优点是可以降低开发代码的时间、可在装配线上测试和改装产品、可在现场修正代码错误、可以容易地添加产品新功能甚至可以远程进行系统的升级。目前,实现在应用可编程一般有两种方法:一种方法是使用与单片机配套的专用芯片;另一种是采用新型的支持在应用可编程的单片机。本文介绍一种基于AT89C51单片机的在应用可编程的设计方案,它只占用AT89C51的UART,只需少数的几块芯片就能实现上述功能。特别适用于需要用UART进行通讯的测控网络的设计。
1 设计思路
基于8051核的单片机提供两个独立的地址空间,一个用于程序存储器,一个用于数据存储器。这种特殊的地址结构在任何情况下都不会将数据写入程序空间,保护程序代码不会被数据覆盖,但这种特性使单片机在应用可编程不能实现。如果采用一种方法"欺骗"系统使之误认为程序存储器即为数据存储器,则可向程序存储器中写数据了。"欺骗"系统的方法是在IAP期间暂时将程序存储器"重新分类"为数据空间而不是程序空间,然后在IAP完成后再将它重新分类为程序空间。这种方案需要一款存储器既可以当作数据存储器又能作为程序存储器。现在市面上的多种具有掉电保护功能的静态随机存储器既具有数据存储器的高读写速度又具有程序存储器的非挥发性。如DALLAS公司的DS1230Y-70是与通用RAM27256管脚兼容的,内嵌锂电池保护的非易失性存储器,读写速度为70ns,掉电状态下可以保存数据10年。
按照上述思路设计的具有在应用可编程能力的单片机系统结构框图如图1所示。该系统有以下几个特点:(1)有三块RAM,其中RAM3是数据存储器,RAMA、RAMB既是数据存储器又是程序存储器,RAMA和RAMB采用DS1230Y-70静态RAM。RAMA和RAMB具有相同的地址,当其中一块作为程序存储器时,另一块是数据存储器。AT89C51的数据空间与地址空间分开的特性保证了这两块存储器不会冲突。(2)增加了选择电路,用来将程序存储器和数据存储器"重新分类",通过DN_CON控制信号线来选择是将WR信号还是将PSEN信号送入相应的静态RAM。(3)增加了串行EEPROM以保存重要的信息,如模块号及下载标志等。
AT89C51具有4K的片内Flash 存储器,可以存放引导程序。系统初始化、串口中断等程序作为引导程序,固化在AT89C51的Flash 存储器中,而将主程序放在32KB的静态RAM程序存储器中。因此,该系统程序存储器的地址空间从0000h~03FFh和8000H~0FFFFH。而数据存储器地址从0000H~0FFFFH,如图2所示。引导程序中将串口中断设定为最高优先级,当AT89C51接收到程序代码下载的命令后,将向8000H~0FFFH的数据空间依次写入程序代码。当程序代码写结束时,改变DN_CON控制信号,使原来的数据存储器变为程序存储器,而原来的程序存储器变为数据存储器。在串口中断程序结束时,将堆栈中的串行中断返回指针指向8000H,并退出中断,使程序跳至8000H运行下载的程序代码。图2中串行EEPROM采用基于I2C总线的24C01芯片,用以存放一些关键的数据信息,如测控模块的站号、下载标志等。
2 选择电路的实现
3 引导程序的设计
引导程序的设计,关键要解决以下问题:(1)系统上电时,要能自动设别该系统的主程序代码是否下载及下载在哪个静态RAM中,并能自动正确执行。(2)要保证其它的中断能正确响应,包括除程序下载命令外的其它串行中断。(3)在程序下载串行中断响应后,要能正确退出中断,并跳到主程序的正确位置执行代码。
在8000H开始的主程序区的顶端设立中断映射区如图2所示,在原来的000BH、0013H等中断入口地址处设立相应的长调用语句Ljmp 800BH,Ljmp 8013H,将除串行中断以外的所有中断跳至从8000H开始的中断映射区。而在800BH和8013H等地方放置真正的中断程序入口地址。程序下载命令之外的其它串行中断由串行中断程序判别并跳至8023H,串行中断程序流程图4所示。
引导程序的主流程图如图5所示。引导主程序中包含系统初始化、串口设置及读下载标志等程序。在引导程序的中断程序中(如图4)包括程序下载命令的解释程序和代码的下载操作。为了编程方便,下载的程序代码都是ASCII码,这样可以方便地定义一些控制字符。下载的简单协议为"AAH(下载命令)+程序代码(以ASCII 码形式)+1BH(文件结束符)+异或校验和"。当中断程序接收到二进制数
- 基于AT89C51单片机的微型可编程控制器(04-23)
- 基于AT89C51单片机的量程自切换频率计(01-25)
- 基于AT89C51单片机的十进制计算器系统设计(06-29)
- 基于单片机的智能计步器设计(09-20)
- 可编程逻辑器件与单片机在双控制器中的设计(06-04)
- AT89C51制作的简单计数器(12-03)