Archive-name: microcontroller-faq/primer
Posting-Frequency: monthly
Last-modified: Jan. 26, 1994

This article is a primer and general FAQ about microcontrollers.
Included is a collection of information sources on various
microcontrollers.

The following topics are addressed:

      0)  Rantings and ravings (to make the FAQ zero-based)

      1)  ABOUT THIS FAQ
    1.1)  Who put this FAQ together?
    1.2)  How can I contribute to this FAQ?
    1.3)  What newsgroups will this FAQ be posted to?
    1.4)  May I distribute this FAQ or post it somewhere else?

      2)  MICROCONTROLLERS
    2.1)  What is a Microcontroller?
    2.2)  Applications
    2.3)  Flavors

      3)  SOME POPULAR MICROCONTROLLERS
    3.1)  Fabrication techniques
    3.2)  Architectural features
    3.3)  Advanced Memory options
    3.4)  Power Management and Low Voltage
    3.5)  I/O
    3.6)  Special microcontroller features

      4)  SPECIAL MICROCONTROLLER FEATURES

      5)  GETTING STARTED WITH MICROCONTROLLERS

      6)  MICROCONTROLLER PROGRAMMING LANGUAGES
    6.1)  Machine/Assembly language
    6.2)  Interpreters
    6.3)  Compilers
    6.4)  Fuzzy Logic and Neural Networks

      7)  DEVELOPMENT TOOLS
    7.1)  Simulators
    7.2)  Resident Debuggers
    7.3)  Emulators
    7.4)  Good Stereo System

      8)  FINDING OUT MORE ABOUT MICROCONTROLLERS
    8.1)  Books
    8.2)  Data and Reference Books
    8.3)  Periodicals
    8.4)  Internet newsgroups
    8.5)  Internet sources of information on specific microcontrollers

      9)  MICROCONTROLLER FREE SOFTWARE SOURCES
    9.1)  FTP sites
    9.2)  BBSs
    9.3)  Mailing lists


0)  Rantings and ravings

    Disclaimer:  Just so it is understood, the "rantings and ravings" are
    my rantings and ravings.  My readers are refined and sophisticated
    and would never rant or rave.  I, on the other hand, sit in front of
    the TV in torn underwear and drink beer out of the bottle.

    Yeah, I know, this FAQ is getting a just a BIT long.  I apologize to
    those who aren't able to retrieve the whole document.  I'm now
    working on reformatting and splitting it up into multiple parts.  I
    avoided this for as long as possible, since it is much more
    convenient when the entire article is only one piece, but - that's
    life :-).

    Tom Kellet's FAQ on the PIC line of microcontrollers has just been
    approved for posting to news.answers.  If you're into the PIC, then
    his FAQ is a must.  See section 8.4 for more information on his FAQ
    and others.  Good job Tom!

    If you're interested in porting GCC to the processor you're using,
    check out the Cross GCC mailing list.  See section 9.3 for details on
    how to subscribe.


    The other day I was watching my 8 year old daughter play with her
    Barbie Dolls.  She has about 7 or so, including two that used to
    belong to my wife (Roz) when she was a girl.  I noticed an
    interesting difference between the old dolls and the new dolls.  The
    old Barbies could only move their heads sideways, while the new
    Barbies not only can move their heads sideways, but also up and down.
    AMAZING - the old Barbies were good girls - they could only say no.
    The new Barbies however can also say yes.  Progress - isn't it
    wonderful!

    Dave Perry adds:  "My Daughter got a gymnast Barbie for Christmas -
    wait'll you see what *she* can do ;-)"

    Which leads me to an amazing fact.  Most everyone thinks of the PIC
    microcontroller line as being a recent introduction.  However,
    they've been around for over 20 years.  What's the difference?  The
    new chips are fabricated in CMOS, some features have been added, new
    family lines have been introduced, and the company name is Microchip
    and not General Instrument.  Microchip actually seems to care - they
    are aggressive and are providing a product that their customers want.
    Whatever the differences might be, these chips are really dynamite.

    PSST!  Hey kid!  Want a naked Barbie Doll?!


    Just a reminder to please be kind and send in your suggestions.
    Thanks.


    Take care of yourselves,

              Uncle Russ


1)  ABOUT THIS FAQ

1.1)  Who put this FAQ together?

    Me again!  This FAQ is just a way to tie up loose ends.  From time to
    time, general questions about microcontrollers (from beginners to
    experienced designers) pop up in the newsgroups.  It seemed that a
    general primer/FAQ on microcontrollers might be useful.

    Much of this document could be considered as a sort of a primer on
    microcontrollers.  For those of you with previous experience,
    sections 8 and 9 might be of special interest (especially for those
    of you looking for that elusive "free COBOL compiler for the 1802").


1.2)  How can I contribute to this list?

    I please ask that if you have any suggestions or additions, or you
    would like to correct any of the information contained herein, please
    send me a note.
         My Email address is:  sibit@datasrv.co.il
         My Smail address is:
               Russ Hersch
               HaVradim 11
               Ginot Shomron
               ISRAEL

    Thanks to the following who have contributed to this document:
            Robin L. Getz (National Semiconductor)
            Robert Boys
            Dave Dunfield (Dunfield Development Systems)
            Jeff Fox (Ultra Technology)
            Zack Lau

    Also, thanks to those who have posted questions and to those who have
    posted answers.  Thanks to "my new friends" who send suggestions and
    encouragement, as well as the occasional question.  Special thanks to
    my mother-in-law, who thankfully will probably never read this
    document ;-).

    I hope that those of you who have special knowledge on the subject of
    microcontroller use, or know of sources of information on
    microcontrollers, will share with everyone by contributing to
    document.


1.3)  What newsgroups will this FAQ be posted to?

    This FAQ will be posted to the following newsgroups:
          comp.robotics
          comp.sys.intel
          comp.sys.m68k
          comp.sys.6809
          sci.electronics
          alt.comp.hardware.homebuilt

    I will post once a month - on or about the 26th of each month.


1.4)  May I distribute this FAQ or post it somewhere else?

    I am putting no restrictions on the use of this FAQ except - It must
    be distributed in its entirety with the copyright notice, and no
    financial gain may be realized from it.  After all, I have spent, and
    continue to spend, a lot of time on this.

    For this reason I have appended a copyright statement to the end of
    this FAQ.  I feel pretty silly doing this, but I just want to protect
    myself.  The copyright does not limit the use of this list for
    noncommercial purposes.  I hereby give my permission to one and all
    to pass this list around and post it wherever you want - as long as
    it is not for financial gain.

        Thank you.


2)  MICROCONTROLLERS


2.1)  What is a Microcontroller?

    A controller is used to control (makes sense!) some process or aspect
    of the environment.  A typical microcontroller application is the
    monitoring of my house.  As the temperature rises, the controller
    causes the windows to open.  If the temperature goes above a certain
    threshold, the air conditioner is activated.  If the system detects
    my mother-in-law approaching, the doors are locked and the windows
    barred.  In addition, upon detecting that my computer is turned on,
    the stereo turns on at deafening volume (for more on this, see the
    section on development tools).

    At one time, controllers were built exclusively from logic
    components, and were usually large, heavy boxes (before this, they
    were even bigger, more complex analog circuits).  Later on,
    microprocessors were used and the entire controller could fit on a
    small circuit board.  This is still common - you can find many [good]
    controllers powered by one of the many common microprocessors
    (including Zilog Z80, Intel 8088, Motorola 6809, and others).

    As the process of miniaturization continued, all of the components
    needed for a controller were built right onto one chip.  A one chip
    computer, or microcontroller was born.  A microcontroller is a highly
    integrated chip which includes, on one chip, all or most of the parts
    needed for a controller.  The microcontroller could be called a
    "one-chip solution".  It typically includes:
          CPU (central processing unit)
          RAM (Random Access Memory)
          EPROM/PROM/ROM (Erasable Programmable Read Only Memory)
          I/O (input/output) - serial and parallel
          timers
          interrupt controller

    By only including the features specific to the task (control), cost
    is relatively low.  A typical microcontroller has bit manipulation
    instructions, easy and direct access to I/O (input/output), and quick
    and efficient interrupt processing.  Microcontrollers are a "one-chip
    solution" which drastically reduces parts count and design costs.


2.2)  Applications

    In addition to control applications such as the above home monitoring
    system, microcontrollers are frequently found in embedded
    applications.  Among the many uses that you can find one or more
    microcontrollers:  appliances (microwave oven, refrigerators,
    television and VCRs, stereos),  automobiles (engine control,
    diagnostics, climate control), environmental control (greenhouse,
    factory, home), instrumentation, aerospace, and thousands of other
    uses.

    Microcontrollers are used extensively in robotics.  In this
    application, many specific tasks might be distributed among a large
    number of microcontrollers in one system.  Communications between
    each microcontroller and a central, more powerful microcontroller (or
    microcomputer, or even large computer) would enable information to be
    processed by the central computer, or to be passed around to other
    microcrontrollers in the system.

    A special application that microcontrollers are well suited for is
    data logging.  Stick one of these chips out in the middle of a corn
    field or up in a ballon, and monitor and record environmental
    parameters (temperature, humidity, rain, etc).  Small size, low power
    consumption, and flexibility make these devices ideal for unattended
    data monitoring and recording.


2.3)  Flavors

    Microcontrollers come in many flavors and varieties.  Depending on
    the power and features that are needed, you might choose a 4 bit, 8
    bit, 16 bit, or 32 bit microcontroller.  In addition, some
    specialized versions are available which include features specific
    for communications, keyboard handling, signal processing, video
    processing, and other tasks.


3)  MICROCONTROLLER FEATURES


3.1)  Fabrication techniques

    CMOS - Complementary Metal Oxide Semiconductor

       This is the name of a common technique used to fabricate most (if
       not all) of the newer microcontrollers.  CMOS requires much less
       power than older fabrication techniques, which permits battery
       operation.  CMOS chips also can be fully or near fully static,
       which means that the clock can be slowed up (or even stopped)
       putting the chip in sleep mode.  CMOS has a much higher immunity
       to noise (power fluctuations or spikes) than the older fabrication
       techniques.


    PMP - Post Metal Programming (National Semiconductor)

       PMP is a high-energy implantation process that allows
       microcontroller ROM to be programmed AFTER final metalization.
       Usually ROM is implemented in the second layer die, with nine or
       ten other layers then added on top.  That means the ROM pattern
       must be specified early in the production process, and completed
       prototypes devices won't be available typically for six to eight
       weeks.  With PMP, however, dies can be fully manufactured through
       metalization and electrical tests (only the passivation layers
       need to be added), and held in inventory.  This means that ROM can
       be programmed late in production cycle, making prototypes
       available in only two weeks.


