单片机系统测试c语言程序,宏晶最新1T8051单片机内部EEPROM测试C语言程序
/*
--- 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语言程序相关推荐
- 单片机c语言实训例子基于mega16,基于AVR单片机的mega16内部EEPROM操作C语言程序设计...
原标题:基于AVR单片机的mega16内部EEPROM操作C语言程序设计 #include #include #include #define uchar unsigned char #define ...
- 微信小程序:紫色特别舒服的UI趣味测试微信小程序
这是一款UI特别舒服的一款趣味测试小程序源码 该源码里面包含了多种评测,每一种评测都包含大多小细节 小编也给它加了几个流量主位置以便大家可以更好的运营 好像前段时间小编也有发布过一款这种类型的小程序 ...
- 微信小程序上传体验版并邀请其他人测试体验(小程序的发布上线)
前言 微信小程序的正式发布上线 需要经过三个环节 如图登陆 微信公众平台(最好用账号密码登陆) 可以查看到 第一个环节开发版本 假设项目开发基本完成了 就可以 直接在原生的开发工具中点击右上角的上传按 ...
- 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)
TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序.其中,TestComplete支持测试使 ...
- Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序
Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序 实现功能 C++实现代码 实现功能 测试BOOST_BIND_NO_PLACEHOLDERS的程序 C++实现代码 #def ...
- C语言单片机数码管a段亮,宏晶单片机设置强上拉模式让数码管更亮!
STC(宏晶)系列单片机的I/O口具有强上拉模式,何为强上拉模式? 宏晶单片机I/O口可以设置成四种模式:准双向口/弱上接,推挽/强上拉,输入/高阻,设置成推挽/强上拉,无论输出1和0时能承受的电流都 ...
- 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...
最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序 基于单片机系统的步进电机驱动 摘 要 本文介绍了基于80C52单片机的步进电机控制系统的设计.分别概括的介绍了单片机和步进 ...
- 单片机 c语言 宏程序,宏程序学习的几点心得.doc
有关宏程序学习的几点心得 天长市职业教育中心 蒋春飞 HNC-21/22T为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算.逻辑运算和函数的混合运算,此外宏程序还提供了循环 ...
- 姚永平是STC南通国芯微电子/宏晶科技创始人,谈单片机设计
姚永平是STC南通国芯微电子/宏晶科技创始人,他创造了中国IC设计公司的奇迹,他的8051单片机已经占领了全球市场的80%以上,并且他的市场优势还在不断扩大.他几乎不接受媒体采访,但不久前他向本站披露 ...
最新文章
- 使用SVN+Axure RP 8.0创建团队项目
- Complexer-YOLO:基于语义点云的实时三维目标检测与跟踪
- golang 映射 map 简介
- strings 命令——ELF文件格式与“链接和装载”
- C++编程思想重点笔记(下)
- Mybatis的select方法
- Android: 自定义Tab样式
- [android] No resource found that matches the given name 'Theme.AppCompat.Light'
- (SQLlite3 Source Code 系列之一) 前言
- 微信小程序调试之【不在以下合法域名列表中】
- c语言随机生成1到100随机数_VB之生成随机数
- Xtrabackup远程备份+限速
- php记住用户名功能,php使用cookie实现记住用户名和密码实现代码
- Google是如何设定目标并测量成功的
- SpringClould之Eureka原理详解
- mysql省市区县街道
- Android相同包名不同签名的apk安装失败问题分析
- 设计思维Design Thinking
- Better than better,白山EC2.0发布
- 《8问》| 程晓明:未来一定有世界货币,关键在于设计逻辑
热门文章
- 买二手房注意事项(1)
- C++ OpenGL学习——入门篇
- Java中Excel导出
- 戴森球计划 超级计算机,更新详情 - 科幻游戏 戴森球计划 - 摩点
- 年度推荐7款新媒体运营神器
- Air780E|联通|雁飞格|AT命令|物联网|三元组|鉴权|算法|密钥生成|(4)-联通雁飞格物手动接入步骤
- 软件系统问题排查的一般流程
- 基于Phonon+QT的音视频播放器设计与实现
- 43 | 什么时候使用MySQL的分区表?(分区和分表是有区别的)
- 虹软校招笔试题--算法岗