![]() |
|
||||||||||||||
| | 网站首页 | 文章中心 | 下载中心 | 图片中心 | 论坛 | 淘宝网店 | | ||
|
||
|
|||||
| 在应用可编程测控网络设计 | |||||
作者:佚名 文章来源:不详 点击数: 更新时间:2008-01-10 ![]() |
|||||
|
摘要:介绍一种在应用可编程单片机系统设计方案。该方案设计简单,技术成熟,适合于基于8051核的CISC结构的单片机系统。详细介绍了该方案的实现方法与引志程序及上位机软件的设计。 关键词:串行通讯 在应用可编程(IAP) MCU 电子产品的更新换代越来越快,怎样缩短设计时间,快速推出产品,降低设计成本和提高系统整体性能是每个设计人员共同关心的问题。一种叫做在应用可编程(In Application Programming-IAP)的设计方案应运而生,它可以在现场(当原存在的代码正在运行时)重新写入运行代码。这种方案的优点是可以降低开发代码的时间、可在装配线上测试和改装产品、可在现场修正代码错误、可以容易地添加产品新功能甚至可以远程进行系统的升级。目前,实现在应用可编程一般有两种方法:一种方法是使用与单片机配套的专用芯片;另一种是采用新型的支持在应用可编程的单片机。本文介绍一种基于AT89C51单片机的在应用可编程的设计方案,它只占用AT89C51的UART,只需少数的几块芯片就能实现上述功能。特别适用于需要用UART进行通讯的测控网络的设计。 基于8051核的单片机提供两个独立的地址空间,一个用于程序存储器,一个用于数据存储器。这种特殊的地址结构在任何情况下都不会将数据写入程序空间,保护程序代码不会被数据覆盖,但这种特性使单片机在应用可编程不能实现。如果采用一种方法“欺骗”系统使之误认为程序存储器即为数据存储器,则可向程序存储器中写数据了。“欺骗”系统的方法是在IAP期间暂时将程序存储器“重新分类”为数据空间而不是程序空间,然后在IAP完成后再将它重新分类为程序空间。这种方案需要一款存储器既可以当作数据存储器又能作为程序存储器。现在市面上的多种具有掉电保护功能的静态随机存储器既具有数据存储器的高读写速度又具有程序存储器的非挥发性。如DALLAS公司的DS1230Y-70是与通用RAM27256管脚兼容的,内嵌锂电池保护的非易失性存储器, 按照上述思路设计的具有在应用可编程能力的单片机系统结构框图如图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所示,74HC157是四路二选一芯片。当P1.0(DN_CON)为低电平时,A=Y,此时RAMA的RD接PSEN,WR接VCC; 3 引导程序的设计 引导程序的设计,关键要解决以下问题:(1)系统上电时,要能自动设别该系统的主程序代码是否下载及下载在哪个静态RAM中,并能自动正确执行。(2)要保证其它的中断能正确响应,包括除程序下载命令外的其它串行中断。(3)在程序下载串行中断响应后,要能正确退出中断,并跳到主程序的正确位置执行代码。 在8000H开始的主程序区的顶端设立中断映射区如图2所示,在原来的000BH、0013H等中断入口地址处设立相应的长调用语句Ljmp 800BH,Ljmp 8013H,将除串行中断以外的所有中断跳至从8000H开始的中断映射区。而在800BH和8013H等地方放置真正的中断程序入口地址。程序下载命令之外的其它串行中断由串行中断程序判别并跳至8023H,串行中断程序流程图4所示。 引导程序的主流程图如图5所示。引导主程序中包含系统初始化、串口设置及读下载标志等程序。在引导程序的中断程序中(如图4)包括程序下载命令的解释程序和代码的下载操作。 4 上位机软件的编程 上位机软件可以采用Delphi开发工具编写基于Windows95/98/2000平台下的串行通讯程序。MSCOMM32.OCX控制是微软公司在VB和VC开发软件中随带的串行通信控件,该控件屏蔽了通信过程中的底层操作,程序员应用时只需设置和监视该控件的属性和事件即可完成对串行口的初始化和数据的输入和输出工作。在Delphi5.0中已将它重新定义为TMSComm类。在应用可编程测控网络的设计中需要发送与接收控制字符,这些控制字符有可能包含ASCII值大于80H的字符,因此要求上位机软件既能接收二进制数据又能发送二进制数据。在TMSComm类中一项InputMode属性,当设置InputMode=1时,数据是以二进制方式取回,而发送二进制数据则需要依照TMSComm类的规则通过动态数组和变体的方法实现。 下面是一个简单的发送和接收二进制数据的例子程序: mscomm1.Comport:=1; //操作对象为串口1 mscomm1.Settings:=''9600,N,8,1''; 设置串口参数 mscomm1.Rthreshold:=1; //收到1个字节后触发串口事件 mscomm1.inbuffercount:=0; //清串口接收缓冲区 mscomm1.OutBufferCount:=0; //清串口发送缓冲区 mscomm1.PortOpen:=true; //打开串口 发送例程: var MyFlexibleArray : array of byte; //定义动态数组 Outputdata:variant; //定义变体 Begin SetLength(MyFlexibleArray,1); //在使用动态数组前必须设置它的长度 MyFlexibleArray[0]:=$AA; //将待发送二进制数放入数组 outputdata :=myFlexibleArray; //将动态数组赋给变体 mscomm1.Output:=outputdata; //将变体中的二进制数0AAH发出 end; 在串口事件中接收数据全程 mscomm1.Inputlen:=1; //每次从接收缓冲区中读1个字节数据 mscomm1.InputMode:=1; //以二进制方式接收数据 inbuf:=mscomm1.input; //读缓冲区,将数据接收至inbuf变量 本文所述的在应用可编程测控网络的设计已在FWC-2型大坝自动监测系统中实际使用。该系统基于RS-485网络,可以管理255个测量模块的数据采集和程序下载。运行结果表明,该方案具有设计简单、技术成熟、开发迅速等优点。 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 74hc595串并行输出芯片及其应 应用直流导频自动增益控制的 具备DV解码功能的DVD编码器 高速ADC应用中降低电源噪声的 为高速A/D转换应用设计无噪声 无线接收芯片RX3310A常规应用 SH7322:应用处理器 基于S3C2410的RTC模块应用设 应用SoPC Builder开发电子系 应用于3-D互连的对准晶圆键合 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|