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
       
 (TXT) Source code
 (TXT) 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 ;)