The information and downloads available on this page are sufficient for you to build your own 80C52 single board computer motherboard from scratch!  This includes printing, etching and drilling the board, assembling and soldering the components and testing the system to produce such a professional looking board, that people won't believe you did it yourself!  Anyone can assemble a kit from a factory produced board but to be able to actually build an entire system from scratch including the board really is computer building!  Once completed, you can use the 8052 mother board system as is to run BASIC-52 or assembler programs or you can build add on boards for various control, display & monitoring functions.  I'll be adding more pages about the add on expansion boards as I get time.  Although I will describe various technical aspects of the design like the memory map and the expansion bus architecture, the idea is that you don't need to understand all of this ahead of time in order to build the board and run a program!  This makes it a suitable project for anyone who is interested in assembling electronic kits and messing about with simple computer programs.  I provide links to various sites that have complementary information.  Having said that, when combined with some expansion boards, the 8052 motherboard can be used for large and complex process control applications etc.  I use one for infrared & RS232 control of my home theatre system, another for control of my coffee table N-gauge model railway and I am going to use another to control the gain & filtering applications in my new subwoofer.

The 8052 mother board system is built around the 80C52-BASIC microcontroller from Micromint, Temic and others.  Originally Intel was the inventor and first producer of the 8051 chip, but now they don't produce it anymore.  This is essentially a CMOS 8052 microprocessor from the 8051 family that has an onboard BASIC interpreter built in to the first 8k of program memory.  This means that once the board is complete, you will be able to communicate with it in BASIC mode at once without the need for a special monitor program loaded onto an EPROM or even any EPROM for that matter!  The only disadvantage is the price at about $25.  A similar chip without the BASIC would go for less than $4.  But then the board would be more complicated requiring an EPROM as well as RAM and the extra work involved in downloading a monitor program in HEX and blowing an EPROM all add extra points of failure that may prevent you from ever getting the thing going, so it's worth it in the end!  The actual board is made using the Press-n-Peel system developed by Techniks.  This is an easy system that can be used to print the circuit with a laser printer and literally iron it onto the copper board!

System Description

The 80C52 Motherboard Rev C provides a complete self contained 8052 computer system with 64Kbytes of battery backed duplicated shared program & code memory with a 22 pin expansion bus that can support up to 8 expansion boards.  Each expansion board can have four 8 bit wide I/O ports and an LPT port.  All the BASIC-52 programming commands are supported and complete assembler programs or small routines can be downloaded into shared non-volatile memory and called from BASIC-52 or run from boot up with a few BASIC-52 settings.  In the following sections I'll describe each part of the circuit.  The descriptions are a combination of information from the data sheets for the various components and the logical placement of the components in each section of the circuit.  Print out the 80C52 Motherboard Circuit diagram for reference as you read, and read the datasheets for the components you need more information on.  There are links to datasheets in the left hand column of the component list below.  While it is not necessary to understand all or even any of this section to successfully build the board and run a program, the more you do understand, the better you will be able to workout any problems you may have for yourself.  The understanding of how data & address bus lines work and what RD WR and CS pins mean to memory chips will unlock the mysteries of computer hardware.  All computers are built on these principals.

The Overbar Notation

One notational detail of the 80C52 Motherboard Circuit diagram and the following description as well as the various datasheets that is worthy of note if you are not familiar with it, is the meaning of the overbar that is drawn above the names of some items.  Let's take U3 SRAM (Microchip 3, Static Random Access Memory) pins 22 & 30 as an example.  As you can see, CS1 is drawn as CS1 and CS2 is just CS2.  Referring to the 628128 datasheet we can see that CS means Chip Select and it says that both Chip Select pins have to be active in order to read or write to the SRAM.  The bar above means that the pin has to be low (0 volts or GND) to be active.  If there is no bar, it means that the pin has to be high (+5 volts) to be active.  This is sometimes referred to as active high and active low.  So to access the SRAM U3, pin 22, CS1 must be low and pin 30 CS2 must be high.  Another example is GENIOREQ (described below) that has to be low in order to access the external expansion bus.  That's all there is to it!

Understanding Memory Addressing in HEX Notation

The What, Why and How of HexAnother thing you should be clear about when reading this description is what I'm talking about when I say memory address 0xFF00 or address lines A7 (Address bit 7) to A0 (Address bit 0).  I use the notation 0x in front of a number when the number is in HEX (Base 16).  When I use the term "line" (Address lines A0 to A15 for example), I am talking about a single electrical line (or track on the board) that represents a 1 or a 0 in binary where 0 is 0 volts and 1 is 5 volts.  The address (A) and data lines (D) are always numbered from 0 upwards with 0 being the LSB (Least Significant Bit) on the right and higher numbers being more significant and going to the left with the MSB (Most Significant Bit) being the left most of all.  If you are unfamiliar with this you can read this short tutorial on the subject or search the web for more examples until you get it!  Address lines refer to a bus or group of lines that are used by the CPU to select a particular location in external memory.  The 80C52 CPU can address 64K of external memory, which in hex would be 0xFFFF so in binary that would require 16 address lines to describe all the binary ones necessary (16 bit memory addressing).  Data lines refer to a bus or group of lines that are used by the CPU to read or write an 8 bit byte at the memory location currently selected by the address lines.  There are always 8 data lines with an 8051/8052 CPU.  Once you know about this you should be able to understand the following example statement:

When address lines A15 (MSB, first bit on the left) to A0 (LSB, last bit on the right) are set like this: 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 0

The memory address being accessed is: 0xA9B6 which is someplace in the middle of the shared program & data store on this board.

Power Section

The power section simply consists of  the red LED1, connected in series with a 330 ohm current limiting resistor R1 that indicates that the power is connected, and C1, a 10uF capacitor to smooth the 5 Volt supply.  The supply needs to be connected to the +5V and GND pins of J1.

Reset Section

