ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:39KB ,
资源ID:3769919      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3769919.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(给初学者,stc12xx单片机内部eeprom例程解释.doc)为本站会员(11****ws)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

给初学者,stc12xx单片机内部eeprom例程解释.doc

1、STC12C5A 的 eeprom 只能按扇区擦除并且只有擦过的才能写数据,很麻烦但是存储一些较大的数组还是很有用的。这是一个示例程序,但是其中使用的部分语句对新手们来说并不常见,我试着解释一下,其中不常见的语句也可以替换,除倾斜字体部分,其余均来自网络。下一篇放上替换过的程序。/*- STC International Limited - 一个完整的 EEPROM 测试程序,用宏晶的下载板可以直接测试STC12C5AxxAD 系列单片机 EEPROM/IAP 功能测试程序演示STC12C52xxAD 系列单片机 EEPROM/IAP 功能测试程序演示STC11xx 系列单片机 EEPROM/

2、IAP 功能测试程序演示STC10xx 系列单片机 EEPROM/IAP 功能测试程序演示- STC International Limited - 宏晶科技 设计 2009/1/12 V1.0 - Mobile: 13922805190 - Fax: 0755-82944243 - Tel: 0755-82948412 - Web: www.MCU-M -本演示程序在 STC-ISP Ver 3.0A.PCB 的下载编程工具上测试通过,EEPROM 的数据在 P1 口上显示, 如果要在程序中使用或在文章中引用该程序,请在程序中或文章中注明使用了宏晶科技的资料及程序*/#include #in

3、clude typedef unsigned char INT8U;/替换为 #define uchar unsigned chartypedef unsigned int INT16U;/替换为 #define uint unsigned intsfr IAP_DATA = 0xC2;sfr IAP_ADDRH = 0xC3;sfr IAP_ADDRL = 0xC4;sfr IAP_CMD = 0xC5;sfr IAP_TRIG = 0xC6;sfr IAP_CONTR = 0xC7;/使用内部 EEPROM 时需要用到的寄存器,宏晶的头文件也有定义/定义 Flash 操作等待时间及允许 I

4、AP/ISP/EEPROM 操作的常数/#define ENABLE_ISP 0x80 /系统工作时钟30MHz 时,对 IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x81 /系统工作时钟24MHz 时,对 IAP_CONTR 寄存器设置此值#define ENABLE_ISP 0x82 /系统工作时钟20MHz 时,对 IAP_CONTR 寄存器设置此值/我用的 11.0592 晶振,按照 20 MHz 设置,没问题/#define ENABLE_ISP 0x83 /系统工作时钟12MHz 时,对 IAP_CONTR 寄存器设置此值/#define ENABL

5、E_ISP 0x84 /系统工作时钟6MHz 时,对 IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x85 /系统工作时钟3MHz 时,对 IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x86 /系统工作时钟2MHz 时,对 IAP_CONTR 寄存器设置此值/#define ENABLE_ISP 0x87 /系统工作时钟1MHz 时,对 IAP_CONTR 寄存器设置此值#define DEBUG_DATA 0x5A /本测试程序最终存储在 EEPROM 单元的数值#define DATA_FLASH_START_ADDRESS 0

6、x00 /STC5Axx 系列 EEPROM 测试起始地址union union_temp16INT16U un_temp16;INT8U un_temp82;my_unTemp16;/为了分离出 EEPROM16 位地址的高位和低位,用除法和求余运算也能实现这个目的/*union 共用体名 数据类型 成员名 ; 数据类型 成员名 ; . 变量名 ;/公用体,百度一下,你就知道。*/INT8U Byte_Read(INT16U add); /读一字节,调用前需打开IAP 功能void Byte_Program(INT16U add, INT8U ch); /字节编程,调用前需打开 IAP 功能

7、void Sector_Erase(INT16U add); /擦除扇区void IAP_Disable(); /关闭 IAP 功能void Delay();/函数声明void main (void)INT16U eeprom_address;/uint eeprom_addressINT8U read_eeprom;/uchar read_eeprom P1 = 0xF0; /演示程序开始,让 P13:0 控制的灯亮Delay(); /延时P1 = 0x0F; /演示程序开始,让 P17:4 控制的灯亮Delay() ; /延时/将 EEPROM 测试起始地址单元的内容读出eeprom_ad

8、dress = DATA_FLASH_START_ADDRESS; /将测试起始地址送给 eeprom_addressread_eeprom = Byte_Read(eeprom_address); /读 EEPROM 的值,存到read_eepromif (DEBUG_DATA = read_eeprom) /数据是对的,亮 P1.7 控制的灯,然后在 P1 口上将 EEPROM 的数据显示出来P1 = 0x80; /”按位取反Delay() ; /延时P1 = read_eeprom;else /数据是错的,亮 P1.3 控制的灯,然后在 P1 口上将 EEPROM 的数据显示出来/再将该