3.2)  Architectural features

    Von-Neuman Architecure

       Microcontrollers based on the Von-Neuman architecture have a
       single "data" bus that is used to fetch both instructions and
       data.  Program instructions and data are stored in a common main
       memory.  When such a controller addresses main memory, it first
       fetches an instruction, and then it fetches the data to support
       the instruction.  The two separate fetchs slow the controllers
       operation.


    Harvard Architecture

       Microcontrollers based on the Harvard Architecture have a separate
       data bus and an instruction bus.  This allows execution to occur
       in parallel.  As an instruction is being "pre-fetched", the
       current instruction is executing on the data bus.  Once the
       current instruction is complete, the next instruction is ready to
       go.  This pre-fetch theoretically allows for much faster execution
       than a Von-Neuman architecture, but there is some added silicon
       complexity.


    CISC

       Almost all of today's microcontrollers are based on the CISC
       (Complex Instruction Set Computer) concept.  The typical CISC
       microcontroller has well over 80 instructions, many of them very
       powerful and very specialized for specific control tasks.  It is
       quite common for the instructions to all behave quite differently.
       Some might only operate on certain address spaces or registers,
       and others might only recognize certain addressing modes.

       The advantages of the CISC architecture is that many of the
       instructions are macro-like, allowing the programmer to use one
       instruction in place of many simpler instructions.


    RISC

       The industry trend for microprocessor design is for Reduced
       Instruction Set Computers (RISC) designs.  This is beginning to
       spill over into the microntroller market.  By implementing fewer
       instructions, the chip designed is able to dedicate some of the
       precious silicon real-estate for performance enhancing features.
       The benefits of RISC design simplicity are a smaller chip, smaller
       pin count, and very low power consumption.

       Among some of the typical features of a RISC processor:
          - Harvard architecture (separate buses for instructions and
            data allows simultaneous access of program and data, and
            overlapping of some operations for increased processing
            performance
          - Instruction pipelining increases execution speed
          - Orthogonal (symmetrical) instruction set for programming
            simplicity; allows each instruction to operate on any
            register or use any addressing mode; instructions have no
            special combinations, exceptions, restrictions, or side
            effects


    SISC

       Actually, (at least in my opinion) a microcontroller by definition
       is a reduced instruction set computer - or at least a specific
       instruction set computer (SISC).  The [original] idea behind the
       microcontroller was to limit the capabilities of the chip,
       allowing a complete computer (memory, I/O, interrupts, etc) to fit
       on the available real estate.  At the expense of the more general
       purpose instructions that make the standard microprocessors (8088,
       68000, 32032) so easy to use, the instruction set was designed for
       the specific purpose of control (powerful bit manipulation, easy
       and efficient I/O, and so on).

       Microcontrollers now come with a mind boggling array of features
       that aid the control engineer - watchdog timers, sleep/wakeup
       modes, power management, powerful I/O channels, and so on.  By
       keeping the instruction set specific (and reduced), and thus
       saving valuable real estate, more and more of these features can
       be added, while maintaining the economy of the microcontroller.


3.3)  Advanced Memory options

    EEPROM - Electrically Erasable Programmable Read Only Memory

       Many microcontrollers have limited amounts of EEPROM on the chip.
       EEPROM seems more suited (becuase of its economics) for small
       amounts of memory that hold a limited number of parameters that
       may have to be changed from time to time.  This type of memory is
       relatively slow, and the number of erase/write cycles allowed in
       its lifetime is limited.


    FLASH (EPROM)

       Flash provides a good better solution than regular EEPROM when
       there is a requirement for large amounts of non-volatile program
       memory.  It is both faster and permits more erase/write cycles
       than EEPROM.


    Battery backed-up static RAM

       Battery backed-up static RAM is useful when a large non-volatile
       program and DATA space is required.  A major advantage of static
       RAM is that it is much faster than other types of non-volatile
       memory so it is well suited for high performance application.
       There also are no limits as to the number of times that it may be
       written to so it is perfect for applications that keep and
       manipulate large amounts of data locally.


    Field programming/reprogramming

       Using nonvolatile memory as a place to store program memory allows
       the device to be reprogrammed in the field without removing the
       microcontroller from the system that it controls.  One such
       application is in automotive engine controllers.  Reprogrammable
       non-volatile program memory on the engine's microcontroller allows
       the engine controller program to be modified during routine
       service to incorporate the latest features or to compensate for
       such factors as engine ageing and changing emissions control laws
       (or even to fix bugs!!).  Reprogramming of the microcontroller
       could become a standard part the routine engine tune-up.

       Almost every application could benifit from this type of program
       memory - If a modem's hardware supported it, you could remotely
       upgrade your modem from Vfast to V.34, or incorporate new features
       such as voice control or a digital answering machine.


    OTP - One Time Programmable

       An OTP is a PROM (Programmable Read-Only-Memory) device.  Once
       your program is written into the device with a standard EPROM
       programmer, it can not be erased or modified.  This is usually
       used for limited production runs before a ROM mask is done in
       order to test code.

       A OTP (One Time Programmable) part uses standard EPROM, but the
       package has no window for erasing.  Once your program is written
       into the device with a standard EPROM programmer, it cannot be
       erased or modified.  (Well, sort of - any bit that is a zero can
       be changed to a one - but a bit that is a one can not be changed
       into a zero).

       As product design cycles get shorter, it is more important for
       micro manufacturers to offer OTPs as an option.  This was commonly
       used for limited production runs before a ROM mask in order to
       test code.  However, one problem with Mask ROM is that
       programming, setup, and engineering charges make it economical
       only when the systems manufacturer purchases large quanties of
       identically programmed micros.  Then when you discover THAT bug
       (and find it and fix your code), you have quanities of *old buggy*
       micros around that you have to throw away.  Not to mention that
       lead time (the time when you submit your code to the micro
       manufacture, to the time you receive your micro with your code on
       it) can be at least 8 weeks, and as bad as 44 weeks.


    Software protection

       Either by encryption or fuse protection, the programmed software
       is protected against unauthorized snooping (reverse engineering,
       modifications, piracy, etc.).

       This is ONLY an option on OTPs and Windowed devices.  On Masked
       ROM devices, security in not needed - the only way to read your
       code out be to rip the microcontroller apart with a scanning
       electron microscope - and how many people really have one of
       those?

       Although - this is a manufacture's little know fact - when a
       silicon manufacturer makes your ROMed microcontroller - they have
       to test it in order to make sure that it is programmed properly.
       (You should see what a spec of dust does on a mask :-)  In order
       to test this, they must be able to read out the ROM and compare it
       to the code you submitted.  This mode is known as test mode.  IN
       TEST MODE YOU CAN READ OUT THE ROM OF ANY DEVICE.  Anybody who
       tells you different, does not know what they are talking about -
       or is lieing.  This is usually not a big deal because test mode is
       ***VERY*** confidential, and (usually) only known by that
       manufacturer (i.e. you cannot put a device into test mode by
       accident).  Test mode is ONLY applicaible with ROMed devices.


3.4)  Power Management and Low Voltage

    Low voltage parts

       Since automotive applications have been the driving force behind
       most microcontrollers, and 5 Volts is very easy to do in a car,
       most microcontrollers have only supported 4.5 - 5.5 V operation.
       In the recent past, as consumer goods are begining to drive major
       segments of the microcontroller market, and as consumer goods
       become portable and lightweight - the requirement for 3 volt (and
       lower) microcontrollers has become urgent (3 volts = 2 battery
       solution / lower voltage = longer battery life).  Most low voltage
       parts in the market today are simply 5 volt parts that were
       modified to operate at 3 volts (usually at a performance loss).
       Some micros being released now are designed from the ground up to
       operate properly at 3.0 (and lower) voltages, which offer
       comparable performance of the 5 volt devices.


    Brownout Protection

       Brownout protection is usually an on-board protection circuit that
       resets the device when the operating voltage (Vcc) is lower than
       the Brownout voltage.  The device is held in reset and will remain
       in reset when Vcc stays below the Brownout voltage.  The device
       will resume execution (from reset) after Vcc has risen above the
       Brown Out Voltage.


    Idle/Halt/Wakeup

       The device can be placed into IDLE/HALT mode by software control.
       In both Halt and Idle conditions the state of the microcontroller
       remains.  RAM is not cleared and any outputs are not changed.  The
       terms idle and halt often have different definitions, depending on
       the manufacturer.  What some call idle, others may call halt, and
       vice versa.  It can be confusing, so check the data sheet for the
       device in question to be sure.

       In IDLE mode, all activities are stopped except:
         - associated on-board oscillator circuitry
         - watchdog logic (if any)
         - the clock monitor
         - the idle timer (a free running timer)
       Power supply requirements on the microcontroller in this mode are
       typically around 30% of normal power requirements of the
       microprocessor.  Idle mode is exited by a reset, or some other
       stimulus (such as timer interrupt, serial port, etc.).  A special
       timer/counter (the idle timer) causes the chip to wake up at a
       regular interval to check if things are OK.  The chip then goes
       back to sleep.

       IDLE mode is extremely useful for remote, unattended data logging
       - the microprocessor wakes up at regular intervals, takes its
       measurements, logs the data, and then goes back to sleep.

       In Halt mode, all activities are stopped (including timers and
       counters).  The only way to wake up is by a reset or device
       interrupt (such as an I/O port).  The power requirements of the
       device are minimal and the applied voltage (Vcc) can sometimes be
       decreased below operating voltage without altering the state
       (RAM/Outputs) of the device.  Current consumption is typically
       less than 1 uA.

       A common application of HALT mode is in laptop keyboards.  In
       order to have maximum power saving, the controller is in halt
       until it detects a keystroke (via a device interrupt).  It then
       wakes up, decodes and sends the keystroke to the host, and then
       goes back into halt mode, waiting either for another keystroke, or
       information from the host.


    Multi-Input Wakeup (National Semiconductor)

       The Multi-Input WakeUp (MIWU) feature is used to return (wakeup)
       the microcontroller from either HALT or IDLE modes.  Alternately
       MIWU may also be used to generate up to 8 edge selectible external
       interrupts.  The user can select whether the trigger condition on
       the pins is going to be either a positive edge (low to high) or a
       negative edge (high to low).