Reset switch S1The reset section supplies a clean falling edge to the CPU U1 on its pin 9 and SRAM memory U3 on its pin 22 and any external expansion boards.  When power is applied, pin 2 of U6 quickly rises to the 5 volt level of the power and prevents the CPU and SRAM from doing anything while the power stabilizes.  Then as C4 slowly charges through resistor R10, the potential at pin 1 of U6 rises.  Inverter U6 has Schmitt-Trigger inputs meaning that when the voltage at pin 1 rises past a preset threshold, the inverter inverts the potential of pin 2 immediately down to zero giving a clean falling edge that will not pop back up again on the RESET line.  During the time the capacitor C4 charges, the CPU U1 gets ready to start and SRAM U3 is disabled to prevent any memory corruption.  When the RESET line falls, the CPU U1 boots and SRAM U3 is ready to be accessed.  The reset line is also available on J2 RST and J6 bus RST for any expansion cards that need it.  Pressing button S1 Reset, repeats the process by bringing pin 1 of U6 low and discharging C4.  Pin 2 of U6 goes high disabling the SRAM U3 and all the expansion cards and halting the CPU U1.  When the button is released, charging of C4 starts again and the reset process repeats causing the CPU to reboot.

Oscillator Section

11.0592MHz Crystal OscillatorThe oscillator is an 11.0592MHz crystal connected across pins 18 & 19 of CPU U1.  This value gives the largest range of serial port baud rate speeds including 56K which is discussed here.  Each side of the crystal is connected to ground via a 30pF ceramic capacitor.  Smaller values of capacitors will make the oscillator start up more quickly and larger values will make it more stable.  An 8051 series microcontroller uses 12 oscillator cycles to complete 1 program step or 1 simple assembler instruction, with other more complicated instructions taking 24 or even 48 oscillator cycles.  This means that if you were running at 12 MHz, you would be able to process 1 million simple instructions in a second.  You can see a list here where 1 instruction cycle means 12 oscillator cycles Here is a list that shows Oscillator cycles directly.

CPU Section

The CPU is U1, the actual 80C52-Basic chip.  Most of its pins are divided into four 8 bit ports.

Port 0, (pins 32 to 39) is used for external program and data memory access.  External memory access takes the CPU several oscillator cycles of action, 24 in fact!  during some of these cycles, port 0 is used for the lower 8 bits of the 16 bit memory address, in later cycles it is used to read or write the actual 8 bits of the data byte being read or written.  To enable this 8 pin saving scheme on the CPU DIP (40 pins instead of 48), the CPU needs a helper chip U2, an octal 8 bit latch (with 20 pins!).  During the time the CPU U1 has the lower 8 bits of the address on port 0, the CPU raises ALE (Address Latch Enable) on its pin 30 connected to LE (Latch Enable) pin 11 on U2 via an AND gate in U5.  This causes U2 to copy the 8 bit value from its D side to its O side.  Then when CPU U1 lowers ALE, this locks the values on the O side of the octal latch U2.  This then leaves port 0 free to be used to read or write the data during the later cycles.  Resistors R2 - R9 are used to keep the port 0 lines high to prevent random oscillating data when BASIC-52 executes its PROG & FPROG commands which use different write timing as explained in port 1 below.  So we can say that sometimes port 0 is used as the lower part of the address bus but the rest of the time it forms the 8 bit bidirectional CPU data bus.

Port 1, (pins 1 to 8) can be used as a group of 8 bits but in most applications the individual pins are used for separate I/O functions and this is what BASIC-52 does.  Also some of the pins have specific hardware functions.  Any of the pins not used for a specific function in the motherboard design are connected to header pins in J2 through J5 for external application usage.  Refer to the datasheet and the BASIC-52 manual for information about them.  Pins 1 & 2 are T2 & T2EX and are connected to J2 T2 & T2EX.  Pin 3, PWM is used for the BASIC-52 PWM command for outputting a user defined pulse sequence and is connected to J2 PWM.  Pin 4, BASIC-52 ALEDIS (Address Latch Enable Disconnect) function is used to hold the LE (Latch Enable) function of U2 on for longer than a normal write cycle.  This is because BASIC-52 uses a different timing sequence for its PROG & FPROG commands assuming that the memory being written to is some kind of slow EPROM although in this motherboard design all the memory is fast battery backed SRAM.  Pin 5, BASIC-52 PGM PLS is used as the write pulse for the PROG & FPROG commands and so in this design is combined with the ordinary WRITE line (U1 pin 16) by an AND gate in U5 to produce the WRITE ANY line which strobes low to write to the SRAM memory U3 for either and ordinary write or a PROG/FPROG write.  Pin 6, PGM EN is normally used to control EPROM programming voltage but is not needed in this design for that purpose although it will still go low during PROG/FPROG commands.  In the motherboard design it is used to enable the LPT (Line Printer serial output port on pin 8) pin of J3.  As it is possible that there may be expansion boards that use serial commands, a way is needed to prevent those commands appearing on a display that may be connected to J3 LPT.  In order to write to J3 LPT, pin 6 (port 1.5) needs to be set low.  Setting it back to high again enables LPT writing to the motherboard expansion bus on J6 LPT without effecting anything connected to J3 LPT.  This is done with the aid of an OR gate in U9.  Pin 7 (port 1.6), DMA ACK is not used for anything and is connected to J2 P1.6.  Lastly, pin 8 LPT is used by the PRINT# command to display text on a device connected to J3 LPT.  As noted above, P1.5 needs to be set low for this to work.  T2 of U8 is used to bring the voltage levels up to RS232 levels.

Port 2 (pins 12 to 28) are used for the high 8 bits of the 16 bit memory address during read and write cycles and together with the O side of U2 as described above, form the 16 bit CPU address bus.

Port 3 (pins 10 to 19) is rather like port 1 where all the pins are used for different things.  Pins 10 & 11 are the receive & transmit for the serial I/O port which connect to J4 RX & TX via T1 & R1 of U8 which is the RS 232 interface.  Pins 12 to 15, INT0, INT1, T0 & T1 are connected to the respective pins of J5 for external application usage.  Pins 16 & 17 are the WR (write) & RD (read) strobe for activating the SRAM U3 (or an expansion card) to read from or write to the data bus at the current address specified by the address bus.  As described above in the oscillator section, pins 18 & 19 connect to the crystal.

