GOPHERSPACE.DE - P H O X Y
gophering on sdf.org

       8051
        programming

Say hello to the most ubiquitous microcontroller in the world.

The MCS-51 is probably the best known microcontroller out there. It seems
to appear in the least expected places nowadays, like a BLE stack or other
stuff like that.

The 8051 (which is just another, one of probably 50, names for the
MCS-51) has defined the form and programming interface of modern
microcontrollers. The idea of SFRs - special function registers - memory
addresses which do not act as general purpose RAM but configuration
registers for peripherals, are found in almost all other kinds of
microcontrollers.

The 8051 can be easily programmed under *nix with SDCC and a bit of
patience.


Below is some example code that will blink a led on any pins of port 1

Source code
Makefile

These should be self explanatory, P1 is the IO Port 1 register. Writes
set outputs, reads load inputs. The makefile is also dead simple.

After the makefile creates the intel hex file with the code, you need to
somehow upload it to the microcontroller. If you have a programmer then
you are good to go.. you can either program the microcontroller directly
(if it has programmable flash/eeprom memory), or you can wire an external
eeprom to the 8051. In the latter case remember to ground the /EA pin.


You will also want to feed a clock signal to the 8051, the easiest is to
feed a square-ish clock signal directly XTAL1 pin, for example from a 4
pin crystal oscillator. My code runs nicely at 3-ish MHz. The delays are
more less calculated, you only have to adjust the constant. The magic
numbers in the delays are cycle counts, so if they are still off, you
might want to take a look at what assembly sdcc came up with... remember
8051 takes 12clks for almost anything, 24clks for branches (taken or not
taken).


That's all. I hope I sparked your interetest in 8051, even though it's a
finnicky processor.

Now maybe I'll move on to MCS-48 as I have a mysterious board with one of
those ;)