3.5)  I/O

    UART

       A UART (Universal Asynchronous Receiver Transmitter) is a serial
       port adapter for asynchronous serial communications.


    USART

       A USART (Universal Synchronous/Asynchronous Receiver Transmitter)
       is a serial port adapter for either asynchronous or synchronous
       serial communications.  Communications using a USART are typically
       much faster (as much as 16 times) than with a UART.


    Synchronous serial port

       A synchronous serial port doesn't require start/stop bits and can
       operate at much higher clock rates than an asynchronous serial
       port.  Used to communicate with high speed devices such as memory
       servers, display drivers, additional A/D ports, etc.  Can also be
       used to implement a simple microcontroller network.


    SPI (Motorola)

       An SPI (serial peripheral interface) is a synchronous serial port.


    SCI

       An SCI (serial communications interface) is an enhanced UART
       (asynchronous serial port).


    I2C bus - Inter-Integrated Circuit bus (Philips)

       The I2C bus is a simple 2 wire serial interface developed by
       Philips.  It was developed for 8 bit applications and is widely
       used in consumer electronics, automotive and industrial
       applications.  In addition to microcontrollers, several
       peripherals also exist that support the I2C bus.

       The I2C bus is a two line, multi-master, multi-slave network
       interface with collision detection.  Up to 128 devices can exist
       on the network and they can be spread out over 10 meters.  Each
       node (microcontroller or peripheral) may initiate a message, and
       then transmit or receive data.  The two lines of the network
       consist of the serial data line and the serial clock line.  Each
       node on the network has a unique address which accompanies any
       message passed between nodes.  Since only 2 wires are needed, it
       is easy to interconnect a number of devices.


    MICROWIRE/PLUS (National Semiconductor)

       MICROWIRE/PLUS is a serial synchronous bi-directional
       communications interface.  This is used on National Semiconductor
       Corporation's devices (microcontrollers, A/D converters, display
       drivers, EEPROMS, etc.).


    CAN & J1850

       CAN (Controller Area Network) is a mutiplexed wiring scheme that
       was developed jointly by Bosh and Intel for wiring in automobiles.
       J1850 is the SAE (Society of Automotive Engineers) multiplexed
       automotive wiring standard that is currently in use in North
       America.

       Both of these groups have the "NOT INVENTED HERE" syndrome and
       refuse to work with each other's standard. The standards are quite
       different and are not compatible at all.

       The CAN specification seems to be the one that is being used in
       industrial control both in North American and Europe.  With lower
       cost microcontrollers that support CAN, CAN has a good potential
       to take off.


    Analog to Digital Conversion (A/D)

       Converts an external analog signal (typically relative to voltage)
       and converts it to a digital representation.  Microcontrollers
       that have this feature can be used for instrumention,
       environmental data logging, or any application that lives in an
       analog world.

       The various types of A/D converters that can be found:

       Succesive Approximation A/D converters -- This the most common
       type of A/D and is used in the majority of microcontrollers.  In
       this technique, the converter figures out each bit at a time (most
       significant first) and finds if the next step is higher or lower.
       This way has some benefits - it takes exactly the same amount of
       time for any conversion - it is very common - (and therefore very
       cheap).  However it also has some disadvantages - it is slow - for
       every bit it takes at least one clock cycle - the best an 8-bit
       A/D can do is at least 8 clock cycles (and a couple for
       housekeeping).  Because it takes so long - it is a power hog as
       compared to the other types of A/Ds.

       Single Slope A/D converters -- This is the type of converter that
       you can build yourself (if the microcontroller has a couple of
       analog blocks on it).  Your single slope A/D converter would
       include Analog Mux / comparator / timer (8-bit timer = 8 bit A/D -
       16-bit timer = 16 bit A/D) with input capture and a constant
       current source.  The only microcontroller (that I know of) that
       has all of this on it is National's COP888EK.

       First Step is to clear the timer to 0000 and then start it.  It is
       a simple matter to hang an external capacitor, and charge it with
       the constant current source (linearly becuase of the current
       source) when the voltage on the cap exceeds the sampling voltage,
       the comparitor toggles, stops the timer - and voila - you have the
       voltage in uSecs - with 16-bit accuracy.  The only drawback is you
       can't really expect 16 bits (14 yes) - the conversion time varies
       quite a bit, and it is SLOW.

       Delta-Sigma A/Ds converters -- This type of A/D converter is found
       on higher-end DSPs.  These are the hardest to understand of the
       A/Ds because it just makes a best guess (a little National
       Semiconductor humor here :-).  Delta sigma A/Ds can be broken down
       into two main parts.

       The modulator which does the A/D conversion and the filter, which
       turns the output of the modulator into a format suitible for the
       microcontroller (or DSP).

       The modulator is very simple - it just compares the input voltage
       to the average of the last 100 (or so) modulator outputs and
       decides if the input is higher or lower than the average. This
       happens millions of times a second, resulting in a high speed
       single-bit datastream of 1s and 0s who's *average* is equal to the
       input voltage. Becuse the ouput is only a one or a zero, there are
       very few sources of errors. This is the main reason that
       delta-sigma A/Ds are **very** accurate.

       The filter comes after the modulator ... and this filter is
       essentially a big DSP block.  It must take the very high speed
       stream of ones and zeros and turn it into a slower speed stream of
       16-bit (or greater) words to be used by the microcontroller.  This
       process is called decimation and the filter is often called a
       "comb filter".  Another digital filter follows this stage and
       rejects unwanted frequencies.  This filter performs a similar
       function to the anti-aliasing filter required in many traditional
       A/D appliactions, but it does it at an unprecedented level of
       performance and at low cost.  This is the other major benefit of
       delta-sigma A/Ds.

       Flash A/D -- This is the basic architecure for the fastest
       category of A/Ds.  The flash converter involves looking at each
       level that is possible and instantaneously saying what level the
       voltage is at.  This is done by setting up comparators as
       threshold detectors with each detector being set up for a voltage
       exaclty 1 LSB higher than the detector below it.  The benefit of
       this architecture is that with a single clock cycle, you can tell
       exactly what the input voltage is - that is why it is so fast.
       The disadvantage is that to achieve 8-bit accuracy you need 256
       comparators and to achieve 10-bit accuracy you need 1024
       comparators. To make these comparators operate at higher speeds,
       they have to draw LOTS of current, and beyond the 10-bit number
       comparators required becomes totally unmanageable.


    D/A (Digital to Analog) Converters

       This feature takes a Digital number and converts it to a analog
       output. The number 50 would be changed to the analog output of
       (50/256 * 5Volts) = .9765625V on a 8-bit / 5 Volt system.


    Pulse width modulator

       Often used as a digital-to-analog conversion technique.  A pulse
       train is generated and regulated with a low-pass filter to
       generate a voltage proportional to the duty cycle.


    Pulse accumulator

       A pulse accumulator is an event counter.  Each pulse increments
       the pulse accumulator register, recording the number of times this
       event has occured.


    Input Capture

       Input Capture can precisely measure external frequencies or time
       intervals by copying the value from a free running timer into a
       register when an external event occurs.


    Comparator

       One or more standard comparators can sometimes be placed on a
       microcontroller die.  These comparators operate much like standard
       comparators however the input and output signals are available on
       the microcontroller bus.


3.6)  Special microcontroller features


    Polling

       Polling is a software technique whereby the controller continually
       asks a peripheral if it needs servicing.  The peripheral sets a
       flag when it has data ready for transferring to the controller,
       which the controller notices on its next poll.  Several such
       peripherals can be polled in succession, with the controller
       jumping to different software routines, depending on which flags
       have been set.  Polling is not really a "feature" - but it's what
       you have to do if your microcontroller of choice does not have
       real interrupts.


    Interrupts

       Rather than have the microcontroller continually asking
       peripherals (timers / UARTS / A/Ds / external components) whether
       they have any data available (and finding most of the time they do
       not), a more efficient method is to have the peripherals tell the
       controller when they have data ready.  The controller can be
       carrying out its normal function, only responding to peripherals
       when there is data to respond to.  On receipt of an interrupt, the
       controller suspends its current operation, identifies the
       interrupting peripheral, then jumps (vectors) to the appropriate
       interrupt service routine.

       The advantage of interrupts, compared with polling, is the speed
       of response to external events and reduced software overhead (of
       continually asking peripherals if they have any data ready).

       Most microcontrollers have at least one external interrupt, which
       can be edge selectible (rising or falling) or level triggered.
       Both systems (edge/level) have advantages.  Edge - is not time
       sensitive, but it is susceptible to gitches.  Level - must be held
       high (or low) for a specific duration (which can be a pain - but
       is not susceptible to glitches).


    Watchdog timer

       A watchdog timer provides a means of graceful recovery from a
       system problem.  This could be a program that goes into an endless
       loop, or a hardware problem that prevents the program from
       operating correctly.  If the program fails to reset the watchdog
       at some predetermined interval, a hardware reset will be
       initiated.  The bug may still exist, but at least the system has a
       way to recover.  This is especially useful for unattended systems.


    Digital Signal Processors (DSP)

       Microcontrollers react to and control events - DSPs execute
       repetitive math-intensive algorithms.  Today many embedded
       applications require both types of processors, and semiconductor
       manufacturers have responded by introducing microcontrollers with
       on-chip DSP capability and DSPs with on-chip microcontrollers.

       The most basic thing a DSP will do is a MACC (Multiply and
       ACCumulate).  The number of data bits a DSP can Multiply and
       ACCumulate will determine the dynamic range (and therefore the
       application).

        Bits Fixed/Floating  Dynamic Range   Typical Application

          8     Fixed           48 dB         Telephone-quality voice
         16     Fixed           96 dB         Compact disk (marginal)
         24     Fixed          144 dB         Compact disk
                                                  (room for error)


    Clock Monitor

       A clock monitor can shut the microcontroller down (by holding the
       microcontroller in reset) if the input clock is too slow.  This
       can usually be turned on or off under software control.


    Resident program loader

       Loads a program by Initializing program/data memory from either a
       serial or parallel port.  Convenient for prototyping or trying out
       new features, eliminates the erase/burn/program cycle typical with
       EPROMs, and allows convenient updating of a system even from an
       offsite location.


    Monitor

       A monitor is a program installed in the microcontroller which
       provides basic development and debug capabilities.  Typical
       capabilities of a microcontroller monitor include:  loading object
       files into system RAM, executing programs, examining and modifying
       memory and registers, code disassembly, setting breakpoints, and
       single-stepping through code.  Some simple monitors only allow
       basic functions such as memory inspection, and the more
       sophisticated monitors are capable of a full range of debug
       functions.

       Monitors can either communicate with a dumb terminal or with a
       host computer such as a PC.  Much of the work of the monitor (such
       as user interface) can be offloaded to the host PC running a
       program designed to work with the monitor.  This makes it possible
       to reduce the size and complexity of the code that must be
       installed in the target system.


    MIL transducer

       An MIL transducer is a sophisticated and expensive device that
       detects the presence of your mother-in-law.  Sensitivity settings
       are possible for a full range of stimuli such as:  snarling,
       stomping, nasty faces, and others.  Techno-Wimp (address withheld
       upon request), the sole manufacturer of the MIL transducer, has
       recently announced a major new version which is sensitive enough
       to detect less-tangible stimuli.  This breakthrough product is
       dubbed the MIL-WOMF ("Whoa, outta my face!") transducer.  Both the
       original MIL and the new MIL-WOMF transducers are programmable and
       easy to interface to most microcontrollers.


