Newsgroups: comp.robotics
Path: brunix!cat.cis.Brown.EDU!agate!howland.reston.ans.net!EU.net!Germany.EU.net!nntp.gmd.de!dearn!barilvm!aristo.tau.ac.il!sibit
From: sibit@datasrv.co.il (Sibit)
Subject: Microcontroller Primer FAQ
Message-ID: <1994Jul3.095515.26949@aristo.tau.ac.il>
Sender: usenet@aristo.tau.ac.il (USENET)
Organization: DataServe LTD. (An Internet Access Provider), Israel.
X-Newsreader: TIN version 1.2 PL2
Date: Sun, 3 Jul 1994 09:55:15 GMT
Lines: 1066

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
    2.4)  Special microcontroller features
    2.5)  Some popular microcontrollers

      3)  MICROCONTROLLER PROGRAMMING LANGUAGES
    3.1)  Machine/Assembly language
    3.2)  Interpreters
    3.3)  Compilers

      4)  DEVELOPMENT TOOLS
    4.1)  Simulators
    4.2)  Resident Debuggers
    4.3)  Emulators
    4.4)  Good Stereo System

      5)  FINDING OUT MORE ABOUT MICROCONTROLLERS
    5.1)  Books
    5.2)  Periodicals
    5.3)  Internet newsgroups
    5.4)  Internet sources of information on specific microcontrollers

      6)  MICROCONTROLLER FREE SOFTWARE SOURCES
    6.1)  FTP sites
    6.2)  BBSs


0)  Rantings and ravings

    I know some spots are a bit rough in this document.  I hope to polish
    it up a bit in the future.  For now, this is only a start.  Be kind
    and send in your suggestions.

    Thanks.

              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 5 and 6 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

    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?

    I will test the waters by initially posting to the following
    newsgroups:
          comp.robotics
          comp.sys.intel
          comp.sys.m68k
          comp.sys.6809
          sci.electronics
          alt.comp.hardware.homebuilt

    I will look forward to any suggestions about postings.  I will
    probably post once a month - probably 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 application would be the monitoring of
    my home.  As the temperature rises, the controller would cause the
    windows to open.  If the temperature goes above a certain threshold,
    an air conditioner might be activated.  If the system detects my
    mother-in-law approaching, the doors would be locked and the windows
    barred.  Upon detecting that my computer is turned on, the stereo
    would turn on at deafening volume (see the section on development
    tools).

    At one time, controllers were built exclusively from logic
    components, and were usually large, heavy boxes.  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, signal processing, video processing, and other
    tasks.


2.4)  Special microcontroller features

    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.

    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.

    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.

    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.

    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.

    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
       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
       The I2C but is a two line, multi-master, multi-slave network
       interface with collision detection.  Several peripherals also
       exist that support the I2C bus.  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.

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

    Sleep and Wakeup
       To conserve power, the processor can be put into a sleep (idle)
       mode which uses the absolute bare minimum amount of power.  The
       processor can then be woken up at some preset time or after a
       certain interval.  This technique is extremely useful for remote,
       unattended data logging - the microprocessor wakes up, takes its
       measurements, logs the data, and then goes back to sleep.

    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.


2.5)  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 home tinkerer, 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 range of
       development tools.  Split memory architecture with program ROM on
       chip with additional 64 to 256 bytes also on chip.  I/O is mapped
       in its own space.  You can still find this chip used in many
       applications.

    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.  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
       functions 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
       this line of microcontrollers.  Many manufacturers supply what
       must be a hundred flavors for any requirement.  Often featured in
       construction projects in the popular hobbyist magazines.

    8096
       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.

    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.  Common memory architecture in which instructions, data,
       I/O, and timers all share the same memory space.

    68hc11 (Motorola)
       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).  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.
       The 68hc11 has a common memory architecture in which instructions,
       data, I/O, and timers all share the same memory space.

    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.  Now, 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 (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 and are being
       featured more and more often in construction projects in popular
       hobbyist magazines.  They are currently available in three lines:
       the PIC16C5x, PIC16Cxx, and PIC17Cxx families.

    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.

    1802 (RCA)
       A real old-timer, the successor to the 1801 (2 chip set) which was
       the first microcontroller implemented in CMOS.  Although RCA
       called this a microprocessor, it could be considered a
       microcontroller due to its integration and ease of use.  Has
       separate data and I/O address spaces.


3)  MICROCONTROLLER PROGRAMMING LANGUAGES

    Just a bit of an introduction for the beginner.

3.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.


3.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.


3.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.

    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).


4)  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.


4.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.


4.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.


4.3)  Emulators

    If you've got the money, this is the equipment you want to develop
    your system.  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.

4.4)  Good Stereo System

    This is the most important tool for the microcontoller 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.  I find that I do my best work with the Rolling Stone's
    (especially Goats Head Soup) or anything by Clapton (especially early
    stuff like Cream and Blind Faith).  The volume must be set to cause
    excrutiating pain to be most effective.  Trust me on this ;-).


5)  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 Internet, or BBSs).


5.1)  Books

    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.

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

    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

    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
        - Available from Polar Electronics in UK for 19.95 UK Pounds

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

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

    Design with Microcontrollers
        - John B. Peatman
        - This book is on a more advanced level.
        - Uses both the 68hc11 and Intel 8096 as example systems.

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

    Experimenter's guide
        - Rigel Corporation

    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

    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

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


5.2)  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 starting out learning about
    microcontrollers, 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

    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

    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


5.3)  Internet newsgroups

    Various newsgroups frequently have discussions or information on
    various microcontrollers.  Among some of the more useful:

    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.

    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.

    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.lang.misc
       Sometimes questions or discussions on different microcontroller
       topics pop up here.  I guess it's the ".misc" that attracts these
       questions.


5.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:  sci.electronics
      Maintainer:  Tom Kellett
                   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 : /pub/usenet/8051-microcontroller-faq
      Maintainer:  Russ Hersch
                   Email:  sibit@datasrv.co.il

      Subject:  68hc11 microcontrollers
      Newsgroups:  comp.realtime
                   comp.robotics
                   sci.electronics
      Archive:  rtfm.mit.edu : /pub/usenet/68hc11-microcontroller-faq
      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)
      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
      Maintainer:  Filip Gieszczykiewicz
                   Email:  filip@smi.med.pitt.edu

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


6)  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.


6.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
        - not as good as one would hope or think, in fact not any good at
          all for the 8051
        - according to insiders at Intel, this is slated to be improved
        - the last time I checked (Jun 30, 1994) there were a number of
          new directories: mcs51, mcs96, and others - ALL EMPTY.

    bode.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

    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

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

    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 PLUS PIC "C" compiler
        /stamp

    ftp.luth.se
        - PIC information
        /pub/misc/microchip

    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

    lth.se
        /pub/languages/assembler

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


6.2)  BBSs

    The following BBSs have 8051 information:

    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

    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

    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

    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).

    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)

    Signetics (Philips Semiconductors)
        - 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


    __________________________________________________________

    Copyright (c) 1994 by Russell Hersch, all rights reserved.

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


