基于P89C51RD2 IAP功能的数据存取与软件升级
的32KB闪存空间由BLOCK3和BLOCK4两块组成,每一块为16KB,足可以存储10天的数据量。在实际操作中,将BLOCK3和BLOCK4轮流使用,当10天的数据量存满其中一块时,通过程序跳转到另一块中,在使用前先将该块擦除。这样BLOCK3和BLOCK4每过20天便分别被擦除和重写1次。对有关地址定义如下:
ADDR_LEQU30H;被编程数据的低8位地址
ADDR_LEQU31H;被编程数据的高8位地址
DATA_TEMPEQU32H;被编程数据
ADDR_L,ADDR_H和DATA_TEMP的具体地址可以根据用户程序的实际情况进行定义;AUXR1,PGM_MTP的定义同前。有关子程序为:
擦除BL0CK3
ERSBLOCK3:;BLOCK3擦除
MOVAUXR1,#20H;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#01H;R1=01H,块擦除
MOVDPTR,#8000H;擦除BLOCK3
LCALLPGM_MTP;调用,无返回参数
RET
擦除BL0CK4
EPSBLOCK4:;BLOCK4擦除
MOVAUXR1,#20;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#01H;RI=01H,块擦除
MOVDPTR,#0C000H;擦除BLOCK4
LCALLPGM_MTP;调用,无返回参数
RET
字节编程
WRDATA:
MOVAUXR1,#20H;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#02H;R1=02H,字节编程功能
MOVDPH,ADDR_H;高8位地址
MOVDPL,ADDR_L;低8位地址
MOVA,DATA_TEMP;被编程数据
LCALLPGM_MTP;调用,返回参数ACC=0,调用成功,非0调用失败
RET
读闪存字节内容
RDDATA:
MOVAUXR1,#20H;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#03H;R1=03H,读闪存字节内容
MOVDPL,ADDR_L;低8位地址
MOVDPH,ADDR_H;高8位地址
LCALLPGM_TEMP;调用,返回参数ACC中为读出字节内容
RET
将上述4个子程序结合实际情况灵活运用,便可以实现数据的有效存储,而且这些数据在掉电后是不丢失的,完全达到系统要求。
4.2IAP功能应用于仪器升级
利用P89C51RD2固有的ISP功能,在所设计的仪器中增加1个拨码开关,便可以实现智能仪器的软件升级。对操作人员的要不高,原理简单易行。具体方法请见参考文献4。
文献4所讨论的ISP功能与远程升级,实质上是在复位过程中,用相应的硬件控制使程序指针跳转到BootROM空间的0FC00H处。整个过程由ISP程序模块来控制,而用户程序由于是被升级程序,故完全失去了控制权,编程完毕,需要人工复位并使指针切换到用户程序空间中方可使新程序起作用。这给智能仪器升级带来了麻烦,如果巧妙地利用P89C51RD2的IAP功能,则可以使仪器升级变得更加简单。
前面已经指出,ISP和IAP是一脉相承的,ISP功能的实现调用了IAP功能的子程序。所以完全可以利用IAP功能来设计自己的ISP程序,这样,就可以不必在闪存空间和BootROM空间之间跳来跳去。
由于用户程序一般不会超过48KB,故可将B 《基于P89C51RD2 IAP功能的数据存取与软件升级(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/175330.html
ADDR_LEQU30H;被编程数据的低8位地址
ADDR_LEQU31H;被编程数据的高8位地址
DATA_TEMPEQU32H;被编程数据
ADDR_L,ADDR_H和DATA_TEMP的具体地址可以根据用户程序的实际情况进行定义;AUXR1,PGM_MTP的定义同前。有关子程序为:
擦除BL0CK3
ERSBLOCK3:;BLOCK3擦除
MOVAUXR1,#20H;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#01H;R1=01H,块擦除
MOVDPTR,#8000H;擦除BLOCK3
LCALLPGM_MTP;调用,无返回参数
RET
擦除BL0CK4
EPSBLOCK4:;BLOCK4擦除
MOVAUXR1,#20;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#01H;RI=01H,块擦除
MOVDPTR,#0C000H;擦除BLOCK4
LCALLPGM_MTP;调用,无返回参数
RET
字节编程
WRDATA:
MOVAUXR1,#20H;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#02H;R1=02H,字节编程功能
MOVDPH,ADDR_H;高8位地址
MOVDPL,ADDR_L;低8位地址
MOVA,DATA_TEMP;被编程数据
LCALLPGM_MTP;调用,返回参数ACC=0,调用成功,非0调用失败
RET
读闪存字节内容
RDDATA:
MOVAUXR1,#20H;AUXR1的位ENBOOT=1,寻址到固件
MOVR0,#11;晶振为11.0592MHz,取11
MOVR1,#03H;R1=03H,读闪存字节内容
MOVDPL,ADDR_L;低8位地址
MOVDPH,ADDR_H;高8位地址
LCALLPGM_TEMP;调用,返回参数ACC中为读出字节内容
RET
将上述4个子程序结合实际情况灵活运用,便可以实现数据的有效存储,而且这些数据在掉电后是不丢失的,完全达到系统要求。
4.2IAP功能应用于仪器升级
利用P89C51RD2固有的ISP功能,在所设计的仪器中增加1个拨码开关,便可以实现智能仪器的软件升级。对操作人员的要不高,原理简单易行。具体方法请见参考文献4。
文献4所讨论的ISP功能与远程升级,实质上是在复位过程中,用相应的硬件控制使程序指针跳转到BootROM空间的0FC00H处。整个过程由ISP程序模块来控制,而用户程序由于是被升级程序,故完全失去了控制权,编程完毕,需要人工复位并使指针切换到用户程序空间中方可使新程序起作用。这给智能仪器升级带来了麻烦,如果巧妙地利用P89C51RD2的IAP功能,则可以使仪器升级变得更加简单。
前面已经指出,ISP和IAP是一脉相承的,ISP功能的实现调用了IAP功能的子程序。所以完全可以利用IAP功能来设计自己的ISP程序,这样,就可以不必在闪存空间和BootROM空间之间跳来跳去。
由于用户程序一般不会超过48KB,故可将B 《基于P89C51RD2 IAP功能的数据存取与软件升级(第2页)》