9、 EEPROM 所在的扇区整个擦除,将正确的数据写入后,亮 P1.5 控制的灯P1 = 0x08;Delay() ; /延时P1 = read_eeprom;Delay() ; /延时Sector_Erase(eeprom_address); /擦除整个扇区Byte_Program(eeprom_address, DEBUG_DATA);/将 DEBUG_DATA 写入 EEPROMP1 = 0x20; /熄灭 P1.3 控制的灯,亮 P1.5 控制的灯while (1); /CPU 在此无限循环执行此句/读一字节,调用前需打开 IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字

10、节INT8U Byte_Read(INT16U add)IAP_DATA = 0x00;IAP_CONTR = ENABLE_ISP; /打开 IAP 功能, 设置 Flash 操作等待时间IAP_CMD = 0x01; /IAP/ISP/EEPROM 字节读命令my_unTemp16.un_temp16 = add;/把 add 赋给共用体IAP_ADDRH = my_unTemp16.un_temp80; /设置目标单元地址的高 8 位地址IAP_ADDRL = my_unTemp16.un_temp81; /设置目标单元地址的低 8 位地址/EA = 0;IAP_TRIG = 0x5A;

11、 /先送 5Ah,再送 A5h 到 ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xA5; /送完 A5h 后,ISP/IAP 命令立即被触发起动_nop_();/EA = 1;IAP_Disable(); /关闭 IAP 功能, 清相关的特殊功能寄存器,使 CPU 处于安全状态,/一次连续的 IAP 操作完成之后建议关闭 IAP 功能,不需要每次都关return (IAP_DATA);/字节编程,调用前需打开 IAP 功能,入口:DPTR = 字节地址, A= 须编程字节的数据void Byte_Program(INT16U add, INT8U ch)IAP_CONTR

12、= ENABLE_ISP; /打开 IAP 功能, 设置 Flash 操作等待时间IAP_CMD = 0x02; /IAP/ISP/EEPROM 字节编程命令my_unTemp16.un_temp16 = add;IAP_ADDRH = my_unTemp16.un_temp80; /设置目标单元地址的高 8 位地址IAP_ADDRL = my_unTemp16.un_temp81; /设置目标单元地址的低 8 位地址IAP_DATA = ch; /要编程的数据先送进 IAP_DATA 寄存器/EA = 0;IAP_TRIG = 0x5A; /先送 5Ah,再送 A5h 到 ISP/IAP 触

13、发寄存器,每次都需如此IAP_TRIG = 0xA5; /送完 A5h 后,ISP/IAP 命令立即被触发起动_nop_();/EA = 1;IAP_Disable(); /关闭 IAP 功能, 清相关的特殊功能寄存器,使 CPU 处于安全状态,/一次连续的 IAP 操作完成之后建议关闭 IAP 功能,不需要每次都关/擦除扇区, 入口:DPTR = 扇区地址void Sector_Erase(INT16U add)IAP_CONTR = ENABLE_ISP; /打开 IAP 功能, 设置 Flash 操作等待时间IAP_CMD = 0x03; /IAP/ISP/EEPROM 扇区擦除命令my

14、_unTemp16.un_temp16 = add;IAP_ADDRH = my_unTemp16.un_temp80; /设置目标单元地址的高 8 位地址IAP_ADDRL = my_unTemp16.un_temp81; /设置目标单元地址的低 8 位地址/EA = 0;IAP_TRIG = 0x5A; /先送 5Ah,再送 A5h 到 ISP/IAP 触发寄存器,每次都需如此IAP_TRIG = 0xA5; /送完 A5h 后,ISP/IAP 命令立即被触发起动_nop_();/EA = 1;IAP_Disable(); /关闭 IAP 功能, 清相关的特殊功能寄存器,使 CPU 处于安

15、全状态,/一次连续的 IAP 操作完成之后建议关闭 IAP 功能,不需要每次都关void IAP_Disable()/关闭 IAP 功能, 清相关的特殊功能寄存器,使 CPU 处于安全状态,/一次连续的 IAP 操作完成之后建议关闭 IAP 功能,不需要每次都关IAP_CONTR = 0; /关闭 IAP 功能IAP_CMD = 0; /清命令寄存器,使命令寄存器无命令,此句可不用IAP_TRIG = 0; /清命令触发寄存器,使命令触发寄存器无触发,此句可不用IAP_ADDRH = 0;IAP_ADDRL = 0;void Delay()INT8U i;INT16U d=5000;while (d-)i=255;while (i-);

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。