Home > Electronic Tutorials > Microcontroller Based Schematics > Atmel 89C2051 In-Circuit Programmer Schematic

Microcontroller Based Schematics, Projects, Tutorials

Atmel 89C2051 In-Circuit Programmer Circuit

Author: Paul Stoffregen

This is a "beta release" schematic. Use at your own risk The idea is to add this circuitry to a board with already has ram at 2000 and an 82C55 I/O chip to provide ports A, B and C.

Warning: not shown here is a memory mapping trick which is described below. You must figure out a way to provide the necessary memory mapping to make beta version 0.003 work. The next beta release will fix this problem, so that an ordinary memory configuration will work... but for now a hardware trick or some preprocessing of your intel hex files is needed.

The AND and NAND gates shown should be 74HC08 and 74HC00 respectively. It a TTL type NAND gate is used (eg LS, L, S, ALS, etc) the crystal oscillator may be problematic.

A Picture Is Worth 1000 Words Diagram\

Several people have asked how to save images. Here's a few things to try.

NOTE: in the above schematic, the line indicated P3.3 (which controls the TXD echo feature) should really connect to P3.4, and the one labeled P3.4 really ought to connect to P3.3. Sorry... I'll get a fixed copy of this schematic on-line sometime, with the signals names that now appear in BETA Version 0.004. On the bright side, if you do connect it differently, it's a simple matter to reassign the pins in the software with 0.004.

The inputs on the left side of the schematic come from the ports on the 8051 and 82C55. Port A, Port B, and PC.0 come from the 82C55, and the other lines are from the 8051. The TXD pin of the 8051 is connected to the TXD(in) input line, and the TXD(out) line is connected to the line driver for the programmer's serial transmit. This simple three gate circuit provides the "echo-through" feature which is useful for troubleshooting code while the 89C2051 is in-circuit by echoing data to the programmer's transmit line.

The 20 pin ribbon cable should leave pins 1, 4, and 5 unconnected. Double check that pin 10 is connected to ground.

add stuff here about the power supply issues. I suggest connecting pin 20 in the ribbon cable to Vcc on the programmer..

Do not connect XTAL2 (pin 4) of the 89C2051 chip.

The 15 switches shown are the gates within the CD4066, so four of these chips are required.

The three NMOS transistors are within a single CD4007 chip. The trick here is to not use the three PMOS transistors which also come in this chip. You must connect +12 volts to pin 14. I'll add more more detailed information about how to connect this chip, hopefully in a week or so. let me know if you're building from this beta schematic and need some assistance. Basically, the two PMOS transistors with floating drains get their drains and sources connected to Vcc. The third PMOS transistor whose drain is connected to an NMOS drain inside the chip gets it's source (the other line) connected to the drain, which is also the drain of one of the NMOS transistors. Pin 14 MUST be connected to +12 volts to avoid damage to this chip.

Warning: beta code 0.003 expects RAM to exist at location 0x2000 to store a copy of the data to be programmed into the 89C2051. The code for the 89C2051 must be assembled at location 0000. Beta version 0.003 uses the download code from the unreleased version of paulmon2, without any modification. When you download the code, beginning at location 0000, it really needs to get stored at location 2000, and so on. To accomplish this, I just AND'd the Y0 and Y1 lines from the 74HC138 chip. However, for the development board example, this prevents the EPROM from working. I used the built-in EPROM in an 87C51 for the first version of this project, so this isn't a problem. If you have an 87C51 and a programmer for it, this is the easiest way to make it work.

For now, beta version 0.003 requires some sort of hardware trick so writes to 0000 go into 2000, and so on. An alternate workaround is to assemble at 0000 and then modify the intel hex code to shift everything to location 2000, so that the download code will just write the data where the programmer needs it to be. Here is some C source code to read and write intel hex files, if you want to take this approach.

This isn't a problem with BETA version 0.004 since 0.004 does address translation in software. All you have to do is specify the physical location of the buffer memory near the top of the program (in an .equ line), reassemble (as31 works), and 0.004 will use this buffer memory when the user tries to download/upload/view code assembled starting at 0000. As well, you're not limited to having the buffer at 2000 with 0.004, you can specify it's location.

I wasn't too careful about using MOVX or MOVC to read external memory... my board has the AND gate to combine the two memory spaces. A future release will use MOVC exclusively, but I believe version 0.003 uses MOVX quite a bit. Version 0.004 uses MOVX to read from the buffer memory... maybe MOVC here and there as well.

Note: To report broken links or to submit your projects please send email to Webmaster