没有合适的资源?快使用搜索试试~ 我知道了~
首页如何编写STC单片机的ISP协议
资源详情
资源评论
资源推荐

如何编写如何编写STC单片机的单片机的ISP协议协议
本文即介绍此情况下的ISP(In-System-Programming)程序设计方法,以及在SST和STC单片机上的具体实现.。
1ISP实现基本结构
ISP的实现方式有很多种,但大致都遵循图1所示流程.
图1
其中,判断用户ISP选择,一般有以下几种方式.
(1)连接计算机系统,由系统的命令选择
进入用户ISP选择判断时,先由单片机发送特定特征数据,然后等待命令数据,如果在一定的时间内,接收到计算机系统发出的选择
命令则进入用户代码升级,否则直接跳转到用户代码执行.
(2)由用户板上的跳线选择
一般利用单片机空余的端口,设计一个代码升级选择跳线.进入用户ISP选择判断时,单片机可以直接根据此端口的状态判断进入
用户代码升级还是直接跳转到用户代码执行.
(3)由用户板操作功能选择
在用户板的功能菜单或功能组合中,允许用户选择代码升级功能,同时,在外部存储器中存放相应的标志.当选择代码升级功能时,
在外部存储器中写入特定数据,然后程序复位.进入用户ISP选择判断时,判断外部存储器中的数据,如果符合条件则进入用户代码
升级,否则直接跳转到用户代码执行.
2IAP程序设计
目前,许多单片机都支持IAP功能,一般这些单片机内部都包含两个Flash块,在一块Flash中运行的程序可对另一块Flash进行擦除
和重新编程.一般都将ISP程序存放在容量较小的一块Flash中(Block1),而将用户代码存放在容量较大的一块Flash中
(Block0).Block1中的ISP程序对Block0中的用户代码进行擦除和重新编程.
下面以两种51系列兼容的Flash单片机为例,介绍IAP的程序设计.一种是SST89C54,另一种是STC89C516RD.
(1)SST89C54相关特性
SST89C54内部有20KB(16KB+4KB)程序存储器,统一编址.Block0为0000H~3FFFH;Block1为F000H~FFFFH.Block1可以选择
映射到0000H地址开始的1KB/2KB/4KB程序区.
(2)STC89C516RD相关特性
SST89C516RD内部有72KB(64KB+8KB)程序存储器.Block0为0000H~FFFFH,Block1可以选择映射到0000H地址开始的8KB程
序区(上电复位缺省为地址映射).
SST与STC单片机的IAP操作几乎完全相同,本刊网站(www.dpj.com.cn)中给出了IAP函数的C程序源代码IAP.C.要特别注意的
是,Block0_erase函数中对于block0的选择,两种单片机是不同的(正好相反).
3ISP程序到用户代码的切换
在设计中一般都将ISP程序设计为上电复位后运行的程序,如果不需要用户代码升级或升级完成后,就要将程序切换到用户代码
执行.ISP程序到用户代码的切换,不同的单片机各不相同.
(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

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0