IAPatmega系列单片机机和STCatmega系列单片机机有什么不同

STC单片机的IAP功能和ISP功能有什么区别与联系?为什么IAP功能同EEPROM联系在一起?为什么?_百度知道
STC单片机的IAP功能和ISP功能有什么区别与联系?为什么IAP功能同EEPROM联系在一起?为什么?
我有更好的答案
单片机自己修改自己程序区的内容EEPROM!!:ISP:单片机程序区1中的程序可以修改程序区2中的内容这么有技术含量的问题……你也好意思没给悬赏分ISP(In-system programmable)是在系统可编程!!:指的是不需要把单片机从目标系统板上取下来就可以直接从PC往单片机里面烧录程序。IAP(In-Application programmable)是在应用可编程:指的是可以通过单片机自身的程序修改单片机该程序区的内容;EEPROM功能是:在程序区1中的程序可以修改程序区2中的内容;通常程序区2中的内容不可以执行,只能当数据使用,功能相当于EEPROM;区别:从PC机修改单片机程序区的内容(即烧录)IAP
采纳率:28%
门禁、考勤机控制器,IAP功能是做什么?谁能帮解释下?
为您推荐:
其他类似问题
您可能关注的内容
stc单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【图文】第10章 STC系列单片机片内EEPROM的应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第10章 STC系列单片机片内EEPROM的应用
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢豆丁微信公众号
君,已阅读到文档的结尾了呢~~
STC11/10xx 系列是 1T 的 8051 单片机,系统时钟源可选内部 RC 振荡器,外部晶体或者时钟. 现出厂标准配置是使用芯片内部的 R/C 振荡器,5V 单片机常温下频率是...
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
STC11/10xx系列单片机器件手册
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口初识STC单片机_柒恋雪_新浪博客
初识STC单片机
一、什么是单片机?
&单片机又称为单片微型控制器,通俗的讲单片机就是现在电脑的极简版本,目前的单片机一般都集成了处理器、内存、外存(类似电脑硬盘结构)总线以8位和32位居多。常用的有8051系列、arm系列。
二、什么是stc单片机​?
&STC单片机为宏晶公司所生产,一般为STC系列和IAP系列​,具有非常多的种类和型号但均基于Intel公司的MCS51单片机发展而来。其中STC系列面向商用以及军用,IAP系列由于具有在线仿真功能大多数被用于设计领域。
三、STC单片机系列介绍​
STC89、90系列​:
&STC89系列与AT89系列管脚完全兼容,并且可以对等移植。12T单片机,属于​传统单片机型号。STC90系列是STC89系列改进型产品,具有更强的抗干扰能力。(所谓传统是指在微控制器尚不发达的时期Intel公司致力于发展高性能CPU将MCS51专利授权一系列公司从而使得ATMEL公司开发的AT89C51单片机成为市场主流)
STC10​、11系列:
&​STC10系列和11系列是有着便宜价格的1T单片机,有PWM、4态IO接口、EEPROM等功能,但都没有ADC这个高级功能。
STC12系列:
&​STC12系列是增强型功能的1T单片机,型号后面有“AD”的就有ADC功能的单片机。
​STC15系列:
&​​STC15系列内部集成了高精度的R/C时钟,可以完全不需要接外部晶振。(STC15W4K系列支持USB直接下载。)
四、STC单片机工作电压:​
​C、F系列:
&C、F系列​总体为5V单片机系列,实际支持电压略有波动。
L、LE系列:
&L、LE系列总体为3.3V单片机系列,实际支持电压​略有波动。
W系列:​
&W系列总体为宽电压单片机,即工作电压覆盖3.3V和5V。​
(请勿转载,保留一切权利,谢谢。http://blog.sina.com.cn/xiaoqilianxue)​
博客等级:
博客积分:0
博客访问:9,306
关注人气:0
荣誉徽章:查看: 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

我要回帖

更多关于 51系列单片机开发宝典 的文章

 

随机推荐