新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 设计的ISP程序基础解析

设计的ISP程序基础解析

作者:时间:2012-06-08来源:网络收藏

3 到用户代码的切换

中一般都将为上电复位后运行的,如果不需要用户代码升级或升级完成后,就要将程序切换到用户代码执行。程序到用户代码的切换,不同的单片机各不相同。

(1) SST89C54程序区Block1到Block0的切换实现

SST89C54单片机在烧录时,将ISP程序写到Block1,并且烧录映射选择位RB0/RB1(RE-MAP[1:0])。这样程序上电复位时,自动将Block1映射到0000H地址开始的4KB程序区,进入ISP程序执行。由于Block1同时还分配在地址F000H~FFFFH,因此,编译生成ISP程序代码时,设定所有的地址范围都在F000H~FFFFH。需要切换到用户代码(Block0)运行时,修改SFCF[7]控制位VIS,将Block1的0000H地址映射取消,然后程序跳转到地址0000H执行,则开始运行Block0中的用户代码程序。

本刊网站中给出了ISP的C程序源代码ISP.C。需要注意的是,此程序在Keil-C中要建立工程文件,包含 IAP.C函数以及STARTUP.A51,并且在IAP.C和ISP.C中都要去掉STC的定义。为了将地址范围设定到F000H~FFFFH,要将STARTUP.A51中程序入口地址由0改为0F000H,如下:

CSEG AT 0F000H

C_STARTUP: LJMP STARTUP1

还要修改编译选项设置Target选项卡中Off-chip Code memory:Start =0xF000;Size=0x1000;还要设置C51选项卡中Interrupt Vectors at address:0xF000。

(2) STC89C516RD程序区Block1到Block0的切换实现

STC89C516RD单片机在烧录时,将ISP程序写到Block1。(注意:并不烧录SC0/SC1位)。单片机上电复位时,缺省的Block1映射到0000H地址开始的8KB程序区,进入ISP程序执行。需要切换到用户代码(Block0)运行时,ISP修改SFCF[1]控制位SWR,产生一个软复位(Software Reset)。由于SC0和SC1都未烧录,程序软复位后,Block1将不再映射到0000H地址映,则开始运行Block0中的用户代码程序。

本刊网站中给出了ISP的C程序源代码ISP.C。要注意的是:此程序在Keil-C中要建立工程文件,包含IAP.C函数,并且在IAP.C和ISP.C中都要保留STC的定义。

4 与计算机的通信协议

升级用户代码时,需要与计算机进行通信,一般采用RS232串行通信,数据协议采用简单协议。此协议参考了ADuC812单片机的ISP数据协议。(ADuC812单片机硬件内置ISP程序)。

(1) 复位命令(计算机→单片机)

计算机发送4字节复位命令:21H,5AH,00H,A6H,单片机返回复位信息。

(2) 复位信息(单片机→计算机)

复位信息为25字节,前3字节为单片机公司特征字符(如:“ADI”“SST”“STC”),最后1字节为校验和。

(3) 数据包格式(计算机→单片机)

计算机发送数据包格式:07H、0EH、长度、数据、校验和(长度与数据的校验和)。

(4) 擦除命令

计算机发送数据包,其中数据只有1字节,内容为:字符“A”或“C”。单片机擦除用户程序区后返回1字节06H表示成功;05H表示失败。

(5) 编程命令

计算机发送数据包,其中数据内容:“W”,00H,地址高字节,地址低字节,程序数据。单片机返回1字节06H表示成功;05H表示失败。

(6) 运行用户程序

计算机发送数据包,其中数据只有1字节,内容为:字符“U”。单片机返回1字节06H表示成功,然后跳转到用户程序运行。

本刊网站提供了计算机下载软件的C程序源代码Download.C。

结语

根据以上ISP程序思路和实例,大家可以修改ISP初始代码,或者丰富它的ISP功能(读功能、口令控制等),尝试设计自己的ISP程序,定能为自己的系统增色不少。


上一页 1 2 下一页

关键词: 解析 基础 程序 ISP 设计

评论


相关推荐

技术专区

关闭