IAP系列单片机和STpic系列单片机机有什么不同

STCCAD系列单片机器件手册宏晶STC - 爱问共享资料
STC12C5A32S2.pdf
STC12C5A32S2.pdf
STC12C5A32S2.pdf
简介:本文档为《STC12C5A32S2pdf》,可适用于IT/计算机领域,主题内容包含STCCAD系列单片机器件手册宏晶STC单片机官方网站:wwwSTCMCUcom(最新网站)wwwMCUMemorycom(原有网址)Updated符等。
侵权或盗版
*若权利人发现爱问平台上用户上传内容侵犯了其作品的信息网络传播权等合法权益时,请按照平台要求书面通知爱问!
赌博犯罪类
用户评论(1)
在此可输入您对该资料的评论~
不错,很全
添加成功至
资料评价:STC89系列高性能单片机及其应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC89系列高性能单片机及其应用
&&STC89系列高性能单片机及其应用
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢项目一单片机应用系统的开发工具
任务1单片机与单片机应用系统
任务2单片机应用程序的输入、编辑、编译与调试
任务3STC单片机应用程序的在线编程与在线调试
任务4STC单片机应用程序的在线仿真
项目二STC15W4K32S4系列单片机增强型8051内核
任务1STC15W4K32S4系列单片机概述
任务2IAP15W4KS4单片机结构与工作原理
任务3IAP15W4K58S4单片机的时钟与复位
项目三IAP15W4K58S4单片机的并行I/O口与应用编程
任务1IAP15W4K58S4单片机并行I/O口的输入/输出
任务2IAP15W4K58S4单片机的逻辑运算
任务3IAP15W4K58S4单片机的逻辑控制
项目四IAP15W4K58S4单片机的存储器与应用编程
任务1IAP15W4K58S4单片机的基本RAM
任务2IAP15W4K58S4单片机扩展RAM的测试
任务3IAP15W4K58S4单片机EEPROM的测试
项目五IAP15W4K58S4单片机的定时器/计数器
任务1IAP15W4K58S4单片机的定时控制
任务2IAP15W4K58S4单片机的计数控制
任务3简易频率计的设计与实践
任务4IAP15W4K58S4单片机的可编程时钟输出
项目六IAP15W4K58S4单片机的中断系统
任务1定时器中断的应用编程
任务2外部中断的应用编程
任务3交通信号灯控制系统设计与实践
项目七IAP15W4K58S4单片机的串行通信
任务1IAP15W4K58S4单片机的双...
直属事业部
扫描关注官方微博
扫描关注官方微信
版权所有(C)2014 清华大学出版社有限公司 京ICP备号 京公网安备48号 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
STC15系列单片机技术手册
下载积分:0
内容提示:STC15系列单片机技术手册
文档格式:PDF|
浏览次数:1573|
上传日期: 14:55:20|
文档星级:
全文阅读已结束,此文档不支持下载
该用户还上传了这些文档
STC15系列单片机技术手册
关注微信公众号查看: 3815|回复: 0
STC系列单片机内部EEPROM 测试程序
/*********************************************************************************************
程序名:STC系列单片机内部EEPROM 测试程序
硬件电路:
P1口接8个LED到VCC。
适用硬件:
STC12C2052系列(杜洋工作室改进部分)
STC12C5AxxAD系列单片机
STC12C52xxAD系列单片机
STC11xx系列单片机
STC10xx系列单片机
使用说明:
1,程序先别P1口高4位和低4位分别点亮一次。
2,检查EEPROM中对应地址内的值是否与用户测试值相同。
3,如果相同则P1.7上的LED亮,然后在P1口显示EEPROM中的值。
4,如果不同则P1.3上的LED亮,然后全片擦除EEPROM并写入用户测试值到指定地址。
# 在第一次下载时为写入(第4步),复位后才会测试。
# 当供电电源低于一定值时将不能写入EEPROM,详见数据手册。
本程序基于宏晶公司STC11/10xx系列单片机EEPROM测试程序之上编写,详见官方数据手册。
宏晶STC官网
/*********************************************************************************************/
#include &reg51.H&
#include &intrins.H&
/*********************************************************************************************/
typedef unsigned char&&INT8U;
typedef unsigned int& &INT16U;
/*********************************************************************************************/
//用于STC12C2052系列单片机时选择//
sfr IAP_DATA& & = 0xE2; //STC12C2052系列单片机的EEPRON操作地址是0xe2(以下类推)
sfr IAP_ADDRH& &= 0xE3;
sfr IAP_ADDRL& &= 0xE4;
sfr IAP_CMD& &&&= 0xE5;
sfr IAP_TRIG& & = 0xE6;
sfr IAP_CONTR& &= 0xE7;
#define WD1 0x46 //使用STC12C2052系列单片机时,先写入0x46,然写入0xb9
#define WD2 0xb9
/*********************************************************************************************
//用于STC11/10xx系列单片机时选择//
sfr IAP_DATA& & = 0xC2; //STC11xx系列单片机的EEPRON操作地址是0xc2(以下类推)
sfr IAP_ADDRH& &= 0xC3;
sfr IAP_ADDRL& &= 0xC4;
sfr IAP_CMD& &&&= 0xC5;
sfr IAP_TRIG& & = 0xC6;
sfr IAP_CONTR& &= 0xC7;
#define WD1 0x5a //使用STC11xx系列单片机时,先写入0x5a,然写入0xa5
#define WD2 0xa5
/*********************************************************************************************/
//定义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& && && && && &0x55&&//存储在 EEPROM 单元的数值(用户可修改测试)
#define DATA_FLASH_START_ADDRESS 0x00&&//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_
& & INT8U&&read_
& & 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_
& & }
& & else
& & {& &//数据是错的,亮 P1.3 控制的灯,然后在 P1 口上将 EEPROM 的数据显示出来
& && &&&//再将该EEPROM所在的扇区整个擦除,将正确的数据写入后,亮 P1.5 控制的灯
& && &&&P1 = ~0x08;
& && &&&Delay()& & ;& && && && && && && && && & //延时
& && &&&P1 = ~read_
& && &&&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 =
& & IAP_ADDRH = my_unTemp16.un_temp8[0];& & //设置目标单元地址的高8 位地址
& & IAP_ADDRL = my_unTemp16.un_temp8[1];& & //设置目标单元地址的低8 位地址
& & //EA = 0;
& & IAP_TRIG = WD1;& &//先送 WD1,再送WD2 到ISP/IAP 触发寄存器,每次都需如此
& & IAP_TRIG = WD2;& &//送完WD2 后,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 =
& & IAP_ADDRH = my_unTemp16.un_temp8[0];& & //设置目标单元地址的高8 位地址
& & IAP_ADDRL = my_unTemp16.un_temp8[1];& & //设置目标单元地址的低8 位地址
& & IAP_DATA =& && && && && && &//要编程的数据先送进IAP_DATA 寄存器
& & //EA = 0;
& & IAP_TRIG = WD1;& &//先送 WD1,再送WD2 到ISP/IAP 触发寄存器,每次都需如此
& & IAP_TRIG = WD2;& &//送完WD2 后,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 =
& & IAP_ADDRH = my_unTemp16.un_temp8[0];& & //设置目标单元地址的高8 位地址
& & IAP_ADDRL = my_unTemp16.un_temp8[1];& & //设置目标单元地址的低8 位地址
& & //EA = 0;
& & IAP_TRIG = WD1;& &//先送 WD1,再送WD2 到ISP/IAP 触发寄存器,每次都需如此
& & IAP_TRIG = WD2;& &//送完WD2 后,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
& & INT16U d=5000;
& & while (d--)
& & {
& && &&&i=255;
& && &&&while (i--);
& & }
}复制代码
Powered by

我要回帖

更多关于 stc系列单片机 的文章

 

随机推荐