|
WMCON—看门狗及存储器控制寄存器 地址:96H
|
BIT |
PS2 |
PS1 |
PS0 |
EEMWE |
EEMEN |
DPS |
WDTRST |
WDTEN |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
EEMWE: 写EEPROM使能位。使用 MOVX指令写EEPROM之前必须置位。写完EEPROM之后要清零。
EEMEN: EEPROM访问使能位。EEMEN=1时,指令 MOVX A,@DPTR和MOVX @DPTR,A 访问的不再是外部数据存储器,而是访问内部EEPROM;当EEMEN=0时,这两条指令则访问外部数据存储器。
WDTRST: 写操作判断位。写EEPROM 时这一位用作只读的RDY/BSY。在内部编程过程起动后,RDY/BSY为“0”。而编程结束后,RDY/BSY 自动恢复为“1”。也就是说,RDY/BSY为“1”时表示可以对EEPROM进行写操作。
DPS2/DPS1/DPS0: 看门狗预定比例选择位。
DSP: 数据指针选择位。
WTDEN: 看门狗使能位。
数据存储器—EEPROM和RAM的访问方法:
AT89S8252内部有2K字节的EEPROM和256字节的RAM。 1. RAM 高128字节的RAM具有与SFR相同的地址,但两者在物理上是完全分离的。对它们的访问取决于指令的寻址模式。如果寻址模式为直接寻址,如:MOV 0A0H,#data,则访问的是地址为0A0H的SFR(P2);如果寻址模式为间接寻址,如:MOV @R0,#data,则访问的是地址为0A0H的片内RAM。
2. EEPROM 访问片内EEPROM的指令为 MOVX @DPTR,A 和 MOVX A,@DPTR。在访问(读/写)片内EEPROM 之前,首先要置位WMCON 的EEMEN。否则,MOVX 指令访问的是片外的RAM。 如果要对EEPROM进行写操作: 1. 置位WMCON 的EEMWN; 2. 执行MOVX @DPTR,A指令; 3. 检查WMCON的WDTRST是否为“1”; 4. 如果是为“1”,表明编程结束,可以写入另一个数据,或者清除EEMWE 和 EEMEN结束对EEPROM的操作; 5. 如果为“0”,则返回到第三步。
基本例程如下: 读例程: MOV DPTR,#7FEH ;要访问的EEPROM地址 MOV A,08H ;置位EEMEN ORL 96H,A MOVX A,@DPTR ;读数据 MOV A,0F7H ANL 96H,A ;清除EEMEN
写例程: MOV DPTR,#7FEH ;要访问的EEPROM地址 MOV A,#18H ;置位EEMEN 和 EEMWE ORL 96H,A MOV A,#77H MOVX @DPTR,A ;写数据77H HERE: MOV A,96H JNB ACC.1,HERE ;等待编程结束 MOV A,0E7H ANL 96H,A ;清除EEMEN 和 EEMWE
;定义EEPROM的存放地址[000H(2000H)-7FFH(27FFH)]
ACS01 EQU 000H
写数据实例: MOV DPTR,#ACS01 ;EEPROM的地址 MOV R7,#1 ;写入的字节数 CALL WRITE_data ;调写数据到EEPROM中
读数据实例: MOV DPTR,#ACS01 ;要访问的EEPROM地址-->CLK MOV R7,#1 ;字节数 CALL READ_data ;取出数据
;*--------------------------------------------------------- ;* 利用RDY/BSY写周期,写数据到EEPROM中,和检验的例程 ;* 入口条件:要访问的地址-->DPTR;写入的数据存放首址-->R0;字节数-->R7 ;---------------------------------------------------------- WRITE_data: PUSH DPH ;保护指针 PUSH DPL PUSH ACC PUSH B MOV A,R0 MOV R4,A ORL WMCON,#EEMEN ; EEPROM访问使能位置1 ORL WMCON,#EEMWE ; 写EEPROM使能位置1 ERROR_1: MOV A, @R0 ;要写入的数据送A MOVX @DPTR, A ;写数据 loop: MOV A,WMCON ANL A,#WDTRST JZ LOOP ;等待编程结束(WDTRST=1时编程结束) MOVX A,@DPTR ;读数据 MOV B,@R0 CJNE A,B,ERROR_1 ; jump if data compare fails,读出,比较(检验) ;检验正确时,向下执行,否则返回重写 INC R0 INC DPTR DJNZ R7,ERROR_1 ;未处理完继 xrl WMCON,#EEMWE ; 清除EEMEN和EEMWE xrl WMCON,#EEMEN ; POP B POP ACC POP DPL ;恢复指针 POP DPH MOV A,R4 MOV R0,A RET
;--------------------------------------------------------- ; 读EEPROM的例程 ;入口条件:要访问的地址-->DPTR;读出的数据存放首址-->R0;字节数-->R7 ;---------------------------------------------------------- READ_data: PUSH DPH ;保护指针 PUSH DPL PUSH ACC PUSH B MOV A,R0 MOV R4,A ORL WMCON,#EEMEN ;EEPROM访问使能位置1 READ_1: MOVX A,@DPTR ;读数据 MOV @R0,A INC R0 ;缓存的地址指针加一 INC DPTR ;地址指针加一 DJNZ R7,READ_1 ;未读完继续 XRL WMCON,#EEMEN ;清除EEMEN (异或) POP B POP ACC POP DPL ;恢复指针 POP DPH MOV A,R4 MOV R0,A RET
|