4)  Some popular microcontrollers

    Some common microcontrollers are described below.  A common question
    is "what microcontroller should I use for...?"  Well, that's a tough
    one.  The best advice would be to choose a chip that has a full set
    of development tools at the price you can afford, and good
    documentation.  For the hobbyist, the Intel 8051, Motorola 68hc11, or
    Microchip PIC would all make suitable choices.


    8048 (Intel)

       The grandaddy of 'em all, the first microcontroller, it all
       started here!  Although a bit long in the tooth and a bit kludgey
       in design (at least by today's standards), it is still very
       popular due to its very low cost, availability, and wide range of
       development tools.

       Split memory architecture with program ROM on chip with an
       additional 64 to 256 bytes also on chip.  I/O is mapped in its own
       space.


    8051 (Intel and others)

       The 8051, Intel's second generation of microcontrollers, rules the
       microcontroller market at the present time.  Although featuring a
       somewhat bizarre design, it is a very powerful and easy to program
       chip (once you get used to it).

       Split memory architecture with separate address spaces for program
       memory and data memory.  The program memory can be up to 64K.  The
       lower portion (4K or 8K depending on type) may reside on chip.
       The 8051 can address up to 64K of external data memory, and is
       accessed only by indirect addressing.  The 8051 has 128 bytes (256
       bytes for the 8052) of on-chip RAM, plus a number of special
       function registers (SFRs).  I/O is mapped in its own space.

       The 8051 features the so-called "boolean processor".  This refers
       to the way instructions can single out bits just about anywhere
       (RAM, accumulators, I/O registers, etc.), perform complex bit
       tests and comparisons, and then execute relative jumps based on
       the results.

       Piles of software, both commercial and free, are available for the
       8051 line.  Many manufacturers supply what must be a hundred
       different variants of this chip for any requirement.  Often
       featured in construction projects in the popular hobbyist
       magazines.


    80c196 (MCS-96)

       The third generation of Intel microprocessors, the 8096 is a 16
       bit processor.  Among the many features it includes are: hardware
       multiply and divide, 6 addressing modes, high speed I/O, A/D,
       serial communications channel, up to 40 I/O ports, 8 source
       priority interrupt controller, PWM generator, and watchdog timer.


    80186,80188 (Intel)

       These chips are, in essence, microcontroller versions of the 8086
       and 8088 (of IBM/PC fame).  Included on the chip are: 2 channels
       of DMA, 2 counter/timers, programmable interrupt controller, and
       dynamic RAM refresh.  There are several variations including:  low
       power versions, variations with serial ports, and so on.

       One major advantage you gain by using one of these
       microcontrollers is that you can use standard PC development tools
       (compilers, assemblers, etc) for developing you applications.  If
       you are already familiar with PC software development, the
       learning curve will be short, since these chips have the same
       basic architecture as the original 8088 (as used in the IBM/PC).

       Other advantages include high speed processing, a full megabyte
       addressing space, and powerful interrupt processing.


    80386 EX (Intel)

       The 80386 EX is of course a 386 in microcontroller clothing.
       Included on the chip are: serial I/O, power management, DMA,
       counter/timers, programmable interrupt controller, and dynamic RAM
       refresh.  And of course, all of the power of the 386
       microprocessor.

       One major advantage you gain by using one of these
       microcontrollers is that you can use standard PC development tools
       (compilers, assemblers, etc) for developing you applications.  If
       you are already familiar with PC software development, the
       learning curve will be short, since these chips have the same
       basic architecture as the original 8088 (as used in the IBM/PC).

       We're talking power here gang.


    6805 (Motorola)

       The 6805 is based loosely on the manufacturer's earlier 6800, with
       some similarities to the 6502.  It has a common memory
       architecture in which instructions, data, I/O, and timers all
       share the same space.  Stack pointer is 5 bits wide which limits
       the stack to 32 bytes deep.  Some members of this family include
       on chip A/D, PLL frequency synthesizer, serial I/O, and software
       security.


    68hc11 (Motorola and others)

       The popular 68hc11 is a powerful 8-bit data, 16-bit address
       microcontroller from Motorola (the sole supplier) with an
       instruction set that is similar to the older 68xx parts (6801,
       6805, 6809).  The 68hc11 has a common memory architecture in which
       instructions, data, I/O, and timers all share the same memory
       space.

       Depending on the variety, the 68hc11 has built-in EEPROM/OTPROM,
       RAM, digital I/O, timers, A/D converter, PWM generator, pulse
       accumulator, and synchronous and ansynchronous communications
       channels.  Typical current draw is less than 20ma.


    683xx (Motorola)

       The MC68EC300 series incorporates various peripherals into various
       68k family core processors.  These can be called "integrated
       processors".  They are really super-microcontrollers, very high
       performance, capable of high processing speeds, and able to
       address large amounts of memory.  A typical example from this line
       would be the 68331.  It is based on a 68020-like core and has
       about the same processing power as an Intel 80386.


    PIC (MicroChip)

       The PIC line of microcontrollers has been popular for over 20
       years.  Microchip (which was originally [owned by] General
       Instruments), seems to have recreated this microcontroller into a
       product universally regarded as a powerful and cost effective
       solution.  The PIC microcontrollers were the first RISC
       microcontrollers, and maybe still the only ones.

       RISC generally implies that simplicity of design allows more
       features to be added at lower cost, and the PIC line is no
       exception.  Although having few instructions (eg. 33 instructions
       for the 16C5X line versus over 90 for the Intel 8048), the PIC
       line has a wealth of features included as part of the chip.
       Separate buses for instructions and data (Harvard architecture)
       allows simultaneous access of program and data, and overlapping of
       some operations for increased processing performance.  The
       benefits of design simplicity are a very small chip, small pin
       count, and very low power consumption.

       PIC microcontrollers are rapidly gaining in popularity.  They are
       being featured more and more often in construction projects in
       popular hobbyist magazines, and are chalking up a good number of
       design wins.  Due to their low cost, small size, and low power
       consumption, these microcontrollers can now be used in areas that
       previously wouldn't have been appropriate (such as logic
       circuits).  They are currently available in three lines:  the
       PIC16C5x, PIC16Cxx, and PIC17Cxx families.


    COP400 Family (National Semiconductor)

       The COP400 Family is a P2CMOS 4-bit microcontroller which offers
       512 bytes to 2K ROM and 32x4 to 160x4 RAM.  Packages are varied
       from  20 to 28 pin (DIP/SO/PLCC).  Functions include Microwire,
       timers counters, 2.3 to 6.0 Volt operation, ROMless modes, and OTP
       support.

       Far from being "old" technology - 4-bit microcontrollers are
       meeting significant market needs in more applications than ever
       before.  The reason for the continuing strength of the COP400
       family is its versatility.  Over 60 different, compatible devices
       are available for a wide range of requirements.  The first under
       $.50 microcontroller set a new standard of value for
       cost/performance.


    COP800 Family (National Semiconductor)

       The COP800 Basic Family is a fully static 8-bit microcontroller,
       fabricated using double metal silicon gate microCMOS technology.
       This low cost microcontroller contains all system timing,
       interrupt logic, ROM, RAM, and I/O necessary to implement
       dedicated control functions in a variety of applications.

       Depending on the device, features include:  8-bit memory mapped
       architect, MICROWIRE serial I/O, UART, memory mapped I/O, many 16
       bit timer/counters with capture registers, a multi-sourced
       vectored interrupt, comparator, WATCHDOG Timer and Clock monitor,
       Modulator/Timer (high speed PWM timer for IR transmission),
       8-channel A/D converter with prescaler and both differential and
       single-ended modes, brownout protection, halt mode, idle mode,
       high current I/O pins with 15mA sink capability, Schmitt trigger
       inputs and Multi-Input-Wake-Up.  Most devices operate over a
       voltage range from 2.5V to 6V.

       High throughput is achieved with an efficient, powerful
       instruction set operating at a 1uS per instruction rate (most
       instructions are single byte/single cycle) including true bit
       manipulation and BCD arithmetic instructions.  Most devices have
       military versions for -55C to +125C.


    HPC Family (National Semiconductor)

       The HPC Family of High Performance microControllers is a 16-bit
       controller fabricated using National's advanced microCMOS
       technology.  This process combined with an advanced architecture
       provides fast, flexible I/O control, efficient data manipulation,
       and high speed computation.

       With its 16x16 bit multiply and 32x16 bit divide, the HPC is
       appropriate for compute-intensive environments that used to be the
       sole domain of the microprocessor.  The architecture is a
       VonNeumann architecture where the program and data memory share
       the same address space.

       Depending on the family member, features include: 16-bit
       memory-mapped architecture with software configurable external
       address/data bus, Microwire/Plus serial I/O, UART, 16-bit
       timer/counters with input capture capability, High-Level Data Link
       Control (HDLC) for ISO-standard data communications, 8-channel A/D
       converter with prescaler and both differential and single-ended
       modes, power-saving modes, Multiply/Accumulate Unit with built-in
       circular buffer management for low to medium DSP applications,
       software configurable chip-select outputs, 64KB address space
       directly addressable, low-voltage (3.3V) operation.

       High throughput is achieved with an efficient, powerful
       instruction set operating at a 50ns per instruction cycle (most
       instructions are single byte/single cycle) including true bit
       manipulation.  Key applications currently using the HPC family
       include: Anti-lock Braking Systems, Hard Disk drives for mass
       storage, telecommunications, security systems, laser printers, and
       some military applications.


    Project Piranha (National Semiconductor)

       Project Piranha is an internal code name for National
       Semiconductor's embedded RISC processor technology. The Piranha
       technology represents the first RISC processor specifically
       designed for the needs of embedded applications.  This was
       accomplished through examination of the needs of typical embedded
       applications, resulting in a technology which maintains the
       benefits of CISC while providing the performance of RISC.

       Specifically, some of these benefits are:
         compact code density     -->  smaller memory usage/
                                          lower system cost
         small core size          -->  more room for addon system design
         scalable architecture    -->  a range of performance solutions
       from 8 to 64 bits             with a common architecture
         common instruction set   -->  you only face the learning curve
            and development tools         once
         modular design           -->  designed for easy integration of
                                          specialized functions into
                                          single chip

       This technology is initially being implemented in application
       specific products from National Semiconductor, with the first
       product being available in Q1, 1995.  For further information on
       this technology, please contact Mark Throndson at
       tmetsc@esd.nsc.com, or (408) 721-4957.


    Z8 (Zilog)

       A "loose" derivative of the Zilog Z80, the Z8 is actually a
       composite of several different achitectures.  Not really
       compatible with the Z80 peripherals.  Has a unique architecture
       with three memory spaces:  program memory, data memory, and a CPU
       register file.  On-chip features include UART, timers, DMA, up to
       40 I/O lines.  Some versions include a synchronous/asynchronous
       serial channel.  Features fast interrupt response with 37
       interrupt sources.  The Z8671 has Tiny Basic in ROM.  The Super-8
       is just that, a super version of the Z8 with more of everything.


    HD64180 (Hitachi)

       A powerful microcontroller with full Z80 functionality plus:
       extended memory management, two DMA channels, synchronous and
       asynchronous communications channels, timers, and interrupt
       controller.  Some versions of this chip also include EPROM, RAM,
       and PIO (programmable input/output).  It runs Z80 code in fewer
       clock cycles than the Z80 and adds in hardware multiply and a few
       other instructions.  Available in versions that run up to 18MHz.


    TMS370 (Texas Instruments)

       It is similar to the 8051 in having 256 registers,  A and B
       accumulators, stack in this register page, etc.  It also has a
       host of onboard support devices, some members have all of them
       while others have a subset, the peripherals include:  RAM, ROM
       (mask, OTP, or EEPROM), 2 timers (configurable as timers/
       counters/comparators/PWM output), watchdog timer, SCI (syncronous
       serial port), SPI (asynchronous serial port), A/D (8 bit, 8
       channel), interupts.

       Instruction set is mostly 8 bit with some 16 bit support.  Has
       several addressing modes, 8x8 multiply, 16/8 divide.  Clock speeds
       are up to 20MHz which gives 5MHz for buss access and instruction
       cycles.  Pins mostly TTL compatible (except clock and reset).

       Packages include:
             28,40 DIP
             28 CLCC
             28,44,68 PLCC
             40,64 SDIP

       A developers/proto board is available.  It is a multi layer PCB
       about 12"x7" with RS-232 serial I/O, and monitor as well as access
       to all processor pins on a patch and proto area.  Support software
       includes IBM-PC monitor & loader, cross assembler (absolute only).
       A pure serial TTY monitor is also supported.  Sole power
       requirement is +5v.  Priced is about $500 or so.

       A relocating assembler and linker, and a C compiler are also
       available.


    1802 (RCA)

       This is a real old-timer.  The 1802 is the successor to the 1801
       (2 chip set) which was the first microprocessor implemented in
       CMOS.  Both products were called microprocessors by RCA, not
       microcontrollers.  However, since the 1801 was implemented in CMOS
       and therefore had low power requirements, it was often used in
       microcontroller applications.  The 1802, with its higher level of
       integration and ease of use, could actually be considered a true
       microcontroller.  The 1802 is radiation hard and used in a lot of
       deep space and satellite applications.

       The 1802 has a fairly clean instruction set, a bunch of
       general-purpose registers (more like a Z80 than an 8051 in that
       regard), and separate data and I/O address spaces.


    MuP21

       With the MuP21 Forth can compile into machine code and still be
       Forth, because the machine code is Forth.  The MuP21 freaks out at
       100 MIPS while consuming only 50 milliwatts.  Not only that, the
       chip includes a video generator, has only about 7000 transistors,
       and costs about $20.


