/*

--- STC International Limited ----------------

一个完整的EEPROM 测试程序,用宏晶的下载板可以直接测试

STC12C5AxxAD 系列单片机 EEPROM/IAP 功能测试程序演示

STC12C52xxAD 系列单片机 EEPROM/IAP 功能测试程序演示

STC11xx 系列单片机 EEPROM/IAP 功能测试程序演示

STC10xx 系列单片机 EEPROM/IAP 功能测试程序演示

--- STC International Limited ------------------

--- 宏晶科技  设计 2009/1/12 V1.0 --------------

--- Mobile: 13922805190 ------------------------

--- Fax: 0755-82944243 -------------------------

--- Tel: 0755-82948412 -------------------------

本演示程序在STC-ISP Ver 3.0A.PCB 的下载编程工具上测试通过,EEPROM 的数据

在P1 口上显示, 如果要在程序中使用或在文章中引用该程序,请在程序中或文章中

注明使用了宏晶科技的资料及程序

*/

#include

#include

typedef unsigned char  INT8U;

typedef unsigned int   INT16U;

sfr IAP_DATA    = 0xC2;

sfr IAP_ADDRH   = 0xC3;

sfr IAP_ADDRL   = 0xC4;

sfr IAP_CMD     = 0xC5;

sfr IAP_TRIG    = 0xC6;

sfr IAP_CONTR   = 0xC7;

//定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数

//#define ENABLE_ISP 0x80 //系统工作时钟<30MHz 时,对IAP_CONTR 寄存器设置此值

//#define ENABLE_ISP 0x81 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值

#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值

//#define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值

//#define ENABLE_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 0x00  //STC5Axx 系列 EEPROM 测试起始地址

union union_temp16

{

INT16U un_temp16;

INT8U  un_temp8[2];

}my_unTemp16;

INT8U Byte_Read(INT16U add);              //读一字节,调用前需打开IAP 功能

void Byte_Program(INT16U add, INT8U ch);  //字节编程,调用前需打开IAP 功能

void Sector_Erase(INT16U add);            //擦除扇区

void IAP_Disable();                       //关闭IAP 功能

void Delay();

void main (void)

{

INT16U eeprom_address;

INT8U  read_eeprom;

P1 = 0xF0;                            //演示程序开始,让 P1[3:0] 控制的灯亮

Delay();                              //延时

P1 = 0x0F;                            //演示程序开始,让 P1[7:4] 控制的灯亮

Delay()    ;                          //延时

//将EEPROM 测试起始地址单元的内容读出

eeprom_address = DATA_FLASH_START_ADDRESS;  //将测试起始地址送eeprom_address

read_eeprom = Byte_Read(eeprom_address);    //读EEPROM的值,存到read_eeprom

if (DEBUG_DATA == read_eeprom)

{   //数据是对的,亮  P1.7 控制的灯,然后在 P1 口上将 EEPROM 的数据显示出来

P1 = ~0x80;

Delay()    ;                            //延时

P1 = ~read_eeprom;

}

else

{   //数据是错的,亮 P1.3 控制的灯,然后在 P1 口上将 EEPROM 的数据显示出来

//再将该EEPROM所在的扇区整个擦除,将正确的数据写入后,亮 P1.5 控制的灯

P1 = ~0x08;

Delay()    ;                            //延时

P1 = ~read_eeprom;

Delay()    ;                            //延时

Sector_Erase(eeprom_address);           //擦除整个扇区

Byte_Program(eeprom_address, DEBUG_DATA);//将 DEBUG_DATA 写入 EEPROM

P1 = ~0x20;                 //熄灭 P1.3 控制的灯,亮 P1.5 控制的灯

}

while (1);                      //CPU 在此无限循环执行此句

}

//读一字节,调用前需打开IAP 功能,入口:DPTR = 字节地址,返回:A = 读出字节

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;

IAP_ADDRH = my_unTemp16.un_temp8[0];    //设置目标单元地址的高8 位地址

IAP_ADDRL = my_unTemp16.un_temp8[1];    //设置目标单元地址的低8 位地址

//EA = 0;

IAP_TRIG = 0x5A;   //先送 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 = ENABLE_ISP;         //打开 IAP 功能, 设置Flash 操作等待时间

IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字节编程命令

my_unTemp16.un_temp16 = add;

IAP_ADDRH = my_unTemp16.un_temp8[0];    //设置目标单元地址的高8 位地址

IAP_ADDRL = my_unTemp16.un_temp8[1];    //设置目标单元地址的低8 位地址

IAP_DATA = ch;                  //要编程的数据先送进IAP_DATA 寄存器

//EA = 0;

IAP_TRIG = 0x5A;   //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此

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_unTemp16.un_temp16 = add;

IAP_ADDRH = my_unTemp16.un_temp8[0];    //设置目标单元地址的高8 位地址

