下面以STC15W4K32S4单片机为例,介绍片内Data Flash(E2PROM)的编程使用。
(1)设置ISP/IAP特殊功能寄存器地址声明
(2)设置ISP/IAP命令及等待时间
(3)字节数据读出
(4)字节编程写入
(5)扇区擦除
特别说明:每次对Data Flash操作时,都要先送5AH,后送0A5H到ISP/IAP触发寄存器,用于触发ISP/IAP命令。CPU在等待ISP/IAP操作完成后,才会继续执行下面的指令。对扇区擦除时,输入该扇区内的任意地址均可,而且只有扇区擦除,没有字节擦除。当进行字节编程时,该字节必须是FFH,否则必须先将整个扇区擦除,才能进行字节编程。擦除后,整个扇区的字节内容为FFH。
【例4-5】 假定要读出E2PROM内0100H地址的内容,并修改0101H地址的内容,读子程序、擦除子程序和编程写入子程序程序段如下:
在一次连续的IAP操作完成之后,建议关闭IAP功能,将相关的特殊功能寄存器清0,使CPU处于安全状态,但是不需要每次都关。IAP功能关闭子程序段如下:
【例4-6】 编程实现对Data Flash操作测试,要求逐步完成以下功能操作:
1)用P1口连接8个LED指示灯(L0~L7),低电平有效。
2)程序开始执行时,点亮指示灯L0。
3)然后进行扇区擦除操作并检验(假设擦除、检测0扇区),若擦除成功再点亮L1。
4)接着从Data Flash的0000H地址开始写入数据,整个扇区写入完成后再点亮L2。(www.xing528.com)
5)接着再对数据进行校验,若校验成功点亮L3。
6)若中途某一步测试错误,点亮L7,表示测试失败,并用P2、P0口显示出错位置。
程序结构:采用主从结构设计程序。按照程序要求,将各个功能设计由子程序完成。因此,本软件包括主程序、字节读子程序、字节编程子程序、扇区擦除子程序、关闭IAP功能子程序和延时子程序,各功能子程序分配了特定的目标任务。主程序负责完成初始参数设置,并按顺序调用这些子程序,完成整个扇区的测试检查任务。系统晶振频率设置为18.432MHz。
算法思路:对扇区擦除操作只要调用扇区擦除子程序,可一次性自动擦除一个扇区(512B),若擦除成功,则整个扇区字节数均为0FFH;对于扇区字节的读出和编程写入操作,由于没有连续读/写指令,每调用1次读/写子程序,只能完成1个字节的操作。因此,读/写操作1个扇区时,必须设计一个512次的循环子程序,每循环1次,只能读或写操作1个字节(编程写入数据时,每个字节按顺序编程写入不同的数值)。至于校验,就是逐个读出扇区中每个字节数据→A,再使用CJNE指令,与目标值比较看是否相等:若相等,则擦除或写入操作成功,否则,擦除或写入失败。
资源分配:
1)P1口:控制5个指示灯(L0、L1、L2、L3、L7)亮灭。
2)DPTR:数据指针,指向目标地址。
3)R2、R3:循环次数控制,1个扇区512B,应置512次循环控制。
4)33H:存放编程写入操作时的数值。
5)30H、31H、32H:延时循环初值,控制三重循环延时时间。
6)P0、P2:操作出错时,从此处输出显示错误位置。
程序代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。