Remaining pins:  Pin 9 is RESET and is driven by the Reset Section described above.  When it goes from high to low, the CPU reboots.  Pin 29, PSEN is the read strobe for the program store and works just like the RD on port 3 for the data store.  As in this design the program store and the data store are the same common resource, PSEN and RD are combined by an AND gate in U5 to produce the READ ANY line.  Pin 30 is ALE described with port 1 above.  Lastly, pin 31 EA (External Access) is used to enable access to external program memory for the lower 8K when the pin is low, or in other words disable the lower 8K of program memory within the 80C52-Basic chip.  This is where the actual BASIC-52 interpreter is stored in ROM which we need to use, so this pin is always set high (disable external enabling, get it!!) by connecting it to the 5 volt line.  So if you read from the program store within the lower 8K, nothing is happening on the external data or address bus, it's all internal to the CPU.  This means that the lower 8K of shared data & program store in U3 SRAM, can in fact only be used as data store.  It's also worth mentioning that any of the assembler routines in BASIC-52 itself can be called from your own BASIC-52 or assembler applications by calling to addresses within that lower 8K program memory space which is described here.

Expansion Bus Section

Expansion Bus Ribbon CableThe expansion bus is 22 pins wide and is connected as a double row on J6 allowing easy connection of two ribbon bus cables.  All of the pins have bus drivers, U4, U10 & U11.  U4 that drives the 8 bit data bus / expansion data is a bidirectional transceiver as the bus is used for reading as well as writing.  The direction is controlled by DIR on pin 1 of U4 which is driven by READ ANY.  So any time there is a low on READ ANY (read), U4 drives in the expansion bus to data bus direction (inwards), the rest of the time it drives in the data bus to expansion bus (write) direction (outwards).  Incase there is nothing connected to the expansion bus, resistors R10 - R17 hold the expansion data bus lines high to prevent any random or oscillating data.  U11 that drives the address bus address and I/O lines is also a transceiver but is always set to drive in the outward direction as the DIR on pin 1 is tied high to 5 volts all the time.  I use this chip again because of the convenience of its pin out.  U10 is a single direction driver that drives two lines that could not be fitted onto U11.  There are 5 address lines in all that are driven from A0 through A4 from the lower 5 bits of the CPU (U1) address bus.  Three lines, A2 - A3 are used to select 1 out of 8 possible expansion boards and A0 & A1 are used to select between the 4 addresses local to each board giving 256 possible addresses in all.  That should be plenty!  The largest system I have ever made had only 4 expansion boards and is used for my coffee table N-gauge model railway.  WR and RD are driven from WRITE ANY and READ ANY explained above.  GENIOREQ is an active low indication that expansion bus hardware is being accessed.  It is set low when an external memory location of 0xFF00 or higher is accessed from the CPU U1.  This tells the expansion boards to look at the address lines A0 - A4 to see what port is being accessed.  The CPU U1 will then strobe RD or WR to read or write the data as required.  GENIOREQ is driven from pin 8 of U7 and this also connects to pin 30 of SRAM U3.  When pin 8 of U7 is low, GENIOREQ is low and expansion bus hardware is accessed and pin 30 of SRAM is low so the SRAM is disabled.  When pin 8 of U7 is high, GENIOREQ is high and expansion bus hardware is disabled and pin 30 of SRAM is high so the SRAM is enabled.  So setting pin 8 of U7 high accesses SRAM, setting pin 8 of U7 accesses expansion bus hardware.  U7 is an 8-input NAND gate and has all of its inputs connected to the high 8 bits of the address bus on CPU U1 port 2.  So in the 16 bit addressing scheme, any external memory address lower than 0xFF00 (program or data) will access the addressed location in SRAM U3.  Any external memory address of 0xFF00 (program or data) or higher, will access expansion bus hardware at the addressed location.  So this means that the top 256 bytes of external memory in SRAM U3 are not accessible and are reserved for hardware access.

External Memory Section

