单片机的ISP和IAP到底是啥,百度查了一下看的稀里糊涂,还请高手用大白话给指点一下,不胜感激,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机的ISP和IAP到底是啥,百度查了一下看的稀里糊涂,还请高手用大白话给指点一下,不胜感激,相关的知识,希望对你有一定的参考价值。
单片机的ISP和IAP到底是什么,百度查了一下看的稀里糊涂,还请高手用大白话给指点一下,不胜感激,有帮助的话必采纳!
一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。对于单片机来讲可以通过SPI或其它的串行接口接收上位机传来的数据并写入存储器中。例如STC单片机支持串口ISP下载。在实现IAP功能时, 单片机内部一定要有两块存储区,一般一块被称为BOOT区,另外一块被称为存储区。单片机上电运行在BOOT区,如果有外部改写程序的条件满足,则对存储区的程序进行改写操作。如果外部改写程序的条件不满足,程序指针跳到存储区,开始执行放在存储区的程序,这样便实现了IAP功能。
一般ISP由单片机厂家实现,IAP由用户应用实现。
请参考:
http://blog.csdn.net/shenye1141664884/article/details/8514433追问
这个BOOT区是干什么的?还有你能给我举一个单片机应用IAP的实例吗
追答给你个参考:http://blog.csdn.net/yx_l128125/article/details/12992773
参考技术A 一句话:ISP,MCU程序存储空间就一个,烧写代码时,MCU原来程序会被擦出;IAP,MCU程序存储空间有两个,烧写代码时,MCU保存原来代码,烧写完毕后,能跳转到新的代码区。用过STC单片机IAP功能的请进,请教向EEPROM区读写数据问题
我用的STC12C5410AD单片机,现在想实现一个非易失性数据的读写。在我的程序中,有一个数据,在按下和单片机P3.2口外部中断0相连的按键时,想让单片机记住按键时候的该数据,并且下次开机时保持该数据而不丢失。程序大体是
void Byte_Read(int x)
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_CONTR=0x8b;
ISP_CMD=0x01; //字节读指令
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
x=ISP_DATA;
ISP_CONTR=0x00;
void Byte_Program(int y)
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_DATA=y;
ISP_CONTR=0x8b;
ISP_CMD=0x02; //编程指令
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
ISP_CONTR=0x00;
void Sector_Erase(void)
ISP_ADDRH=0x28;
ISP_ADDRL=0x00;
ISP_CONTR=0x8b;
ISP_CMD=0x03; //扇区擦除指令
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
_nop_();
ISP_CONTR=0x00;
main()
Byte_Read(readresult); //读出非易失性数据
biaoding=readresult/2; //对读出的数字稍作处理,下面的程序要用到
…………
…………
while(1)
…………
yaocundeshu=a/100;
data=data-baioding;
…………
void INT0_ISR() interrupt 0
IE0=0;
Sector_Erase();
Byte_Program(yaocundeshu);
Byte_Read(readresult);
biaoding=readresult/100.0; //biaoding是主函数要用到的数
yaocundeshu是要在中断0时保存的数,可是我的程序运行后为什么好像yaocundeshu没有存到EEPROM里啊,并且读也没有读出东西来。程序其他地方应该都没有问题,请只考虑IAP的使用方面,我对IAP操作的用法有什么不对的地方吗??
程序最底下这一行不太对,biaoding=readresult/100.0;改为biaoding=readresult/2;要和主函数中的对应起来,倒是不影响哈,呵呵
当然不对啦,51单片机的操作都以字节为单位,你传递的参数是int型,占两字节,当然会不正常啦,改成unsigned char就行了。
还有,读出的那个程序应该改成函数,通过返回的方式把值传递给主程序。
有其他问题直接找我,QQ:331660651,注明93182270 参考技术A 弊端:
1.读数据函数不明确,无定义类型,无返回值,主函数执行语句有误。
2.中断函数中调用了其它函数体,容易产生错误。
3.编写比较混乱,执行编译易出现错误。
以上是关于单片机的ISP和IAP到底是啥,百度查了一下看的稀里糊涂,还请高手用大白话给指点一下,不胜感激,的主要内容,如果未能解决你的问题,请参考以下文章