1. What role does "RST" play in the ISP programming? Does it also supply +12V to 8952 during programming? If that's true, will the 10uF, 10K Power On Reset disturbs the programming of the chip?
RST doesn't supply anything. It is an input pin. This pin should be externally pulled high (5V) when in programming mode. You would end up having to disconnect RST from the external cap/resistor and tie the pin to 5V with just an external pull up in the range of 4.7K - 10K when programming the chip.
Out of curiosity, what programming hardware are you using? I use the AT89ISP cable, which should be able to control the high/low setting of RST when in programming mode regardless of the external hardware.
2. If /EA is tied high, Could my external SRAM be used for running programs?
When /EA is tied high, external code execution only occurs when the internal program attempts to address a code memory address that is past the internal code space via acall, lcall, ajmp or ljmp. In the case of the 89S52, this would mean that the code would have to jump to a code memory address range of 0x2000-0xFFFF in order for external code execution to take place. Code execution on addresses 0x0000 - 0x1FFF would take place from internal memory.
However, when /EA is tied low, all code is executed from external memory.
I also connected E3 of 74HC138 to A14 so only 0x8000-0xBFFF are used for I/O.
Allen
A 74HC138 is a 3-8 address decoder. How it is meant to be used is to divide the external 64K of external RAM space into 8 blocks of 8K by connecting the A0-A2 pins of the 74HC138 to address pins A13-A15. /E1 and /E2 are usually tied low directly while E3 is tied high directly. Then, the Y0-Y7 pins are used to drive the /CE pins of each memory chip (or other external hardware) low when each block of 8K xRAM memory space is addressed -
0x0000 - 0x1FFF = Y0 Low
0x2000 - 0x3FFF = Y1 Low
0x4000 - 0x5FFF = Y2 Low
0x6000 - 0x7FFF = Y3 Low
0x8000 - 0x9FFF = Y4 Low
0xA000 - 0xBFFF = Y5 Low
0xC000 - 0xDFFF = Y6 Low
0xE000 - 0xFFFF = Y7 Low
This would allow there to be 8 RAM chips of 8KB each on the external buss. Or you can have a single 8K memory chip and other multiplexed hardware on the bus by using buffer chips with either an output enable or a chip enable pin, then use the Y0 - Y7 pins to assign the other external hardware to an 8K block of external RAM.
Make sense?