IAP_ADDRL = my_unTemp16.un_temp8[1];    //设置目标单元地址的低8 位地址

//EA = 0;

IAP_TRIG = 0x5A;   //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此

IAP_TRIG = 0xA5;   //送完A5h 后,ISP/IAP 命令立即被触发起动

_nop_();

//EA = 1;

IAP_Disable();  //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,

//一次连续的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--);

}

}

单片机系统测试c语言程序,宏晶最新1T8051单片机内部EEPROM测试C语言程序相关推荐

  1. 单片机c语言实训例子基于mega16,基于AVR单片机的mega16内部EEPROM操作C语言程序设计...

    原标题:基于AVR单片机的mega16内部EEPROM操作C语言程序设计 #include #include #include #define uchar unsigned char #define ...

  2. 微信小程序:紫色特别舒服的UI趣味测试微信小程序

    这是一款UI特别舒服的一款趣味测试小程序源码 该源码里面包含了多种评测,每一种评测都包含大多小细节 小编也给它加了几个流量主位置以便大家可以更好的运营 好像前段时间小编也有发布过一款这种类型的小程序 ...

  3. 微信小程序上传体验版并邀请其他人测试体验(小程序的发布上线)

    前言 微信小程序的正式发布上线 需要经过三个环节 如图登陆 微信公众平台(最好用账号密码登陆) 可以查看到 第一个环节开发版本 假设项目开发基本完成了 就可以 直接在原生的开发工具中点击右上角的上传按 ...

  4. 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)

    TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序.其中,TestComplete支持测试使 ...

  5. Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序

    Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序 实现功能 C++实现代码 实现功能 测试BOOST_BIND_NO_PLACEHOLDERS的程序 C++实现代码 #def ...

  6. C语言单片机数码管a段亮,宏晶单片机设置强上拉模式让数码管更亮!

    STC(宏晶)系列单片机的I/O口具有强上拉模式,何为强上拉模式? 宏晶单片机I/O口可以设置成四种模式:准双向口/弱上接,推挽/强上拉,输入/高阻,设置成推挽/强上拉,无论输出1和0时能承受的电流都 ...

  7. 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...

    最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序 基于单片机系统的步进电机驱动 摘 要 本文介绍了基于80C52单片机的步进电机控制系统的设计.分别概括的介绍了单片机和步进 ...

  8. 单片机 c语言 宏程序,宏程序学习的几点心得.doc

    有关宏程序学习的几点心得 天长市职业教育中心 蒋春飞 HNC-21/22T为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算.逻辑运算和函数的混合运算,此外宏程序还提供了循环 ...

  9. 姚永平是STC南通国芯微电子/宏晶科技创始人,谈单片机设计

    姚永平是STC南通国芯微电子/宏晶科技创始人,他创造了中国IC设计公司的奇迹,他的8051单片机已经占领了全球市场的80%以上,并且他的市场优势还在不断扩大.他几乎不接受媒体采访,但不久前他向本站披露 ...

最新文章

  1. Android多媒体开发
  2. 用神经网络分类里和外
  3. 文巾解题 264. 丑数 II (剑指 Offer 49. 丑数)
  4. django_rest_framework之GenericAPIView(三)
  5. ML 自学者周刊:第 2 期
  6. soapui模拟桩mockservice---模拟后台服务器
  7. HikariCP连接池配置
  8. 如何调位置_如何知道手表是偷停还是真没动力了?看完之后你在家也能测
  9. 视频丨包不同的沙雕敏捷之砸锅卖铁买兰博
  10. 飞桨模型保存_史上最全解读 | 飞桨模型库重大升级 主流算法模型全覆盖
  11. C语言程序设计精要,C语言程序设计精要.doc
  12. Linux电源管理-wakeup count
  13. CodeForces - 1152 B. Neko Performs Cat Furrier Transform
  14. win10企业版2016长期服务激活教程
  15. auto-cpufreq安装及配置过程
  16. linux定时删除或者压缩日志文件
  17. [易语言] 六边形扫雷游戏实战开发
  18. Windows下快速获取一个文件夹下所有文件的名称列表
  19. 读SQL进阶教程笔记14_SQL编程要点
  20. nz-select 选择器

热门文章

  1. 华为云OBS文件上传和下载
  2. 图片格式转换(File、Blob、base64)
  3. 算法--蒙特卡罗算法/正态分布随机数生成
  4. Nginx反向代理服务器域名解析配置实操
  5. arm64的ioremap_ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
  6. 查询出只有两门课程的全部学生的学号和姓名
  7. (转载)经纬度与西安80,北京54的坐标系转换(JAVA实现)
  8. Docker学习笔记2——Docker组件(幕布笔记)
  9. 配置一套个人学习AI技术的计算机
  10. 计算机事业单位专技岗评职称,事业单位如何申报职称?这些你需要了解!考个经济师证评职称板上钉钉!...