128K Static RAMExternal memory refers to program and data memory that is external to the CPU U1.  The 8052 CPU has the ability to access a total of 64K in program memory and another 64K in data memory making 128K in all.  As explained in previous sections, the memory on this motherboard system is 64K bytes in total size and is shared between program and data memory.  This might seem like a waste of 64K especially as memory is so cheap these days!  The purpose of all this is that you can write to data memory and read assembler programs from program memory!  There is no notion of writing to program memory in the CPU.  So if the program memory is the same physical thing as the data memory, that means that we can trick the CPU into thinking that the data memory is the program memory and run an assembler program from a location that we wrote there as data!  In other words, you can download a BASIC-52 program that acts like a monitor program that you can then RUN to download assembler programs in Intel HEX format, save the assembler programs in data store, then run them from the same address in program store!  Having said all that, SRAM U3 is in fact a 128K byte chip.  The purpose of using this particular chip is that it is much smaller and has about half the number of pins compared with using a pair of 32K chips (they don't make a single 64K chip) and the board is simpler because the data and address buses don't  need to pass by two memory chips.  Because U3 is a 128K chip, I have divided it up into two blocks of 64K selectable with a switch (S3 Memory Select) or a jumper.  This means that you can have a full working system in one 64K partition and be working on a prototype or some other program in the other and can easily switch between the two (when powered down!).  There are many other possible memory configurations, but I feel this one is the best compromise between functionality and physical simplicity of the board especially as the 628128 SRAM chip has two CS (Chip Select) pins, 22 (CS1) & 30 (CS2) that can be directly connected to RESET and 0xFF00  respectively without any other support chips.

Battery Backup Section

3.6 Volt NICAD/MIMH 60mAhAll 128K of SRAM U3 is battery backed.  This means that when the power is removed the entire contents of SRAM U3 is preserved, code, data everything!  This is a very useful feature of this board.  You can use it to save loads of BASIC-52 programs or you can store extensive imbedded applications with any combination of data & program store usage.  Also, many of the features of BASIC-52 are controlled by flags set in special memory locations, so all of these are also preserved so that they can be available at boot up.  In case you manage to get some garbage stuck in the memory that prevents the system from properly booting or if you just want to dump & clean the contents of U3 SRAM, S2 Memory Backup can be switched to connect the GND pin 16 of SRAM U3 to ground rather than to the negative battery terminal.  Powering down with the switch set like this will clean the memory to all 0 on power up.  The battery at 60 mAh (and there is space for a 150mAh) is massive compared to the power consumption of SRAM U3 when it is idle, which will continue to retain data right down to 2 volts.  I suppose the main question is, how long will the backup last if the battery is fully charged and the board is left to stand for a long period.  I have no idea!  The thing is, every time you power up, the battery charges, so you would have to make a special version of the board that did not connect power to the battery so you could check every so often to see if the memory was still working.  Then again that's not a fair test because the SRAM will use much more power when it is reading and writing than it does when it is just standing idle.  All I can tell you is that I have boards that are more than 10 years old that work with 100% reliability when used on a reasonably regular basis unlike the configuration memory of my top of the line $1400-00 Marantz AV-9000 receiver!!

Physical Memory Map Table

As described previously, you can see in the table that BASIC-52 resides in address range 0x0000 to 0x1FFF (the lower 8K) of the program store and the same address space in data store can also be used as 8K of RAM.  The shared program and data store section then starts from 0x2000 and goes all the way up to 0xFEFF measuring 56K in total.  Then hardware addressing goes from 0xFF00 to 0xFF1F.  As you can see, there is then a spare un-addressable block from 0xFF20 to 0xFFFF.  This is because the expansion bus has only five address lines (A4 - A0) as that is all that is needed to address the 8 supported expansion cards in this design.  If the expansion bus had the full 8 lines available from the CPU U1 address bus, then 64 expansion cards in total could be addressed, but there is just no need for so many and it is not worth complicating the board design any more just to get back 224 bytes of extra SRAM memory.  Also it's worth noting that although I describe this as an un-addressable section, because address lines A7 - A5 are not even connected to the expansion cards they don't know anything about them and will still look at A4 - A0 even if higher addresses are being set.  In other words expansion address 0xFF20 looks like the same thing as 0xFF00 to the hardware and so on!  So in general, you should be careful that your programs don't wander into the address space above 0xFF1F as the results may seem confusing indicating that you can communicate with hardware that isn't there, although in fact it will be the hardware in the 0xFF00 - 0xFF1F range that is answering you!

Memory Address Program Store Data Store Expansion Hardware
0x0000 - 0x1FFF BASIC-52 Duplicated (S3) Data Store Not Used
0x2000 - 0xFEFF 56K bytes Duplicated (S3) Shared Program & Data Store Not Used
0xFF00 Not Used Not Used Card 1, Port A
0xFF01 Not Used Not Used Card 1, Port B
0xFF02 Not Used Not Used Card 1, Port C
0xFF03 Not Used Not Used Card 1, 82C55 Config
0xFF04 Not Used Not Used Card 2, Port A
0xFF05 Not Used Not Used Card 2, Port B
0xFF06 Not Used Not Used Card 2, Port C
0xFF07 Not Used Not Used Card 2, 82C55 Config
0xFF08 Not Used Not Used Card 3, Port A
0xFF09 Not Used Not Used Card 3, Port B
0xFF0A Not Used Not Used Card 3, Port C
0xFF0B Not Used Not Used Card 3, 82C55 Config
0xFF0C Not Used Not Used Card 4, Port A
0xFF0D Not Used Not Used Card 4, Port B
0xFF0E Not Used Not Used Card 4, Port C
0xFF0F Not Used Not Used Card 4, 82C55 Config
0xFF10 Not Used Not Used Card 5, Port A
0xFF11 Not Used Not Used Card 5, Port B
0xFF12 Not Used Not Used Card 5, Port C
0xFF13 Not Used Not Used Card 5, 82C55 Config
0xFF14 Not Used Not Used Card 6, Port A
0xFF15 Not Used Not Used Card 6, Port B
0xFF16 Not Used Not Used Card 6, Port C
0xFF17 Not Used Not Used Card 6, 82C55 Config
0xFF18 Not Used Not Used Card 7, Port A
0xFF19 Not Used Not Used Card 7, Port B
0xFF1A Not Used Not Used Card 7, Port C
0xFF1B Not Used Not Used Card 7, 82C55 Config
0xFF1C Not Used Not Used Card 8, Port A
0xFF1D Not Used Not Used Card 8, Port B
0xFF1E Not Used Not Used Card 8, Port C
0xFF1F Not Used Not Used Card 8, 82C55 Config
0xFF20 - 0xFFFF Not Used Not Used Not Used


This section provides links from my own site and from other sites that have complementary information.

80C52 Motherboard Circuit diagram 80C52 Motherboard Track Print 80C52 Motherboard Surface Print
80C52 Motherboard Circuit Temic 80C52-BASIC Datasheet The Microcontroller Idea Book BASIC-52 Instruction set Online BASIC-52 Manual
Lakeview Research Resistor Color Code Calculator Systronix
The What, Why and How of Hex   ASEM-51 Home Page

Power Supply

7805 Data SheetJameco 5 Volt Power SupplyAlthough not the subject of this page, you will of course need a smooth +57805 volt DC power supply to power the motherboard and the display.  You can either buy a readymade 5 volt transformer like this, or you can make a simple setup using a 9 volt AC transformer a 7805 regulator and a few capacitors as shown in the 7805 datasheet.  I do it that way using a piece of grid style board and it looks like this when done.  I'll leave you to figure out how to connect the tracks, otherwise you can just buy a readymade wall unit as shown.


16 X 2 LCDMost projects will require a display of some kind.  Even if not required for the project, a display can be useful for debuging, testing and it's cool to play with!  Also, most people around you will not be able to understand that anything is happening unless there is an alphanumeric display for them to look at!  The simplest displays are parallel LCD displays and they go for around $20 for 16 characters x 2 lines.  In most microcontroller systems the standardLCD Serial Backpack 14 pin Hitachi HD44780 parallel bus of the LCD panel is directly connected to the CPU data & address bus in some way or is connected via a peripheral interface controller of some kind.  In this 80C52 motherboard design, this would mean adding an expansion board with an 82C55 controller and writing a load of code to interface with it such as described in the The Microcontroller Idea Book.  As small serial to parallel interface "LCD Backpack" style boards are available for less than another $20, I always use one of those as it just isn't worth making a special expansion board just for the LCD display.  It's not like you can make the display anyhow!  Also, this means that the LCD can be directly connected via the backpack to the LPT pin of J3 on the motherboard (which also has +5 volt and GND pins for the display) and so only three wires are needed in all including the power.  Then the BASIC-52 PRINT# command can be used to display text on the LCD with no other special code required leaving more time to work on the application.  You also need to use the BASIC-52 BAUD command to set the correct speed for the backpack.  I recommend setting the backpack and BAUD to 9600.  Anything faster is just not necessary and will VFD!introduce timing issues due to the relatively slow speed of the Hitachi controller in the LCD.  WellNoritake if you like that, you'll love this:  How about using a VFD!  Noritake make a wide range of VFD (Vacuum Florescent Display) devices that are drop in compatible with the 14 pin Hitachi HD44780 parallel bus interface of an LCD and they look absolutely fantastic!  The only thing to remember is that a VFD (and some back lit LCD's for that matter) will use much more power than a plain LCD display, therefore you should consider powering the Backpack/VFD combination from elsewhere than a +5 volt pin of J3 on the motherboard.  The only negative thing about VFD is the cost with a simple 24 X 2 display costing about $68, but they really do look great!

Component List

Here is the list of suggested tools and components that will be needed.  As time permits I'll add more links to as many of these as possible, but there is at least one link for each required component.  I have found however that it is never possible to get all the items needed for this project from just one supplier and many items are available from multiple suppliers. Also you will find that some items are so small & cheep that they are only available in larger quantities than you need and that minimum quantities very between suppliers. Where needed you can easily substitute components from different manufacturers other than those I list here as long as the specification is the same. i.e. any 330 ohm 1/4 watt resistor will do for R1.  When I get around to it, I plan to sell some kits on eBay that have everything in a bag ready to go with the design already printed on the Press'n'Peel transfer!  Please let me know if you would be interested in such a thing!

Tools Description Supplier
Anti-Static Mat Mat 23 x 27 Jameco 236540
Anti-Static Wristband Wristband Jameco 285456
Anti-Static Foam Conductive foam Jameco 13864
Soldering Iron 15 Watt Grounded Soldering Iron Radio Shack 64-2051
Spare Tip Spare Soldering Iron Tip Radio Shack 64-2052
Drill Mini Drill Jameco 26702
Drill Stand Mini Drill Stand Jameco 26711
Drill bit for components DRILL BIT,PC,SIZE 75 Jameco 16619
Drill bit for headers DRILL BIT,PC,SIZE 59 Jameco 16580
Board Supplies
PC Board Plain copper board 115mm x 160mm Radio Shack 276-1149
PCB Etchant Ferric Chloride Solution 16 Fl. Oz. Radio Shack 276-1535
Dry Ferric Chloride All Electronics CAT# ER-3
Dry Concentrated Etchant Jameco 70201
Press'n'Peel 5 Sheets of Press'n'Peel All Electronics CAT# TEK-5
Etch Resist Pen Resist Pen 416-RP ABRA Electronics 416-RP
Sticky Tape Highland Invisible Tape 6200 Office Depot
Goo Gone Toner Solvent Office Depot
Sticky back paper 1 Label per sheet Office Depot
Strap Wire Hookup wire 24 AWG Jameco 234168
Header J1, J2, J3, J4 & J5 Single Single row header, 22 pins Jameco 202825
Header J6 Double Expansion Bus Double row header, 26 pins Jameco 53583
R1 330 ohms 1/4 watt Resistor Orange, Orange, Brown Jameco 30867
R2-9 & R10-17 10K ohm Network Resistor Net, 10Pin, 10K ohm 2% Jameco 24643
R18 10k ohms 1/4 watt Resistor Brown, Black, Orange Jameco 29911
R19 & R20 4.7k ohms 1/4 watt Resistor Yellow, Violet, Red Jameco 31026
R21 2.2k ohms 1/4 watt Resistor Red, Red, Red Jameco 30314
R22 1k ohms 1/4 watt Resistor Brown, Black, Red Jameco 29655
C1 & C4 10uF Electrolytic Radial, Mini, 5mm, 10uF, 25V Jameco 94211
C2 & C3 30pF Mica,33pF, 500V, 5% Jameco 16070
C5, C6, C7 & C8 1uF Electrolytic Radial, Mini, 5mm, 1uF, 50V Jameco 94160
C9 - C20 0.1uF Ceramic .1uF, 50V, 20% Jameco 25523
D1 & D2 1N4148 Diode 100PRV@25mA, 1Vf@10mA Jameco 179215
ZD1 3.3V 1N5226B Zener Diode 1N5226B ABRA Electronics
Mouser Electronics
LED1 LED, RED, 2.3Vf@20mA Jameco 94529
Chip Sockets
IC 1 40 pin DIL IC Socket Dual Wipe Solder Tail 40 Pin Jameco 112310
IC 2, 4 & 11 20 pin DIL IC Socket Dual Wipe Solder Tail 20 Pin Jameco 112248
IC 3 32 pin DIL IC Socket Dual Wipe Solder Tail 32 Pin Jameco 112301
IC 5, 6, 7, 9 &10 14 pin DIL IC Socket Dual Wipe Solder Tail 14 Pin Jameco 112213
IC 8 16 pin DIL IC Socket Dual Wipe Solder Tail 16 Pin Jameco 112221
U1 80C52-BASIC 80C52 Microprocessor BASIC-52 Jameco 125647  Micromint
U2 74HCT373 Octal D-type flip-flop tri-state Jameco 45065
U3 628128 SRAM 128K x 8bits Static RAM Jameco 131810
U4 & U11 74HCT245 Octal 3 state Transceiver/Bus Driver Jameco 45031
U5 74HCT08 Quad 2-Input AND gate Jameco 44901
U6 74HCT14 Hex inverter Schmitt trigger Jameco 44935
U7 74HCT30 8-Input NAND gate Jameco 45786
U8 MAX232CPE Dual RS232 transmitter/receiver Jameco 24811
U9 74HCT32 Quad 2-Input OR gate Jameco 45057
U10 74HCT125 Quad 3 state Bus Driver Jameco 243192
XTAL 1 Crystal Oscillator 11.0592MHz Jameco 120061
T1 BC557 NPN Switching Transistor Mouser Electronics 512-BC557
T2 BC547 PNP Switching Transistor Mouser Electronics 512-BC547
B1 BAT, NiCD, 3.6V, 60mAh, 3PINS Jameco 119116
S1 Switch, Tactile, SPST, OFF-(ON) Jameco 119010
S2 & S3 Switch,Tog,Mini, SPDT ON-OFF-ON Jameco 26135
Serial Backpack LCD Serial Interface Module Jameco 157981
LCD Display 20X2 LCD Parallel Display Jameco 171723
VFD Display 24X2 VFD Parallel Display Digikey 286-1029-ND
Power Supply
Wall Transformer Wall transformer 5 Volt 1000mA Jameco 155601


Now that you have collected together all the components you need, it's time to start building the board.  You may find it useful to read the Techniks Press'n'Peel process too, although I describe all the steps that I use here.  Also, before you start, let me give you this advice:  The more care you take with each step of construction and the more proud you are as each step is completed, the more likely you are to see the board working in a shorter amount of time!  Enjoy the process of working on each step and if you are tired, leave further steps until later.  At the end of the day, although small, this is a full blown computer we are building here!  The complexities of how to fault find broken or shorted tracks on a system like this are beyond the scope of this page although some general guide lines are given.  If at the end of it the system fails to function it can only be because you have skipped or rushed a step, or have a faulty component.  As the steps include testing the board with the components as they are added, it is most unlikely that you will fail to get it going.  Having said that, on one occasion I did build a system and find that the MAX232 chip was faulty!  Because I had more than one of each chip and by following the steps, I managed to work it out.  I told Jameco about it and they just sent me another and as soon as I plugged it in it worked!  Another point worthy of mention is that most all of the chips used are CMOS.  This means that they are sensitive to electrostatic discharge damage that can occur without you even noticing until it's too late!  To be completely sure, you should invest in an anti-static mat to work on and an anti-static wristband.  Also, when working in a domestic environment, it is easy to forget that every step you take walking across a carpet can be charging you up to thousands of volts of static potential!  Remember this too when you show friends & family your board in production.  Don't let them handle and poke it about!!  By following those simple rules, I have never had a problem with any chip over many years of electronics production!  Well, OK, so it may have been me that blew up that MAX232!  I guess I'll never know for sure!  OK, so let's get going!  Make sure you read all about each step before you start that step!  Sometimes I add additional or different information towards the end of the description.

The following sections need more work and I'll be updating them next time I make a board but there is still some useful information here.

1.   Print the 80C52 Motherboard track print onto the Press-n-Peel.

Click on 80C52 Motherboard track print and print it out.  Then take 1 sheet of your Press-n-Peel and put it into the paper feed tray of a photocopier with the dull matted side facing up, this is the side we want the black toner from the copier to end up on.  Place the printout of the 80C52 Motherboard track print face down on the glass of the copier & press copy.  It may be a good idea to first play around with the copier a bit to workout which side the paper gets printed on and which is the top & bottom etc.  Not all copiers will be as I describe here!  If you accidentally get the print on the glossy side of the Press-n-Peel, my advice is to throw it away and start again!  Next, as you can fit two prints of the board onto one sheet of Press-n-Peel, you may as well do another on the bottom of the same sheet.  This will give you two chances later on!  So this time, place the Press-n-peel  into the copier the other way up, rotated top to bottom, not flipped front to back!  Then copy again.  So now you should have one sheet with two copies of the print, one rotated 180 degrees from the other.

2.   Cut the plain copper clad board to size.

If you have a larger board, you may want to cut it down to the exact size which is 115mm x 160mm (4 17/32 in x 6 19/64 in).  Radio Shack item 276-1149 is already the correct size.  Use the corner marks on the 80C52 Motherboard front print to measure.  The board needs to be just large enough for the corner marks to fit on.  If you are making a larger board with one or more daughter boards fabricated on the same physical board, then you can size it as required.  Use a hacksaw to cut the board and smooth the cut edges with fine sand paper to remove any burrs.  The plain board only needs to have copper cladding on one side, but if it is double sided like the Radio Shack board, that's OK too.

3.   Clean the surface of  the plain copper clad board.

This step is important as the copper surface needs to be shiny & clean so that the laser jet toner on the Press-n-Peel will stick to it.  It is also important so that the ferric oxide solution will properly dissolve all of the exposed copper when the board is etched. Clean the board with wire wool & washing up liquid until it is shiny and clean (on both sides if double sided). Brillo pads are good for this as they have clean steel and the soap is already mixed in.  Then, rinse in warm water and dry with a paper towel.  Hold the board by the edges now that it is clean, no finger prints!

4.   Print the etch resistant tracks onto the plain copper clad board.

Cut the print from the Press'n'Peel sheet leaving at least an inch at each end and at least half an inch at the sides.  Lay the Press'n'Peel sheet on your work surface with the dull & printed side up.  Lay the copper clad board face down on the Press'n'Peel sheet.  If you have your board sized exactly to 115mm x 160mm (4 17/32 in x 6 19/64 in) you will be able to align it with the corner marks on the print by moving the board around until all the corners are hidden.  When it is aligned correctly, tape the board to the Press'n'Peel sheet with a couple of small pieces of sticky tape to hold it in place, one at each end.  Overlap the tape on the board and the Press'n'Peel as little as possible.  Now turn the board the other way up so the shiny side of the Press'n'Peel is facing up.  Place a piece of flat wood under the board that is larger than the Press'n'Peel sheet.  Tape the Press'n'Peel ends to the wood to prevent it from moving around.  Now go and get the iron!  Turn it on to 300 degrees F or the setting for polyester (DO NOT USE STEAM SETTING!!).  The temperature of the iron is critical and the exact setting depends on the toner used in the copier that you used to make the print.  Therefore some conservative trial & error is called for!  Set the iron to the setting that is the minimum that you think will work.  Give the iron time to warm up!  Start to iron smoothly over the entire board surface.  The Press'n'Peel will start to smell and appear to shrink slightly.  Sometimes (but not always) the tracks appear to become darker under the iron.  This is an indication that it is plenty hot enough!  Keep moving all around the board and once you have gone around for about 8 to 10 minutes and the shiny surface of the Press'n'Peel looks even, stop.  Let the film cool a little for about 5 minutes.  On one corner only, lift up the Press'n'Peel and see if the corner mark has stuck to the board.  If not, you need to turn up the heat a little and go around for another 8 to 10 minutes.  If it looks good, lift another corner and check there.  Now a word of warning:  If you apply too much heat and pressure, the toner will melt into a liquid and some tracks will become stuck together!  Sometimes you can see this happening looking through from the shiny side.  If this happens, stop at once.  Be careful about going over the center over & over.  If you are patient and build up the heat bit by bit, you should be able to get it right first time.  Once you have found the ideal setting on your iron, mark the setting!  Now leave the whole thing to cool down for about 20 minutes.  Start to lift one entire side of the Press'n'Peel to see how more of the board looks.  If there are places where some tracks have not stuck, you can get the iron going and go round again.  If you are happy with the result, peel the clear packing tape off and remove and discard the used Press'n'Peel.

5.   Inspect & fix the printed board for any joined tracks

Oh, this sounds dull.  Yeh, skip this step or the next and you may as well skip all the rest!  Now you need to closely inspect the board for any places where pieces of toner are stuck to the board that shouldn't be.  Use the 80C52 Motherboard track print for reference.  Techniks recommends using some clear packing tape to pull off the excess toner.  Stick a strip of tape from the top to the bottom of the board and then remove it.  As it peels off, it pulls off the unwanted toner.  Continue all across the board.  Warning: Sometimes doing this can pull of the tracks of toner that are supposed to stay, so try a small test piece first!  Also don't use a tape that is very sticky as the stick can get stuck onto the copper and prevent the board from being properly etched.  If I need to do this, I use office tape that is not too sticky.  Look closely for any tracks or points that are stuck together and use the tape to separate them.  If that won't work, use a craft knife to very carefully cut a line in between the tracks.  If you cut through a track by mistake, we'll fix that in the next step.  Next, the very most important thing of all: You must make sure that there is a hole in the center of every solder pad.  If you fail to check this now, you'll be so sorry when it comes to drilling the board!  Look at every pad and make sure they all look like this.  If they are solid like this, then you need to make a tiny dot like scratch in the exact center like this.  You can use the tip of a craft knife or some other sharp point.  When the board is etched, the tiny spot in the center of the pad will be lower than the surrounding pad surface and form a guide for the drill bit to sit in.  Without this, the drill will skip to the side of the pad and the whole will be in the wrong place.  You can not afford to have a single pad without a proper center!  Make sure you take all the time you need to check them all.  If you find that you have nearly all the pads requiring attention, you may want to consider printing another board.  Looks like the iron was too hot?  If this happens, you can remove the print by wiping the board with Goo Off or Goo Gone and a paper towel.

6.   Inspect & fix the printed board for any broken tracks

Now that all the loose toner is removed, all the tracks are separated and all the pads have a nice center spot, you need to closely inspect the board for any places where the toner has not stuck and come off by accident or even been messed up by the previous step!  This should also include any places where tracks have been scratched as just a small scratch will allow the etching solution to get in and break the track.  Sometimes you may find that a bunch of tracks together are broken.  This can be caused by the copper not being cleaned properly, a fingerprint after cleaning or just that the iron was not quite hot enough or not pressed evenly over the entire board.  To fix all these cases, use an Etch Resistant Pen to draw a line over the breaks.  Use a ruler to make sure the lines are neat and straight.  When you are finished, the board should look like this.

7.   Etch the board

Find a suitable plastic tray or tub that is about an inch bigger than the board all the way around and about two inches deep.  Pour the etching solution into the tray so that it is about half an inch deep.  Now place the board into the tray with the copper side up.  If your board is double sided, place the printed side up.  Be careful not to spill any ferric chloride as it will make a brown stain that will never come out!  It will take about 20 minutes to etch the board.  During this time you should tip the tray from side to side so that the etchant flows across the surface of the board.  You will find that the edges of the board etch first.  Use a paint brush to brush the etching solution over the center of the board.  Once the center is finished, if your board is double sided, flip it over and continue to tip the tray from side to side and brush the center to finish it off.  Don't go away and leave the board in the solution on it's own!  If you forget it, it will get messed up!  Once complete, remove the board from the tray and wash it in cold water and then dry with a paper towel.  Now that the board is clean, the toner can be removed to reveal the copper tracks.  If you are not going to finish the board for a while, you may as well store it as it is as the toner will continue to keep the copper clean and prevent oxidization.  When you are finished, the board should look like this.

8.  Clean the toner from the etched board.

Use some Goo Gone or other general purpose solvent to remove the toner from the board with a paper towel.  Wash the board once again with soap & water or the Brillo pad to get the tracks shiny and clean.  When you are finished, the board should look like this.

9.   Drill the board

Now, every one of the holes has to be drilled.  In the example photo I am using the Mini Drill and Stand from Jameco with a xx mm drill.  Carefully drill each hole using the pit is the center of each pad as a guide.  If you skipped the part in step 5 about making sure there was a hole on the center of each pad, now is the time you will be feeling sorry for yourself!  To reach the holes near the center of the board rotate the board to have a go from all sides.  The small drill stand can get in the way a bit.  If you have a larger board you will need a larger drill stand.  You may be able to get away with drilling one or two in the center by hand but don't plan on doing the whole board that way.  Now that all the holes are done, re-drill all the ones that will have headers, switches, battery etc. with the larger yy mm drill.  Make absolutely sure the hole is intended to have a larger hole before you drill.  Study 80C52 Motherboard Track Print.  All such pads are larger and you should be able to see the difference ok.  Look at this example.

10. Apply & puncture the surface print

Load your printer with some sticky back paper (usually referred to as 1 label per sheet) and print the 80C52 Motherboard Surface Print.  Choose any two holes at diagonally opposite corners of the board.  place a piece of strapping wire through the hole and solder it in place.  Cut off the wire so that it is about 1 inch in length.  Now make two holes in the print you just did in the same positions at the two wires you just added to the board.  With the copper side of the board facing down and the two wires sticking up through the top of the board, remove the backing from the sticky back print and lay the print onto the board with the wires coming up through the two holes you just made.  As the sticky back print lays down on the surface of the board, the wires will guide it into exactly the right position!  Press it down & get any bubbles out.  Now remove the two wires with the soldering iron and pliers.  Now you need to punch a hole through the paper in all the drilled holes so that the components can be placed onto the board without damaging them.  I use a small drill bit held in a piece of double sided tape like this.  You can use any method you like.

11. Fit & solder the straps

12. Fit the chip sockets

13. Fit the header connectors

14. Test the chip connections.

15. Fit the resistors

16. Fit the LED & diodes

17. Fit the capacitors

18  Power test

19. Fit the transistors

20. Fit the battery

21. Charge the battery

22. Plug in the chips

Serial Port Connections

More to do here...


More to do here...

Expansion Boards

As I get time, I'll be adding a page for each of the different expansion boards that I have made and describe the software that controls them.  Until then, here is a brief description of each board.  Even with this short description of some of the boards, you can quickly get an idea of what you could use a system for and why imbedded microcontroller systems are now part of just about every product!

Generic 24 bit I/O board

This card is not a production design but is a layout for a card that has 24 bits of I/O using an industry standard 82C55 peripheral interface controller and is the basis for all the other expansion boards described here.  There is space for any additional components that may be needed to make what ever you want like relays & drivers for example.  Just add your own design so that the 24 I/O lines lineup with the connections to the I/O ports of the 82C55.

Hi-Fi Remote Control Interface board

This expansion board is the hardware that I use to control my stereo system from my computer with my own Windows application called PCRemote.  It has 16 output ports that can be used to drive infrared sender LED's that are physically in front of or imbedded into each item of Hi-Fi equipment.  There are 6 input ports that can be connected to Pioneer or Sony CD & DVD Juke-Box style changers to detect end of track or disc playing.  The remaining two input ports are infrared receiving ports for recording infrared codes associated with each button on a remote control handset.  One of them signals solid blocks of infrared light and the other provides a de-modulated digital signal centered at 40KHz.  Although the demodulated receiver is centered at 40KHz, it appears to be able to successfully demodulate infrared pulses anywhere from 32KHz to 56KHz.  The un-demodulated input port is then used to determine the carrier frequency so that proper playback can be achieved.  I have written an extensive assembler imbedded system that runs on the 80C52 motherboard to operate this expansion board that enables the host Windows application to order any infrared pulse pattern with any carrier frequency to be sent on any port.  Recordings made from infrared handsets are uploaded to the host for storage.

4 Port RS232 serial output board

This expansion board is again used with my Hi-Fi system.  Several of the components like DLP Projector, DVD Juke-Box, X10 interface etc. communicate with a host application using serial RS232 communications at various speeds.  This board allows the PCRemote application running on the Windows host to use a common API to communicate with all the Hi-Fi equipment and order complex sequences of commands that interleave infrared commands with serial port data.  PCRemote can order any sequence of characters to be sent on any serial port on the card at any speed.

16 port output and 8 port input board

This board has 16 output ports that can directly drive LED's or small relays.  It also has 8 input ports that can be used a switch detectors.  This is useful in an application where you need to be able to light up a few LED's and detect the user pressing some buttons.

3 port pulse width modulated 12 volt DC motor driver board

This is a board that I use with my coffee table N-Gauge model railway.  The board can independently operate 3 trains at the same time.  Writing a value to one of the three ports can select 1 of 32 predefined speeds and the direction.  Rather than using an output that changes the voltage according to the speed set for the port, this board uses pulse width modulation at a fixed frequency of 220Hz regardless of speed.  At slow speeds the pulses are thin but still at the full 12 volts.  As speed increases, the pulses get wider.  At half speed, the duty cycle (mark/space ratio) is 50%.  At full speed the output is a solid 12 volts.  This pulsing arrangement suites the small N-gauge train motors giving them a good 12 volt kick 220 times a second even when going slowly.  This makes the system very reliable and gives realistic acceleration and breaking that can be controlled by the embedded system running on the 8052 motherboard.

8 port point (switch) controller board

Another model railway board, this one uses the 8 bits of port C on the 82C55 peripheral interface controller to independently switch up to 8 sets of points or switches as they are called in America.  The board uses a bitable flip-flop mechanism driving a powerful Darlington transistor for both the set & reset direction.  So just by changing a bit on port C from 0 to 1 or 1 to 0 will set or reset the point.  There is also hardware protection against continuous operation to protect the tiny point motors.

15 port broken beam sensor board

Again a board I use for the model railway but could be used for any kind of position monitoring.  It has 15 ports that each independently drive and sense an LED light beam that are phase locked together.  This means that very reliable broken beam sensing can be achieved with all the sensors packed close together with no worries about light from one beam transmitter accidentally activating another receiver.  The power and frequency of each transmitter can be easily adjusted.

Page History

September 2004


Still working on it!  Various sections as indicated still to do!

Then I have to finish the construction part.  I'll do it as best as I can with the pictures available.  During the winter of 2004/2005 I plan to build another motherboard to use with my subwoofer and now that I have this page going, I'll make sure I get all the pictures needed as I build the board.

August 2004

Wow!  Although I say it myself, this is quite some web page!  There is considerable technical detail here and hundreds of links!  I started the page in August of 2004 when I setup my first home page.  I wanted to write something about my home microcontroller projects to document it for myself and thought it would be cool if I had a page on my site where people could download my diagrams and build their own systems.  I did all the original work in the mid 1990's to make hardware for my PCRemote Windows program that I started writing about the same time to control my old Pioneer PDF-100 Juke-Box CD players.  Nobody had even seen such players at the time and I quickly found that I needed something bigger than a remote control handset to control them.  As I could find nothing for the hardware that I wouldn't have to modify in some way, I thought I may as well design the whole thing from scratch myself so that I had complete understanding and therefore control over the whole application.  This page describes the detail of the latest version (Rev C) of the main CPU motherboard I designed to use with PCRemote.  It can of course be used for anything though.  Please let me know what you think!  Sometime when I have time, I'll setup a page about PCRemote and link to this one, but for now, I have to go and mix up some cement in a bucket and fix the outside step that I broke with a beer keg! /Adrian..