Build your own a low-cost learning board C-52 EVB for studying Assembly and C language programing. The board features 89C52 with 8kB PAULMON2 monitor program, 32kB RAM, and two 8-bit ports P1 and P3. PCB file included.
IntroductionI have designed the C-52 EVB to be used as a learning tool in the class "Assembly and C programming for Microcontroller". This page provides materials for building the board. Students may build the board by themselves to practice learning by doing. The C-52 EVB has a 89C52 with 8kB PAULMON2 monitor program, 32kB SRAM, and two 8-bit ports P1 and P3. There is no 7-segment display and hex key pad, entering hex code or intel HEX file to the test RAM thus needs a PC running terminal emulation program TVI 920, say.
HardwareA circuit diagram of the C-52 EVB is depicted in Figure 1. See at EA pin first, I put EA to Vcc configuring the 89C52 started internal code execution when reset. The first 8kB code space, 0000H-1FFFH is then be a monitor program, i.e., PAULMON2. A 32kB SRAM 62256 uses 15 lines address, A0-A14, while A15 of the 89C52 connects inverter gate, 74HC00, to CE pin. This makes the address space of the SRAM to be 8000H-FFFFH, i.e., A15 must be '1' to enable 62256. See OE pin, RD and PSEN are tied together with AND gate made by two NAND gates. This makes the address space 8000H-FFFFH seen by 89C52 can be external code and data memory. Thus during in monitor mode that runs under PAULMON2, user may write hex code or download intel HEX file to 62256. When jump from PAULMON2 to user program and run user program, this space is then be seen by 89C52 as a code space. Since P0 and P2 are used for connecting external RAM, left P1 and P3 for experimenting with real world interfacing through input/output port. Nowadays there are many peripheral chips that use serial protocol, say I2C, SPI. Thus only two port is surely enough.
Constructing the BoardI have used a universal PCB for wiring the circuit. It took an hour, not so difficult. I have also asked my student using Protel to make PCB. Please wait the latest layout. I will put it here soon.
Here is the latest PCB file, c52evb.pcb (77,824 Bytes, open with Protel V2.73) and the picture shown below is a component placement layout. Be careful the polarity of electrolytic capacitors and pin 1 of IC chips. A 20-pin socket is compatible with 2051/4051 I/O pins, useful for i/o pins emulation.
C-52 EVB Bill of Materials
Item Reference Value Description Remark
1 C1,C6 10uF/10V electrolytic capacitor
2 C2,C3 30pF ceramic capacitor
3 C4,C7 0.1uF ceramic capacitor
4 C5 470uF/35V electrolytic capacitor
5 R1 8.2k resistor ¼ Watts
6 R2 10k x8 R PACK 10kx8
7 U1 89C52 ATMEL Microcontroller
8 U2 74HCT373 Octal Latch or 74HC573
9 U3 62256 32kB SRAM or DS1235 NVRAM
10 U4 74HC00 Quad NAND gate
11 U5 DS275 RS232C Converter or MAX232
12 U6 7805 +5V regulator
13 D1 DB102 small bridge diode
14 D2 LED small dot LED
15 Y1 11.0592MHz Crystal
16 J1 Modular Connector or DB9 connector
17 J2 DC Jack
18 PCB1 Printed Circuit Board (Universal PCB) or ready made PCB
Since the external ram space is from 8000H-FFFFH, code space is from 0000H-1FFFH, my design uses on-chip code space, thus no longer need external EPROM. Students need a chip writer, say Easy-Downloader V2.0 for writing the hex file to the 89C52 chip.
PAULMON2 document details how to use monitor command and useful information.
SOFTWARE UPDATING 18 August 2542
myPAULM2.hex is intel hex file of "myPAULM2.asm" and "myEXTRA.asm", modified version of PAULMON2 monitor program. The fancy editor was cut and the following functions were added;
1) return address to monitor by using 'JMP monitor' where monitor address was defined in myPAULM2.EQU and,ASM51.ZIP (157,660 bytes WinZip File) Assembler and Terminal Emulation Program.
2) baud rate was fixed at 9600 8n1, this allows the use of C-52 EVB to be a dedicated controller by using Paul's concept of PROGRAM HEADER w/start-up method and a 32kB NVRAM. PAULMON2 Program Header describes four types of user program. With hardware start-up type and fixed baud rate, user program will run when power up after some initialization.
3) I have put a subroutine that get integer number from terminal and return 16-bit integer in BA, i.e., B accumulator holds high byte, A for low byte. Main program may use 'CALL getnum'. The absolute address of getnum subroutine was defined in my latest myPAULM2.EQUfile. This subroutine will use in experimenting with assembly program.
New feature: Displaying 256 Bytes INTERNAL RAM for 52 core CPU.
The internal RAM for 52 core has 256 bytes. The address range between 80H to FFH has the same logical address as the SFRs, however, we can access this range for RAM storage by using INDIRECT addressing. But for SFRs we use DIRECT addressing instead.
Download now: mypaulm3.hex 12 October 2544
Testing the BoardBefore putting all of the chips, plugs DC adapter, then check +5V supply every chips. If ok then pull the DC jack out then put all the chips to the sockets. Now run terminal emulation program, press enter key, the prompt will show on screen. Type ? for help command, Figure 3 shows example of disassemble hex code via List command. Figure 4 shows downloading and running demo.hex, see return to monitor and printout of Accumulator & PSW.
Figure 3: Example of Disassemble Hex code via List Command
Figure 4: Running demo.hex then return to monitor
C-52 EVB Links