5)  GETTING STARTED WITH MICROCONTROLLERS

    In order to get started with microcontrollers, several factors need
    to be considered:
          - cost
          - convenience
          - availability of development
          - use

    Many manufacturers offer assembled evaluation kits or boards which
    usually allow you to use a PC as a host development system.  Among
    some of the more popular evaluations kits/boards are:

    The Basic Stamp from Parallax, Inc.
       This is a small single-board controller that runs BASIC, and costs
       only $39.  A SIP version for only $29 is also available.  THE 256
       byte EEPROM can hold a program of up to about 100 instructions.
       The BASIC Stamp Programming Package is a complete development
       package for only $99.
          Parallax, Inc., 3805 Atherton Rd. 102, Rocklin, CA  95765
          (916)624-8333    Fax: (916)624-8003   BBS: (916)624-7101

    Motorola EVBU, EVB, EVM, EVS
       A series of very popular evaluation/development systems.  Comes
       complete with the BUFFALO monitor and varying types of development
       software.  Commonly used in universities.

    Dallas Semiconductor DS5000TK
       The DS5000TK allows evaluation of any DS5000 series device in any
       existing application without circuit changes.  The included
       DS5000T plugs into the supplied serial interface pod which
       provides a connection to a host PC.  A target cable connects the
       pod to the target system.


    In addition, several chips provide a similar capability if you are
    willing to spend a bit of time wiring up a circuit.  A few chips
    worth looking at are:

    MC68HC11A8P1 contains Motorola's BUFFALO monitor.  This on-chip
    monitor has the same functionality as the one on Motorola's
    evaluation boards.  A working system can be built with this chip and
    a Maxim MAX-232.  You can talk to it with a PC or Mac over a 3-wire
    RS232 connection.  It is easy to load and run anything you want in
    the on-board RAM and EEPROM.  You can even use subprograms in the
    BUFFALO monitor after getting a listing from Motorola's BBS or ftp
    site.  This BBS also has freeware assemblers to make a complete
    development environment cheaply and quickly.

    8052AH-BASIC chip is another easy way to get started.  You can
    download high level code from your host.  The disadvantages are that
    you can't get away from a multi-chip solution, the code is noticeably
    slow, you have to buy an MCS BASIC manual, you are detached from the
    inner workings, there aren't many on-chip goodies like A/D, and you
    can forget about running off of a battery.

    DS5000(T) or DS2250(T) from Dallas Semiconductor is well suited even
    for electronics ignoramuses (ignorami?) such as myself.  All you need
    to add is a crystal and two capacitors to end up with a working
    system.  These chips comes complete with non-volatile RAM in the form
    of static RAM (at least 8K) backed up with a lithium battery.
    Everything is saved - program, data, and bugs ;-).  A development kit
    (DS5000TK) is also available.  Although a bit pricey, it makes life
    really easy.


6)  MICROCONTROLLER PROGRAMMING LANGUAGES

    Just a bit of an introduction for the beginner.

6.1)  Machine/Assembly language

    Machine language is the program representation as the microcontroller
    understands it.  It is not easy for humans to read and is a common
    cause of migraine headaches.  Assembly language is a human-readable
    form of machine language which makes it much easier for us flesh and
    bone types to deal with.  Each assembly language statement
    corresponds to one machine language statement (not counting macros).

    An assembly/machine language program is fast and small.  This is
    because you are in complete charge of what goes into the program.  Of
    course, if you write a slow, large, stupid program, then it will run
    slowly, be too big, and be stupid.  Assembly language (assembler)
    can't correct stupidity - although sometimes I wish it could ;-).

    If you are starting out learning about microcontrollers, it would be
    worth your while first learning assembler.  By programming in
    assembler, you master the underlying architecture of the chip, which
    is important if you intend to do anything significant with your
    microcontroller.


6.2)  Interpreters

    An interpreter is a high level language that is closer to natural
    language.  The interpreter itself is a program that sits resident in
    the microcontroller.  It executes a program by reading each language
    statement one at a time and then doing what the statement says to do.
    The two most popular interpreters for microcontrollers are BASIC and
    FORTH.

    BASIC's popularity is due to its simplicity, readability, and of
    course just about everyone has at least played with BASIC at one time
    or another.  One common compaint about [interpreted] BASIC is that it
    is slow.  Often this can be solved by using a different technique for
    performing the desired task.  Other times it is just the price paid
    for using an interpreter.

    FORTH has a very loyal following due to its speed (approaching that
    of assembler language) and its incremental approach to building a
    system from reusable parts.  Many FORTH systems come with a host
    system which turns your desktop computer into a development system.
    FORTH can be quite difficult to write in (if you have no experience
    with it) and is probably even harder to read.  However, it is a very
    useful and productive language for control systems and robotics, and
    can be mastered in time.

    The nicest thing about developing a system with an interpreter is
    that you can build your program interactively.  You first write a
    small piece of code and then you can try it out immediately to see
    how it works.  When the results are satisfactory, you can then add
    additional components until the final product is achieved.


6.3)  Compilers

    A compiler is a high level language that combines the programming
    ease of an interpreter with greater speed.  This is accomplished by
    translating the program (on a host machine such as a desktop PC)
    directly into machine language.  The machine language program is then
    burned onto an EPROM or downloaded directly to the microcontroller.
    The microcontroller then executes the translated program directly,
    without having to interpret first.

    The most popular microcontroller compilers are C and BASIC.  PL/M,
    from Intel, also has some popular support due to that company's
    extensive use of that language.

    Due to both its popularity and its slow speed, it was only logical
    that BASIC would appear as a compiled language.  A few companies
    supply a BASIC compiler for several of the more popular
    microcontrollers.  Execution speed is drastically increased over
    interpreted BASIC since the microcontroller is freed from the task of
    interpreting the statements as the program runs.

    While interpreted Forth approaches (and sometimes surpasses) the
    speed of many compilers, interpreted Forth screams along.  Today
    there are many high performance optimizing native code Forth
    compilers, and there are also lots of very cheap or free public
    domain Forths.  Some of them like Tom Almy's ForthCMP produces
    optimized native code with less overhead and better performance than
    just about anything else out there.  Of course it still has
    compactness and more elegant factoring of functionality than in most
    languages.

    C is now the language of choice for the entire universe.  C is used
    on computers from the tiny microcontroller up to the largest Cray
    supercomputer.  Although a C program can be a bit tedious at times to
    read (due to the terse programming style followed by many C
    programmers), it is a powerful and flexible development tool.
    Although a high level language, it also gives the developer access to
    the underlying machine.  There are several very good and cheap C
    compilers available for the more popular microcontrollers.  It is
    widely used, available, supported, and produces fairly efficient code
    (fast and compact).


6.4)  Fuzzy Logic and Neural Networks

    Fuzzy Logic and neural networks are two design methods that are
    coming favor in embedded systems.  The two methods are very different
    from each other, from conception to implementation.  However, the
    advantages and disadvantages of the two can complement each other.

    The advantage of neural netowrks is that it is possible to design
    them without completely understanding the underlying logical rules by
    which they operate.  The neural network designer applies a set of
    inputs to the network and "trains" it to produce the required output.
    The inputs must represent the behavior of the system that is being
    programmed, and the outputs should match the desired result within
    some margin of error.  If the network's output does not agree with
    the desired result, the structure of the neural network is altered
    until it does.  After training it is assumed that the network will
    also produce the desired output, or something close to it, when it is
    presented with new and unknown data.

    In contrast, a fuzzy-logic system can be precisely described.  Before
    a fuzzy control system is designed, its desired logical operation
    must be analyzed and translated into fuzzy-logic rules.  This is the
    step where neural networks technology can be helpful to the
    fuzzy-logic designer.  The designer can first train a software neural
    network to produce the desired output from a given set of inputs and
    outputs and then use a software tool to extract the underlying rules
    from the neural network.  The extracted rules are translated into
    fuzzy-logic rules.

    Fuzzy logic is not a complete design solution.  It supplements rather
    than replaces traditional event control and PID (proportional,
    integral, and derivate) control techniques.  Fuzzy logic relies on
    probability and artifical intelligence techniques.  It works best
    when it is applied to non-linear systems with many inputs that cannot
    be easily expressed in either mathematical equations used for PID
    control or IF-THEN statements used for event control.

    In an effort to change fuzzy logic from a "buzzword" (as it is in
    most parts of the world) to a well established design method (as it
    is in Japan), most manufacturers of microcontrollers have introduced
    fuzzy logic software.  Most software generates code for specific
    microcontrollers, while other generates C code which can be compiled
    for any microcontroller.


7)  DEVELOPMENT TOOLS

    Having a programming language is usually not enough to develop a
    program for a microcontroller.  Some way of debugging your program is
    needed.  I am only too painfully aware of this fact.


7.1)  Simulators

    A simulator runs your microcontroller program on a host machine (such
    as your PC).  You can step through the code to see exactly what is
    happening as the program runs.  Contents of registers or variables
    can be altered to change the way the program runs.  Eliminates (or at
    least delays) the erase/burn/program EPROM cycle common in
    microcontroller program development.  You can work out ideas or learn
    about microcontrollers by experimenting with small code fragments and
    watching on the screen what happens.  A simulator can't support real
    interrupts or devices, and usually runs much slower than the real
    device the program is intended for.

    Some manufactures have a cross between a software simulator and the
    hardware emulator - a hardware simulator.  This is a piece of
    equipment that plugs into your target, and the pins will toggle and
    react like they should - just MUCH slower.  Cost of a device like
    this can run around $120.


7.2)  Resident Debuggers

    A resident debugger runs your program on the microcontroller itself,
    while showing the progress on your host machine (such as a PC).  Has
    many of the same advantages as simulator above, with the additional
    benefit of seeing how the program runs on the real target machine.  A
    resident debugger needs to "steal" some resources from the target
    machine, including: a communications port to communicate with the
    host, an interrupt to handle single stepping, and a certain amount of
    memory for the resident part (on the target) of the debugger.


