-
- ;**********************************************************************************
- ;************************ 读STC单片机内部E2子程 ******************************
- ;**********************************************************************************
- ; stc8H8K64U 编程容量自定义 4k +--8个扇区(0000H----0FFFH) 8扇区 4K容量
- ;****************************************************************************
- ;**********************************************************************************
- ;************************ 读STC12c04、8内部E2子程 ******************************
- ;**********************************************************************************
- ; stc8A8K60D4 +--8个扇区(0000H----0FFFH) 8扇区 4K容量
- ;----------------------------------------------------------------------------------
- READE2_R0:MOV IAP_ADDRH,#00H ;把以#00R0H(#00R0)为地址的E2RAM的
- MOV IAP_ADDRL,00H ;内容回写入R0为间址的RAM内
- CALL READ_GT ;stc8A4K60S2A12 +--8个扇区(0000H----0FFFH) 8扇区 4K容量 stc8A8K64D4
- MOV @R0,A ;
- RET ;
- ;******************************************************************
- READE2_A:MOV IAP_ADDRH,#00H ;
- MOV IAP_ADDRL,00H ;内容回写入寄存器A中 8扇区
- CALL READ_GT ;利用了第一个扇区
- RET ;
- ;******************************************************************
- ;------------------------------------------------------------------
- ;******************* 编程STC89C52内部E2子程 ********************
- ;******************************************************************
- ;功能:把RAM R0中的内容回写入 EERAM相应空间,R0不变 ,R1,A使用过
- ;******************************************************************
- ;******************************************************************************************
- WRITEE2:;MOV AUXR,#00H ;
- PUSH 00H ;\
- PUSH 01H ;
- MOV R0,#08H ;
- MOV R1,#08H ;\读EE中数据入内部扩展RAM相应空间
- WRITEEA:CALL READE2_A ;\
- MOVX @R1,A ;\
- INC R0 ;\
- INC R1 ;\
- CJNE R0,#0D0H,WRITEEA ;\
- POP 01H ;\
- POP 00H ;/内部RAM与内部扩展RAM数据交换
- MOV A,@R0 ;
- MOVX @R1,A ;/
- ;*****************************************
- CALL SECTOR_ERASE ; 扇区擦除
- ;******************************************
- CALL rst ;
- MOV R0,#08H ;
- WRITEEB:MOVX A,@R0 ;
- MOV IAP_DATA,A ;
- MOV IAP_ADDRH,#00H ;
- MOV IAP_ADDRL,00H ;
- CALL WRI_GT ;
- INC R0 ;
- NOP ;
- NOP ;
- CJNE R0,#0D0H,WRITEEB ;
- RET ;
- ;*************************************************************************************
- SECTOR_ERASE:MOV IAP_ADDRH,#00H ;\ 清除第一个 扇区(00H----1FFH)
- MOV IAP_ADDRL,#00H ;
- CALL SECTOR_ERASE_GT ;
- RET ;
- ;************************************************************************************
- SECTOR_ERASE3:MOV IAP_ADDRH,#02H ;\
- MOV IAP_ADDRL,#00H ; 清除第二个扇区(200H----3FFH)
- CALL SECTOR_ERASE_GT ;
- RET ;
- ;*************************************************
- SECTOR_ERASE_GT:
- MOV IAP_CONTR,#80H ;
- MOV IAP_TPS,#12 ;;;;;;;;;;;;;;;;;
- MOV IAP_CMD,#IAP_SECTOR_ERASE ;扇区擦除
- MOV IAP_TRIG,#5AH ;
- MOV IAP_TRIG,#0A5H ;
- MOV IAP_CONTR,#0H ;
- MOV IAP_CMD,#0H ;
- MOV IAP_TRIG,#0H ;
- MOV IAP_ADDRH,#80H ;
- MOV IAP_ADDRL,#0H ;
- RET ;
- ;*************************************************
- READ_GT:
- MOV IAP_CONTR,#80H ;
- MOV IAP_TPS,#12 ;;;;;;;;;;;;;;;;;
- MOV IAP_CMD,#IAP_BYTE_READ ;字节读
- MOV IAP_TRIG,#5AH ;
- MOV IAP_TRIG,#0A5H ;
- NOP ;
- MOV A,IAP_DATA ;
- MOV IAP_CONTR,#0H ;
- MOV IAP_CMD,#0H ;
- MOV IAP_TRIG,#0H ;
- MOV IAP_ADDRH,#80H ;
- MOV IAP_ADDRL,#0H ;
- RET ;
- ;*******************************************************************
- WRI_GT:
- MOV IAP_CONTR,#80H ;
- MOV IAP_TPS,#12 ;;;;;;;;;;;;;;;;;
- MOV IAP_CMD,#IAP_BYTE_PROGRAM ;字节编程(写)
- MOV IAP_TRIG,#5AH ;
- MOV IAP_TRIG,#0A5H ;
- NOP ;
- MOV IAP_CONTR,#0H ;
- MOV IAP_CMD,#0H ;
- MOV IAP_TRIG,#0H ;
- MOV IAP_ADDRH,#80H ;
- MOV IAP_ADDRL,#0H ;
- RET ;
- ;-----------------------------------------------------------------------
- ;-----------------------------------------------------------------------
- READ_E2_RAM:MOV R0,#30H ;\读EE中数据入内部扩展RAM相应空间
- READ_E2_RAM1:CALL READE2_A ;\STC89C52RC--8个扇区(2000H----2FFFH)
- MOVX @R0,A ;\STC89C54RD+--58个扇区(8000H----F3FFH)
- INC R0 ;\
- CJNE R0,#0D0H,READ_E2_RAM1 ;\
- RET ;
- ;------------------------------------------------------------------------------------N
- END
复制代码
|