已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FLASH模拟EEPROM本程序利用S08系列单片机的片内Flash模拟EEPROM。解决部分8位机没有EEPROM导致在运用上的局限。本程序提供一个初始化函数和三个功能函数。用户必须在调用功能函数前调用调用初始化函数。三个功能函数分别是字节写入、字节读取、EEPROM全擦除。用户必须保证调用功能函数前有至少30Bate的栈空间。本程序参考飞思卡尔公司提供的在 HCS08 微控制器上使用 FLASH 存储器模拟 EEPROM。并在源程序的基础上精简了部分功能,减少了RAM使用量。并尝试使用分页机制确定EEPROM地址。接口函数的EEPROM地址寻址由页地址和页内偏移量组成。即把用户定义的EEPROM分为若干个大小为256字节的页。其地址与FLASH地址的换算关系为:FLASH真实地址=EEPROM空间起始地址+页地址256+页内偏移地址用户在使用EEPROM是只用确定数据保存在EEPROM的相对地址即可。接口函数原型为:EEPROM_WRITE_DATA(数据,页地址, 页内偏移地址);Char EEPROM_READ_DATA(页地址, 页内偏移地址);1. 程序流程分析与设计。由于S08系列单片机在Flash写入时序中不能进行任何的Flash读操作,Flash写入指令必须放到RAM中执行并关闭所有可屏蔽中断。程序流程如图13-1-?。 字节写入/.全擦除程序流程 字节读取程序流程 图13-1-?2.程序源代码。此程序在CodeWarrior 6.0继承编译环境中编译通过/*/河南工业大学Freescale MCU&DSP联合实验室/ 文件名:flash_program.h/ CPU :MC9S08AW60/ 版 本:v1.0/ 日 期:2008年8月12日/ 调试环境:CodeWarrior 6.0 / 作 者:曾 滔/ 描 述: 头文件,用于保存初始化EEPROM设定、用户定制参数、编译器参数等信息。/*/#include #include derivative.h#include /*flash编程指令(请勿改动)*/#define BLACK_CHECK 0x05 /查空指令#define BITE_PROGRAM 0x20 /字节编程指令#define BURST_PROGRAM 0x25 /快速编程指令#define PAGE_ERASE 0x40 /页擦除指令(1页=512字节)#define MASS_ERASE 0x41 /全擦除指令 /*用户定制参数(根据单片机型号和用户flash使用情况定制)*/#define EEPROM_START_ADDRESS 0xE000 /EEPROM区起始地址。512B的倍数#define EEPROM_PAGE_NUM 8 /EEPROM页数。1page=256B #define BUS_FREQUENCY 2000 /总线频率。单位(KHz)/*编译器相关参数*/#define INT8U unsigned char /无符号字节变量。根据编译器更改。默认CodeWarrior 6.0#define INT16U unsigned short int /无符号字变量。根据编译器更改。默认CodeWarrior 6.0/*EEPROM API函数原型*/初始化程序。此函数必须在使用EEPROM前调用。建议用户在系统初始化是调用。void INIT_EEPROM(void);/EEPROM擦除函数。擦除所有EEPROM数据。void EEPROM_ERASE(void);/EEPROM字节写入函数。写入一个字节到EEPROM指定区域。void EEPROM_WRITE_DATA(INT8U data,INT8U EEPROM_page,INT8U offset_address)/EEPROM读出函数。读出一个指定的区域所保存的字节的到函数返回值。char EEPROM_READ_DATA(INT8U EEPROM_page,INT8U offset_address);/*END*/*/河南工业大学Freescale MCU&DSP联合实验室/ 文件名:flash_program.c/ C P U :MC9S08AW60/ 版 本:v1.0/ 日 期:2008年8月12日/ 调试环境:CodeWarrior 6.0 / 作 者:曾 滔/ 描 述:提供了一个初始化函数和三个功能函数供用户调用,没有可更改参数。 /*/#include flash_program.hconst INT8U FLASH_CODE= / ; flash操作代码 0x45, 0x18, 0x26, / LDHX #$1826 ; FCMD地址写入H:X 0xA6, 0x00, / LDA #$00 ; 0x00为命令占位符 0xF7, / STA ,X ; 将命令写入FCMD命令缓存器 0x5A, / DECX ; 指针指向 FSTAT 0xF6, / LDA ,X ; 0xAA, 0x80, / ORA #$80 ; 0xF7, / STA ,X ; 置位FSTAT_FCBEF。启动flash写入命令 0xF6, / LDA ,X ; 等待3个时钟周期(请勿删除此代码) 0xF6, / LDA ,X ; 读取FSTAT 0xA5, 0x30, / BIT #$30 0x26, 0x05, / BNE *+6 ; 错误则返回/LOOP 0xF6, / LDA ,X ; 等待写操作结束 0xA5, 0x40, / BIT #$40 0x27, 0xFB, / BEQ *-3 ; 跳转到LOOP/EXIT: 0X81 /RTS ; 返回; /*初始化函数*/#if BUS_FREQUENCY = 12000 void INIT_EEPROM(void)FCDIV=(BUS_FREQUENCY/(8*175)|0x40)-1; #endif#if BUS_FREQUENCY =EEPROM_PAGE_NUM)return; /地址错误返回,保护用户代码address=offset_address+EEPROM_page*256+EEPROM_START_ADDRESS; /地址转化 (void)memcpy(code_space,FLASH_CODE,23); /复制flash操作代码到RAM code_space4 = BITE_PROGRAM; /修改命令占位符为写入命令 DisableInterrupts; /关中断 if (FSTAT&0x10) /清错误标志 FSTAT = FSTAT|0x10; _asm /写入初始化 LDHX address; LDA data; STA ,X; /写入缓存 TSX; JSR 2,x; /跳入RAM执行 EnableInterrupts; /开中断_RESET_WATCHDOG(); /*EEPROM字读取入函数*/char EEPROM_READ_DATA(INT8U EEPROM_page,INT8U offset_address)unsigned short int address; /地址变量char rusult; /数据变量address=offset_address+EEPROM_page*0x100+EEPROM_START_ADDRESS; /地址转换asm LDHX address; LDA ,X; /读取地址到数据变量 STA rusult;_RESET_WATCHDOG();return(rusult); /返回/*EEPROM擦除函数*/void EEPROM_ERASE(void)INT16U address;INT8U i; /循环变量INT8U code_space23; for(i=0;i(EEPROM_PAGE_NUM/2);i+) /分页擦除 address=i*0x200+EEPROM_START_ADDRESS; (void)memcpy(code_space,FLASH_CODE,23); /复制flash操作代码到RAM code_space4 = PAGE_ERASE; /修改命令占位符为擦除命令 DisableInterrupts; /关中断 if (FSTAT&0x10) /清错误标志 FSTAT = FSTAT | 0x10; _asm LDHX address; /擦除地址写入缓存 STA ,X; TSX; JSR 3,x; /跳入RAM执行 EnableInterrupts; /开中断 _RESET_WATCHDOG(); /*END*/*/ 版权所有(c)河南工业大学/ 文件名:mian.c/ C P U :MC9S08AW60/ 版 本:v1.0/ 日 期:2008年8月12日/ 调试环境:CodeWarrior 6.0 / 作 者:曾 滔/ 描 述: 测试Flash模拟EEPROM程序。/*/#include #include derivative.h#include flash_program.h void main(void)char temp;PTADD=0XFF;INIT_EEPROM(); /初始化Flash控制寄存器。do EEPROM_WRITE_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国学教育老师会议
- C语言设计项目实践
- 新入职员工年会
- 教育情调读书分享
- 电影《悟空传》介绍大纲
- 痛风饮食及生活护理建议
- 2025借款合同协议书范本
- 2025二手汽车买卖合同范本格式
- 基于配位化学的含锗物料强化浸取及高选择性萃取体系构建
- 枣仁逐瘀安神汤治疗冠心病PCI术后焦虑抑郁血虚夹瘀证的临床观察
- 2025海南琼海市社区专职网格员招聘为社区专职人员50人(1号)考试笔试模拟试题及答案解析
- 保护江安河保护江安河
- 安全生产信息安全管理制度
- 高职院校专业课程教学质量评价标准
- 驻村干部个人述职报告
- 2025年卫生健康知识试题(附答案)
- 高标准农田建设项目 第3部分:预算定额
- 5年(2021-2025)高考1年模拟地理真题分类汇编专题04 地质地貌(广东专用)(原卷版)
- 林草局事业单位面试题17套和专业题15问及答案
- 2024-2025学年山东名校考试联盟高二上学期期中检测数学试题(解析版)
- 重庆市南开中学高2025-2026学年高三上学期开学第一次检测英语试卷
评论
0/150
提交评论