background image
宏晶科技:www.MCU-Memory.com   Mobile:13922805190(姚永平)   Tel:0755-82948409    Fax: 0755-82944243
宏晶科技:专业单片机 / 存储器供应商   www.MCU-Memory.com   STC12C5410AD 系列 1T 8051 单片机中文指南
40
    LCALL  Delay
;延时
    MOV
 SP,  #7FH      ;堆栈指针指向 7FH 单元
;************************************************
;将 EEPROM 测试起始地址单元的内容读出
MAIN1:
    MOV     DPTR, #DATA_FLASH_START_ADDRESS  ;将 EEPROM 测试起始地址送 DPTR 数据指针
    LCALL   Byte_Read
    MOV     40H, A                ;将 EEPROM 的值送 40H 单元保存
    CJNE    A, #DEBUG_DATA, DATA_NOT_EQU_DEBUG_DATA   ;如果数据比较不正确,就跳转
DATA_IS_DEBUG_DATA:
;数据是对的,亮 P1.7 控制的灯,然后在 P1 口上将 EEPROM 的数据显示出来
    MOV
 P1,  #01111111B  ;如 (DATA_FLASH_START_ADDRESS)的值等于 #DEBUG_DATA,  亮 P1.7
    LCALL  Delay
  ;延时
    MOV
 A, 40H   ;将保存在 40H 单元中 EEPROM 的值从 40H 单元送累加器 A
    CPL    A        ;取反的目的是相应的灯亮代表 1,不亮代表 0
    MOV    P1,A    ;数据是对的,送 P1 显示
WAIT1:
    SJMP    WAIT1   ;数据是对的,送 P1 显示后,CPU 在此无限循环执行此句
DATA_NOT_EQU_DEBUG_DATA:
;EEPROM 里的数据是错的,亮 P1.3 控制的灯,然后在 P1 口上将错误的数据显示出来,
;再将该 EEPROM 所在的扇区整个擦除,将正确的数据写入后,亮 P1.5 控制的灯
    MOV    P1,  #11110111B ;如 (DATA_FLASH_START_ADDRESS)的值不等于 #DEBUG_DATA, 亮 P1.3
    LCALL Delay
;延时
    MOV
 A,   40H  ;将保存在 40H 单元中 EEPROM 的值从 40H 单元送累加器 A
    CPL    A         ;取反的目的是相应的灯亮代表 1,不亮代表 0
    MOV    P1,  A    ;数据不对,送 P1 显示
    LCALL  Delay
;延时
    MOV    DPTR, #DATA_FLASH_START_ADDRESS  ;将 EEPROM 测试起始地址送 DPTR 数据指针
    ACALL  Sector_Erase  ;擦除整个扇区
    MOV    DPTR, #DATA_FLASH_START_ADDRESS  ;将 EEPROM 测试起始地址送 DPTR 数据指针
    MOV    A,    #DEBUG_DATA      ;写入 EEPROM 的数据为 #DEBUG_DATA
    ACALL  Byte_Program           ;字节编程
    MOV    P1,   #11011111B       ;将先前亮的 P1.3 灯关闭 ,再亮 P1.5 灯,代表数据已被修改
WAIT2:
    SJMP   WAIT2       ;字节编程后,CPU 在此无限循环执行此句
;************************************************