7.3)  Emulators

    If you've got the money, this is the equipment you want to develop
    your system with (yeah, that's right, a preposition at the end of a
    sentence!).  A [usually] expensive piece of hardware that even for
    the cheaper versions will run you at least $700.  An emulator is a
    sophisticated device that pretends that it is the microprocessor
    itself, while at the same time capturing information.  It provides
    full and total control over your target, while at the same time not
    requiring any resources from the target.  The emulator can either be
    a stand alone device with its own display, or it can be interface to
    a PC.

7.4)  Good Stereo System

    This is the most important tool for the microcontroller developer, or
    for any computer system developer for that matter.  Don't expect to
    get anywhere unless you have the proper music playing in the
    background(?) at the proper volume.  I find that I do my best work
    with the Rolling Stones (especially Goats Head Soup) or Clapton
    (especially early stuff like Cream - Disraeli Gears is a killer
    album!).  The volume must be set to cause excrutiating pain to be
    most effective.  Trust me on this ;-).


8)  FINDING OUT MORE ABOUT MICROCONTROLLERS

    If you are interested in learning more about microcontrollers, there
    are many fine sources of information.  You have your choice of
    printed media (books, periodicals, informative graffiti) or
    interactive (right here on the Internet, or BBSs).


8.1)  Books

    8-bit Microcontroller Instruction Set Performance
        - Digitial Systems Consulting / June 1994
        - compares Motorola's M68HC05, Intel's 80x51,
            Microchip's PIC16C5x, and National's COP8
        - lit number 630008
        - (800)272-9959 call this number for copies

    The 16 bit 8096:  Programming, Interfacing, Applications
        - Ron Katz and Howard Boyet
        - Microprocessor Training Inc
          14 East 8th Street, New York, NY  10003
          212-473-4947
        - Library of Congress Catalog card number:  85-61954
        - According to William Chernoff:  "The book is pretty good -
          mostly software examples.  The one hardware thing I looked
          closely at was wrong - a schematic error.  Oh well."

    The 68hc11 Microcontroller
        - Joseph D. Greenfield (at R.I.T.)
        - Saunders College Publishing, (Harcourt Brace Jovanovich)
        - 1992
        - ISBN 0-03-051588-2
        - A number of the sections make use of the Buffalo monitor.
          This could be useful if you are using the Motorola Trainer EVB.

    The 8051 Family of Microcontrollers
        -Richard H. Barnett
        -Prentice-Hall, 1995 (yeah, that's right, 1995!)
        -ISBN 0-02-306281-9

    8051 Interfacing and Applications
        - Applied Logic Engineering
          13008 93rd Place North, Maple Grove, MN  55369
        - (612)494-3704

    The 8051 Microcontroller
        - I. Scott MacKenzie
        - Macmillan Publishing Company, 1992
        - includes schematics for a single-board computer,
          assembly-language source code for a monitor program, and
          interfaces to a keypad, LEDs, and loudspeaker.

    The 8051 Microcontroller
        - James W. Stewart
        - Regents/Prentice-Hall, 1993
        - $27.50, 273 pages
        - includes many interfacing examples (switches, solenoids,
          relays, shaft encoders, displays, motors, and A/D converters)
          and a chapter on top-down design method

    The 8051 Microcontroller: Architecture, Programming and Applications
        - Kenneth J. Ayala
        - 241 pages, soft cover
        - 5.25" diskette with assembler and simulator
        - ISBN 0-314-77278-2, Dewey 004.165-dc20
        - West Publishing Company
          P.O. Box 64526, St. Paul, MN  55164
          (800)328-9352
        - see review in next section

    The Art of Programming Embedded Systems
        - Jack G. Ganssle
        - 1992, 279pp, $55.00
        - ISBN: 0-12-274880-0
        - CONTENTS: Introduction, Initial Considerations.  Elegant
          Structures.  Designs for Debugging.  Design for Test.  Memory
          Management.  Approximations. Interrupt Mamangement.  Real-Time
          Operating Systems.  Signal Sampling and Smoothing.  A Final
          Perspective.  Appendixes: Magazines, File Format.  Serial
          Communications.  Bibliography.  Index.

    Assembly Language Programming (for the MCS-51 family)
        - F. A. Lyn
        - L. S. Electronic Systems Design

    Basic-52 Programmer's Guide
        - Systronix, Inc. (they also sell a Basic compiler)
        - address above

    Beginner's Guide
        - Suncoast Technologies

    A Beginners Guide to the Microchip PIC
        - Nigel Gardner
        - Character Press, Ltd. (UK)
        - ISBN 1 899013 00 8
        - software (on floppy) and hardware guide, debugging techniques
        - suitably titled, for those with no previous microcontroller
          experience
        - 19.95 UK Pounds

    The PIC Source Book:
        - assembly language source code on diskette
        - $39
        - Scott Edwards Electronics
          964 Cactus Wren Lane, Sierra Vista, AZ  85635
          (602)459-4802    Fax: (602)459-0623
          72037.2612@compuserve.com

    C and the 8051
        - Thomas W. Schultz
        - Prentice Hall
        - ISBN 0-13-753815-4

    Data Acquisition and Process Control with the M68HC11 Microcontroller
        - Frederick Driscoll, Robert Coughlin, Robert Villanucci of
          Wentworth Institute of Technology.
        - Macmillan Publishing Company
        - 1994
        - ISBN 0-02-33055-X
        - Several Chapters on the 68HC11, instructions, and EVB;
          chapters on interfacing Analog and Digital signals to the
          68HC11;  example applications of interfaces to temperature,
          load cell, pressure and thermocouple sensors.
        - a good companion to Motorola's "pink" books

    Data book / Handbook / Users' Guide
        - Advanced Micro Devices
        - Dallas (User's guide for the DS5000)
        - Intel
        - Siemens

    Design with Microcontrollers
        - John B. Peatman
        - ISBN 0-07-049238-7
        - This book is on a more advanced level.  Uses both the 68hc11
          and Intel 8096 as example systems.
        - Used for a very popular course on microcontroller design at
          Georgia Tech.

    Embedded Controller Forth for the 8051 Family
        - Academic Press
        - William H. Payne
        - uses a Forth development system available on the Internet

    Embedded Controllers Databook 1992 Edition
        - National Semiconductor Corporation
        - literature number: 400049
        - (800)272-9959 call this number for for copies

    Embedded Systems Programming in C and Assembler
        - John Forrest Brown
        - Van Nostrand Reinhold, 1994
        - 304 pages, $49.95
        - ISBN 0-442-01817-7
        - covers Motorola and Intel processors
        - includes diskette with code from the book
        - book review in Dr. Dobb's Journal, November 1994, page 121

    Experimenter's guide
        - Rigel Corporation

    Intel Development Tools Handbook, 2nd Edition
    (Support Solutions for Intel's Embedded Microprocessor)
        - MW Media
        - Fairmont Plaza, 50 W. San Fernando, #675, San Jose, CA  95113
        - (408)286-4200
        - FAX: (408)288-4728
        - Survey of commercial development tools for the 8051, 8096,
          and 80186 lines of Intel microprocessors.  This document could
          very well be a "must" if you're into serious development using
          one of these chips.  If you are "just" a hobbyist, see how the
          "other half" lives.

    Introduction to Microcontroller Design, Based on the 8051 family of
    Processors
        - Business Data Computers
          P.O. Box 1549, Chester, CA  96020

    M68hc11 Reference Manual
        - Motorola - literature reference M68HC11RM/AD
        - This document is the "bible" of the 6811 and is a must-have
          for any serious 6811 programmer.

    MC68hc811E2 Programming Reference Guide
        - Motorola - literature reference M68HC811E2RG
        - A pocket-sized guide to the version of the 6811 used on the
          Mini Board

    The Microcontroller Idea Book
        - Jan Axelson (of Microcomputer Journal fame)
        - features the 8052-BASIC microcontroller
        - hands-on guide with complete plans (schematics, design theory,
          program listings, construction details, etc)
        - explains how to use sensors, relays, displays, clock/calendars,
          keypads, wireless links, and more
        - 1994, 273 pages, $31.95 + shipping
        - Lakeview Research, 2209 Winnebago St., Madison, WI  53704
          (608)241-5824  Internet: 71163.3555@compuserve.com
        - contact the author at janaxel@aol.com

    Microcomputer Engineering
        - Gene H. Miller
        - Prentice Hall, Englewood Cliffs, NJ  07632
        - 1993
        - ISBN 0-13-584475-4
        - Explains the basics.  Many clear and concise assembly language
          example programs.
        - Written to be used with the Motorola Trainer (EVB).

    Microcontroller Technology, The 68hc11
        - Peter Spasov
        - Prentice Hall
        - ISBN 0-13-583568-2

    Microcontrollers: Architecture, Implementation, and Programming
        - Kenneth Hintz and Daniel Tabak
        - McGraw-Hill Inc.  1992
        - ISBN 0-07-028977-8

    Programmer's Guide to the 1802
        - Tom Swan
        - Hayden Book Company, Inc., 1981
        - ISBN 0-8104-5183-2
        - good introduction to assembly language progamming and an
          thorough tutorial on the 1802

    Programming Microcontrollers in C
        - Ted Van Sickle
        - HighText Publications, 1994
        - 394 pages, $29.95
        - ISBN 1-878707-14-0
        - thorough tutorial on C programming, covers aspects of C
          programming specific to embedded systems
        - covers the Motorola line of microcontrollers (small to large)
        - book review in Dr. Dobb's Journal, November 1994, page 121

    The Real-Time Kernel
        - Jean Labrosse
        - R&D Publications, Inc.
          Suite 200 1601 W 23rd St., Lawrence, KS  66046
        - (913)841-1631   Fax: (913)841-2624
        - Based on the article "A Portable Real Time Kernel in C"
          in Embedded Systems Programming (Part 1: vol 5 no 5
          May 1992, Part 2: vol 5 no 6 June 1992)
        - originally written for the Intel 186 but ported to HC11
          source code for UCOS11

    Single- and Multiple-Chip Microcomputer Interfacing
        - G.J. Lipovski
        - Copyright 1988
        - 478 pages
        - ISBN 0-13-810557-X (Prentice-Hall Edition)
          ISBN 0-13-810573-1 (Motorola Edition)
        - Based around the 68HC11 it covers both hardware and
          software at undergraduate level, but the emphasis is on
          interfacing.
        - Chapter titles:
               1  Microcomputer Architecture
               2  Programming Microprocessors
               3  Bus Hardware and Signals
               4  Parallel and Serial I/O
               5  Interrupts and Alternatives
               6  Analog Interfacing
               7  Counters and Timers
               8  Communications Systems
               9  Storage and Display Systems

    Single- and Multiple- Chip Microcomputer Interfacing (Lab Manual)
        - Peter Song and G. Jack Lipovski
        - Prentice-Hall, 1988
        - ISBN 0-13-811605-9
        - Support for the above book.  Examples based around the Motorola
          EVB and the BUFFALO monitor or the EVBU (or 3-chip micro) and
          PC-Bug11.

    User Manual for the CDP1802 COSMAC Microprocessor
        - RCA, 1977
        - contains useful hardware and software techniques


8.2)  Data and Reference Books

    Motorola
        - M68hc11 Reference Manual, ref # M68HC11RM/AD
             this document is the "bible" of the 6811 and is a must-have
             for any serious 6811 programmer
        - MC68hc811E2 Programming Reference Guide, ref # M68HC811E2RG
             a pocket-sized guide to the version of the 6811 used on the

    National Semiconductor - (800)272-9959 for copies
        - COP8 Databook, ref # 400007
        - COP8 Selection Guide, ref # 630006
        - COP8 Designers Information Kit, ref # 6300007-005
             contains: - COP8 Databook (1994 Edition)
                       - COP8 Selection Guide (1994 Edition)
                       - Independent 8-bit Instruction Set Analysis
                       - Independently prepared software analysis of
                         National's COP8, Motorola's M68Hc05, Intel's
                         80X51, and Microchip's PIC16C5X
                       - Utility and Overview Disks
                       - Self-lead overview on COP8, includes electronic
                         selection guide and sample application code
        - COP8 Utility Disk, Mac ref # 6300000, Windows ref # 630001
             typical microcontroller applications and sample code
             available by ftp nscmicro.nsc.com in/pub/COP8
        - COP8 Overview Disk, Mac ref # 630004, Windows ref # 630005
             self-lead COP8 overview, shows product features/benifits
                and includes a electronic selection guide (2 disks)
             available by ftp nscmicro.nsc.com in /pub/COP8


8.3)  Periodicals

    Various magazines and journals (journals seems to be THE popular name
    for magazines these days) provide articles from time to time on
    microcontrollers.  If you are just starting out learning, pick those
    magazines that feature construction articles.

    The Computer Applications Journal (Circuit Cellar Ink)
        - programming and construction articles
        - POB 7694, Riverton, NJ  08077-8784
        - Fax: (203)872-2204
        - Voice orders: (609) 786-0409
        - On-line orders (BBS): (203) 871-1988
        - Email orders: ken.davidson@circellar.com
        - $21.95, $31.95 surface Canada and Mexico,
          $49.95 air all other countries

    Computer Design
        - industry announcements and trends
        - One Technology Park Drive, P.O. Box 990, Westford, MA  01886
        - (508)692-0700

    The Computer Journal
        - programming and construction articles
        - PO Box 535, Lincoln  96648

    Dr. Dobbs Journal
        - programming articles, concepts, and designs
        - 411 Borel Ave., San Mateo, CA  94402
        - (415)358-9500

    Electronic Engineering Times
        - industry announcements and trends
        - 500-B Bi-County Boulevard, Farmingdale, NY  11735
        - (516)293-3000

    Electronics Now
        - construction articles
        - Box 55115, Boulder, CO  80321-5115
        - $19.97 one year

    Elektor Electronics
        - programming and construction articles
        - World Wide Subscription Service Ltd
          Unit 4, Gibbs Reed Farm, Pashley Road
          Ticehurst TN5 7HE, England
        - 27 UK pounds
     or
        - Old Colony Sound Lab, P.O. Box 243, Peterborough, NH 03458
        - Tel. (603) 924-6371, 924-6526
        - Fax: (603) 924-9467
        - $57 USA and Canada per year

    Embedded Systems Programming
        - programming and systems design articles
        - Miller Freeman Publications
        - 500 Howard St., San Francisco, CA  94105
        - (415) 397-1881

    Inquisitor Magazine
        - If you're the type that watched Gilligan's Island for its
          socio-political insights, then you'll love a new 'zine that
          just crossed my desk - Inquisitor Magazine.  It's general
          philosophy seems to be ... well, it seems to be ... uh, yeah!
          Technical in nature, bizarre, tongue in cheek, eclectic,
          electric, did I mention bizarre(?), and lots of fun.  Worth
          looking at if you like the out of the ordinary.  The moving
          force behind this magazine is Daniel Drennan, who seems to have
          suffered from an overdose of radiation from his computer
          monitor ;-).
        - Planetarium Station, P.O.Box 132
          New York, NY  10024-0132
        - (212)595-8370
        - Email: inquisitor@echonyc.com
        - $16 per year (4 issues)

    Microcomputer Journal (formerly Computer Craft)
        - programming and construction articles
        - 76 N. Broadway, Hicksville, NY  11801
        - $18.95 one year, foreign $23.00, foreign air mail $76.00

    Midnight Engineering
        - 1700 Washington Ave., Rocky Road, CO  81067
        - (719)254-4553

    MW Media - Product Directories
        - Motorola Microcontroller Tools Directory
          ('94 edition out in 3 weeks)
        - Motorola 68K Source ('94 edition available now)
        - Intel Development Tools Handbook ('95 edition just beginning)
          (survey of commercial development tools for the 8051, 8096,
          and 80186 lines of Intel microprocessors)
        - Embedded Intel 386 Directory (released in Aug '94)
        - Intel 486/Pentium directory (forthcoming in '95)
        - 8051 Product Directory ('94 edition out in 4 weeks)
          (survey of various 8051 products)
        - Hitachi Microcontroller Development Tools Directory
          (out in '95)
        - AMD FusionE86 Directory (out in '95)
          (186,386,486)
        - AMD 29K Directory (pending in '95)
        - Low Power Product Directory (out in '95)
          (3.3. volts and lower)
        - DSP Directory (released in May '94)
        - Multimedia CD (hopefully out in '95)
        - These documents could very well be a "must" if you're into
          serious development using any of these chips.  If you are
          "just" a hobbyist, see how the "other half" lives.
        - FREE to qualified developers
        - MW Media
        - Fairmont Plaza, 50 W. San Fernando, #675, San Jose, CA  95113
        - (408)288-4721 and (408)286-4200
        - FAX: (408)288-4728
        - Email: jasonm@violet.berkeley.edu
                 (Jason McDonald, program director)

    Nuts & Volts Magazine
        - A National Publication for the Buying and Selling of
          Electronic Equipment
        - 430 Princeland Court, Corona, CA  91719
        - Mailed third class, USA only:  $17.00 one year
                                         $31.00 two years
        - Mailed first class, one year only:  $34.00-USA
                                              $35.00-Canada/Mexico
        - Foreign/Air Mail - $70.00;  Foreign/Surface - $39.00
        - (800)783-4624
        - Email:  74262.3664@Compuserve.com


8.3)  Internet newsgroups

    Various newsgroups frequently have discussions or information on
    various microcontrollers.  Among some of the more useful (especially
    the first 3 newsgroups):

    comp.robotics
       Microcontrollers figure heavily in robotics projects.  You will
       find a lot of information about the subject in this newsgroup.
       Even if you aren't building a robot, check this newsgroup out.
       Lots of 68hc11 activity, too.

    sci.electronics
    alt.comp.hardware.homebuilt
       Two good places to find [mostly technical] discussions on
       microcontroller use and implementation.  Most of the participants
       are crazy about "rolling their own", and they are eager to share
       their knowledge.

    comp.realtime
       Occasional discussions about real-time use of microcontollers.

    comp.sys.m68k
       The full line of Motorola 68000 microprocessors is discussed in
       this newsgroup, including the very powerful and advanced
       microcontrollers based on this family.

    comp.sys.6809
       This newsgroup covers an old-time favorite, the 6809
       microprocessor, which is commonly used for control applications.
       Motorola 8 bit microprocessors and microcontrollers (6805, 6811,
       etc.) are also discussed in this newsgroup.

    comp.sys.intel
       Mostly trends and development are discussed in this newsgroup.
       From time to time you will find a discussion on some obtuse
       technical problem or feature.  Lately, the participants seem to
       spend all of their time whining about the Pentium bug.

    comp.lang.misc
       Sometimes questions or discussions on different microcontroller
       topics pop up here.  I guess it's the ".misc" that attracts these
       questions.

    comp.ai.fuzzy
       Fuzzy logic is rapidly becoming an increasingly important aspect
       of [microcontroller based] control systems.  This group might very
       well become an important forum for those involved in developing
       control systems.

    comp.dsp
       Discussions on Digital Signal Processsing

    comp.sys.ti
       Texas Instruments products discussed here

    sci.engr.control
       Control and embedded systems

    sci.engr.semiconductors


8.4)  Internet sources of information on specific microcontrollers

    If you are interested in finding sources of information on a specific
    microcontroller, check out the really fine FAQs ;-) that have been
    compiled for the more popular microcontrollers.

      Subject:  PIC microcontrollers
      Newsgroups:  comp.realtime
                   comp.robotics
                   sci.electronics
                   sci.electronics.repair
      Archive:  rtfm.mit.edu :  <plus all mirror sites>
                /pub/usenet/comp.answers/microcontroller-faq/PIC
                /pub/usenet/sci.answers/microcontroller-faq/PIC
                /pub/usenet/news.answers/microcontroller-faq/PIC
      Maintainer:  Tom Kellett
                   Email: Tom@takdsign.demon.co.uk

      Subject:  8051 microcontrollers
      Newsgroups:  comp.sys.intel
                   comp.realtime
                   comp.robotics
                   comp.lang.forth
                   sci.electronics
      Archive:  rtfm.mit.edu :  <plus all mirror sites>
                /pub/usenet/comp.answers/microcontroller-faq/8051
                /pub/usenet/sci.answers/microcontroller-faq/8051
                /pub/usenet/news.answers/microcontroller-faq/8051
      Maintainer:  Russ Hersch
                   Email:  sibit@datasrv.co.il

      Subject:  68hc11 microcontrollers
      Newsgroups:  comp.realtime
                   comp.robotics
                   sci.electronics
      Archive:  rtfm.mit.edu :  <plus all mirror sites>
                /pub/usenet/comp.answers/microcontroller-faq/68hc11
                /pub/usenet/sci.answers/microcontroller-faq/68hc11
                /pub/usenet/news.answers/microcontroller-faq/68hc11
      Maintainer:  Russ Hersch
                   Email:  sibit@datasrv.co.il

      Subject:  Motorola 68K microprocessor line
      Newsgroups:  comp.sys.m68k
      Archive:  bode.ee.ualberta.ca : pub/motorola/general
                ftp.luth.se : /pub/misc/motorola/faq
                file name of archive is m68kfaq?.zip (? is version)
      Comments:  also includes information on the 683xxx and 68hc16
      Maintainer:  Robert Boys - Ontario, Canada
                   Email: r.boys@genie.geis.com
                                 or
                          fboys@uoguelph.ca


    Several other FAQs have been compiled that address various aspects of
    microcontroller design and implementation.

      Subject:  Robotics
      Newsgroups:  comp.robotics
      Maintainer:  Kevin Dowling
                   (412)268-8830
                   Email:  nivek@ri.cmu.edu
                   Smail:  Carnegie Mellon University
                           The Robotics Institute
                           Pittsburgh, PA 15213

      Subject:  Electronics
      Newsgroups:  sci.electronics
      Comments:  There are a number of FAQs available in this newsgroup
                 on various subjects.  Among some of the subjects covered
                 are:  LCDs, stepper motors, suppliers, etc.

      Subject:  Real-time
      Newsgroups:  comp.realtime, comp.answers, news.answers
      Archive:  rtfm.mit.edu : pub/usenet/comp.realtime
      Maintainer:  Mark Linimon
                       Lonesome Dove Computing Services
                       Roanoke, Virginia
                   Email:  linimon@nominil.lonesome.com.

      Subject:  Neural Networks
      Newsgroups:  comp.ai.neural-nets,comp.answers,news.answers
      Archive:  rtfm.mit.edu : pub/usenet/neural-net-faq
      Maintainer:  Lutz Prechelt
                   Email:  prechelt@ira.uka.de

      Subject:  Fuzzy Logic
      Newsgroups:  comp.ai.fuzzy,comp.answers,news.answers
      Archive:  rtfm.mit.edu : pub/usenet/fuzzy-logic/
      Maintainer:  Mark Kantrowitz
                   Email:  mkant+@cs.cmu.edu


9)  MICROCONTROLLER FREE SOFTWARE SOURCES

    This section includes descriptions and references to free
    microcontroller software.  FTP sites and BBSs contain many quality
    packages and code samples for free.  For heavy duty use, you might
    prefer the many commercial packages that are available.  With the
    public domain (or free) stuff, you're usually on your own.  The
    commercial packages usually provide extensive documentation and
    support.

    If you are looking for commercial software for the 8051, 68hc11, or
    PIC, then check out the FAQs on these microcontrollers for details on
    what is available.


    I've been playing with the Dunfield Development System lately (on the
    8051), and its really quite nice.  I've also heard many good things
    about it from others.  It includes a near ANSI-C compiler, run-time
    library with source, assembler, ROM debugger, integrated development
    environment, monitor with source, utilities, and other extras.
    Although not freeware, the low price ($100), the features, all of the
    extra goodies, and the good reviews make this a package worth looking
    at.  Also, if you're interested in working on more than one family of
    microcontroller, Dunfield supports a wide range.  This means only
    needing to learn one system, instead of many.  The following chips
    are supported:  6809, 68hc11, 68hc16, 8051/52, 8080/85, 8086, and
    8096.
          Dunfield Development Systems
          P.O. Box 31044
          Nepean, Ontario  K2B 8S8
          Canada
          (613)256-5820
          Fax: (613)256-5821
          Email:  ddunfield@bix.com


    Another decent C compiler comes from ImageCraft.  This package, which
    runs under DOS and OS/2, includes a near ANSI C compiler, assembler,
    linker, librarian, ANSI C functions and headers, and 90 page manual.
    The current release is version 1.02 of their compiler.  The price is
    just $40.  Initial feedback on this compiler seems promising.  The
    pre-release versions are already in use by many of you, and will
    still be available as freeware.
          ImageCraft
          P.O. Box 64226
          Sunnyvale, CA 94086-9991
          (Richard Man) imagecft@netcom.com


9.1)  FTP sites


    The following is a list of the anonymous ftp sites that have source
    code and programming languages for various microcontrollers.  There
    are many others that  are not listed here that contains bits and
    pieces.  Usually you can find them using Archie and searching for
    variations on the name of the microntroller you are looking for.

    ftp.pppl.gov (formerly lyman.pppl.gov)
        - this is a great source of 8051 stuff
        /pub/8051
        /pub/incoming - check this out for new untested/unsorted items

    ftp.mcc.ac.uk
        - this is a new 8051 ftp site

    ftp.intel.com
        - good source of stuff the MCS-51 and MCS-96 families
        /pub/mcs51 - various development tools and sample code for the
                     MCS-51 family
        /pub/mcs96 - various development tools and sample code for the
                     MCS-96 family

    nctuccca.edu.tw
        - mirror of ftp.intel.com
        - /vendors/Intel

    ftp.ee.ualberta.ca (preferred address)
    bode.ee.ualberta.ca
    wattson.ee.ualberta.ca
        - HUGE archive of all sorts of stuff on the 68hc11 (lots of other
          good stuff too!)
        - you'll have fun mucking around this ftp site, there's piles of
          stuff here
        /pub/cookbook
        /pub/motorola
        /pub/motorola/68hc11
        /pub/motorola/mcu11

    cherupakha.media.mit.edu (cher.media.mit.edu)
        - HUMONGOUS archive of all sorts of stuff on the 68hc11 including
          the 6.270 robotics project, Mini Board, F1 board, and more
          (lots of other good stuff too!)
        - you'll lose yourself rooting around this ftp site, there's
          piles of stuff here (assemblers, tools, C compilers, plans and
          schematics, and many other items)
        /pub/6270 - tools, docs, schematics, etc. for the MIT 6.270
          robotics project using a 68hc11-based development system
        /pub/6811 - software, schematics, etc. for the 68hc11-based F1
          board
        /pub/incoming - various unsorted or new items
        /pub/miniboard - software, docs, schematics, etc. for the 3"x2",
          68hc11-based Mini Board controller

    ftp.funet.fi (nic.funet.fi)
        - this is a good source for various microcontrollers
        /pub/microprocs/ (subdirectories include: 1802, 6805, 8048,
           8051, 8096, PIC and many other microprocessors)

    ftp.sics.se
        - many assemblers, utilities, and application notes for the PIC
        - Microchip BBS mirror
        /pub/mchipsoft

    ernie.uvic.ca
        - files provided by local Motorola representative
        /pub (subdirectories include: ibm, dsp96k, dsp56100, dsp56k,
          dsptools, develop, mac, mcu302, mcu332, mcu11, pgmr, mcu16,
          mcu, market, qa, general, m68k, evm, dsp)

    ftp.sics.se
        - PIC microcontroller software from the PIC BBS
        - ftp site of Memec Scandinavia, Microchip's Swedish agent.
        /pub/mchipsoft

    wpi.wpi.edu
        - basic stamp information
        - PIC "C" compiler
        /stamp

    ftp.std.com
        /vendors/microchip/

    ftp.luth.se
        /pub/misc/microchip - PIC information
        /pub/misc/microchip/stamp/mirror - mirror of wpi.wpi.edu
        /pub/languages/assembler - various freeware assemblers

    ti.com
        read the 00readme file first or you'll be lost

    hpcsos.col.hp.com
        /misc/ns32k/beowulf

    ftp.netcom.com
        /pub/imagecft - prerelease version of ImageCraft C for 68hc11

    info@circellar.com - Email (not ftp)
        - send Email to get information file on services available
        - all Circuit Cellar INK and BYTE related files available

    asterix.inescn.pt - FORTH archive
        /pub/forth

    ftp.ultranet.com
        /biz/mchip - PIC information
        web site: http://www.ultranet.com/biz/mchip

    ftp.mrc-bbc.ox.ac.uk
        /pub/microchip

    ftp.oak.oakland.edu
        - has information and software for a wide range of
          microprocessors and microcontrollers

    ftp.uni-erlangen.de
        - information on PIC
        /mounts/epix/public/pub/Multimedia/VideoCrypt/
            microcontroller/microchip.bbs

    ftp.armory.com (Steve Walz)
        - /pub/user/rstevew/8051
        - /pub/user/rstevew/TB8051
        - /pub/user/rstevew/incoming


9.2)  BBSs

    The following BBSs have 8051 information:

    Circuit Cellar, Inc.
        - contains code from their magazine articles and from the
          original Circuit Cellar articles in Byte magazine, also
          contains many other interesting items
        - The BBS is mentioned in the masthead of each issue (on the
          table of contents page).  Excerpts from the BBS appear in Ken
          Davidson's ConnecTime column in every issue with a description
          of how to access the system at the end of every column.
        - (203)871-1988
        - Voice: (203)875-2751
        - Fax: (203)872-2204

    Dunfield Development Systems
        - support for their Micro-C C compiler and development tools
        - includes a lot of nice goodies - CHECK THIS OUT!
        - (613) 256-6289

    Electronics Now
        - contains code from their magazine articles
        - (516)293-2283
        - 1200/2400, 8N1

    Intel American Marketing Applications Support Bulletin Board System
        - 16 lines, hi-speed modems (14.4K)
        - Lots of useful info and files (including design examples)
        - Full ANSI-BBS with color is recommended, but support for just
          about all terminal types is provided
        - 916-356-3600 (24 hours)
          Auto config: 1200 thru 14.4K Baud
          8 data bits, no parity, 1 stop

    Iota Systems, Inc.
        - Support for their line of hardware and software products
        - (702)831-4732

    Don Lekei BBS
        - support for the PIC line of microcontrollers
        - (604)597-3479 (Canada)

    Microchip BBS
        - support for the PIC line of microcontrollers
        - Contact by dialing the same number you would use to get to
          Compuserve at 19200,n,8,1, except that you press +<CR> at the
          (garbage) prompt, followed by MCHIPBBS as the host (instead of
          CIS).

    ED Teck. Pubs BBS
        - run by Fred Eady who writes for hobbyist magazines
        - good source of information on the PIC
        - (407)454-3198

    Protel (Microchip PIC software support)
        - (408)243-0125

    Parallax Inc.
        - (916)624-7101

    Motorola (Austin Texas) BBS
        - terrific, has piles of stuff, only some of which is on
          bode.ee.ualberta.ca
        - (512) 891-3733 (Austin, Texas)
        - V.32 9600 Baud modems w/ MNP-5
        - 8 Data Bits, No Parity, 1 Stop Bit.

    Other Motorola BBSs:
        - Munich, Germany:  49-89-92103-111  (2400 baud)
        - Stuttgart, Germany:  49-7031-275496  (19200 baud)
        - San Diego, California:  (619) 279-3907
        - Toronto, Ontario, Canada:  (416) 497-8989

    Philips Semiconductor (parent company of Signetics)
        - support for: standard logic, programmable logic,
          in-car electronics (planned), 8 and 16 bit microcontrollers,
          I2C software, third party software, discrete semiconductors,
          cross assemblers (general), RF (planned)
        - PHIBBS is located in the Netherlands: +31-40-721102
        - maximum 14400 baud / V42bis
        - 24 hours a day available
        - Help desk: +31-40-722749  (9.00 AM - 16.00 PM CET)

    Philips Semiconductors (Signetics)
        - support for their 8051 variants
        - contains many good source code items
        - partially mirrored on ftp.pppl.gov and nic.funet.fi
        - (800)451-6644 or (408)991-2406

9.3)  Mailing Lists

    listserv@oberon.com
        - mailing list for the Mini Board and 6.270 board
        - send a message containing the word "help" for directions
        - mailing list address:  robot-board@oberon.com
        - maintainer:  gkulosa@oberon.com

    listserv@hipp.etsu.edu
        For information, send empty message.
        To subscribe, send message with the body:
           subscribe mc68hc11 your_real_name

    listserv@netcom.com - mailing list for Imagecraft C
        to join the mailing list, send the message "subscribe icc11-list"

    listserv@mitvma.mit.edu
        to join, send the message "SUB PIC"
        list address is: PIC@mitvma.mit.edu
        to receive the mailing list as a digest, send the message
           SET PIC DIGEST

    majordomo@first.gmd.de
        to join, send the message "subscribe crossgcc <your address>"
           in the message body
        Cross GCC mailing list - for building a cross gcc compiler for
           your embedded system.


__________________________________________________________

Copyright (c) 1994 by Russell Hersch, all rights reserved.
This FAQ may be posted to any USENET newsgroup, on-line service, or BBS
  as long as it is posted in its entirety and includes this copyright
  statement.
This FAQ may not be distributed for financial gain.
This FAQ may not be included in commercial collections or compilations
   without express permission from the author.

-----------------------------------
Russ Hersch - sibit@datasrv.co.il