Motorola's 68HC11x Family of 8-bit Micro-controllers

Motorola 68HC11 Micro-controller
Motorola 68HC11. Taken from

Table of Contents


Go to the presentation.

Download the THRSim11 HC11 simulator for Windows.

Download my program: Euclid's algorithm for determining the Greatest Common Divisor (RAR file) between two unsigned integers. Or download the C program.

Finally, download all of my notes and presentation material (RAR file).

Back to Top

About the 68HC11 Micro-contoller

Motorola's 68HC11 Micro-controller is an extension, and an overall improvement, of Motorola's 6800 family (built in 1975) of micro-controllers. The 68HC11 is upward compatible with the 6800 processor with an addition of the Y index register. The 68HC11 processor is an 8-bit data, 16-bit address micro-controller. There are many varieties of the 68HC11 micro-controller. Depending on the variety, it has built-in EEPROM 1, RAM, digital I/O, timers, A/D converter, PWM 2 generator, and synchronous and asynchronous communications channels. The 68HC11 processor is also a CISC machine. The instruction set for the 68HC11 processor contain about 145 instructions, 91 of which are new to the 68HC11. These are an extension to the 6800 line of processors. Freescale Inc. now produces this processor.

  1. An EEPROM (also called an E2PROM) or Electrically Erasable Programmable Read-Only Memory, is a non-volatile storage chip used in computers and other devices to store small amounts of volatile (configuration) data. When larger amounts of more static data are to be stored (such as in USB flash drives) other memory types like flash memory are more economical. (
  2. The pulse-width modulation (PWM) of a signal or power source involves the modulation of its duty cycle, to either convey information over a communications channel or control the amount of power sent to a load. (
Back to Top

Architecture / Hardware Design

The 68HC11 is an 8-bit data and 16-bit address processor. This means that it can store, in its data registers, 8-bits of data at a time. It does, however, handle an address space of 16-bits (from 0x0000 to 0xFFFF). There are instructions that can take as both input and output, a 16-bit constant to the 8-bit registers. (i.e., 16-bits divided by 16-bits stored into 8-bits.)

The architecture of the 68HC11 micro-contoller is very basic. There are normally 5 ports, labelled A through E. Depending on which model you buy, this may vary. Each port is used for data I/O. Port A is used for I/O with the pulse accumulator (timer). Port B and C are used for general I/O. Port D is used for some general I/O and for special I/O with the SCI. Port E is used for either general I/O or as inputs to the A/D converter.

The micro-controller is fitted with memory facilities too. Usually, around 8 Kilobytes are reserved for ROM, 512 Bytes of EEPROM, and 256 Bytes of RAM. Aside from memory, there is the CPU (of course!), clock logic, interrupt logic, mode control, an address space, a BUS, parallel I/O from 5 ports, a timer system, and last but not least, the SPI

Below you will find a logical block diagram containing the 68HC11's parts, and how they are connected together.

Motorola's 68HC11 Block Diagram.
Taken from (page 14).

Back to Top

Programmer's Model

The 68HC11 processor has a total of 6 registers (and one 'pseudo' register). They are A, B, IX, IY, PC, SP. The D register is this 'pseudo' register that contains both A (as the most significant bits of D) and B (as the least significant bits of D). You can place values into and read values out of D without ever having to explicitly call A or B, which is why it is this phantom 'pseudo' register. In the programmer's model, it is listed with the registers A and B, but not seperately, as the other registers are listed.

Other registers of interest are the two 16-bit registers IX and IY. These 'I' (which stands for Index) registers contain memory addresses, used to store values into and read values from memory. The instruction set of the 68HC11 contains instructions to do complicated things to the IX and IY registers as well. For example, you may want to store the IX register into memory. An instruction to do this might be

STX $0001
where $0001 is the memory address (remember, memory addresses range from $0000 to $FFFF). Also note that $0001 is direct memory rather than through the use of IX. For this example, it would make no sense to do
(although, one might want to do that).

Last but not least, the last two registers of interest are the SP and PC registers. Because they are so common, I will not go into detail about them here.

While instructions are processing, certain flags raise, might change, or otherwise make no change. These are called the condition codes of the 68HC11. They are:

Below is a diagram of the programmer's model and the condition codes.

Programmer's Model
Taken from (page 15)

Back to Top

Instruction Set

The 68HC11 currently has 145 instructions. An exhaustive list of every instruction would prove to be quite cumbersome, so I will display just a few of the basic instructions. Keep in mind that the 68HC11 instruction set is CISC, which, oddly, is not normal for an embedded CPU or Micro-controller.

Let us work with accumulator (register) A. To store the constant decimal 5, we would use:

SOMELABEL:	LDAA #$05	any words after LDAA <oper> is a comment

LDAA stands for LoaD Accumulator A, and # represents a constant. Without the #, we would be referencing a memory location. Instead, we are referencing the constant 5. We use $05 because the accumulator A is only 8-bits wide. Syntactically, we could not have used:

SOMELABEL:	LDAA #$0005	This is wrong.

Now, let us load two constants into accumulators A and B, add them, and store the result into some memory.

LDAA #$06	Load decimal '6' into accumulator A
LDAB #$55	Load decimal '85' into accumulator B
* Note, accumulator D contains the value of unsigned decimal '1621' now.
* Why is this? D can be thought of the concatenation between A and B.
* so D = 0000 0110 0101 0101 (which indeed is 1621)
ABA		This stands for Add accumulators B and A and store the result into A
STAA $0101	Store Accumulator A into address $0101 (dec. 257).
* Address $0101 now has the value 0x5B

Let's build off of the last example. Add two constants, and store the result into memory if no overflow occured, otherwise perform an infinite loop:

	LDAA #$06	Load decimal '6' into accumulator A
	LDAB #$7E	Load decimal '126' into accumulator B
	ABA		This stands for Add accumulators B and A and store the result into A
	BVC NOV		Branch to NOV if overflow is clear (V is the overflow signal).
FOO:	BRA FOO		Infinite loop. Branch Always to label FOO.
NOV:	STAA $0101	Store Accumulator A into address $0101 (dec. 257).
* Why is this overflow? We are working with signed 8-bit integers!

I provide more examples in my presentation. See the presenation area for more details.

Back to Top

Common Uses

By far the most common use for a 68HC11 micro-controller is as a processor for small robots. Most notably, and the very reason why I am interested in this micro-controller, the MicroMouse competition held every year sees a large usage of this micro-controller. There are a myriad of web sites available to detail the process in making a 'mouse' of your very own.

Another area of the economy also makes heavy use of the 68HC11. Universities everywhere use this "simple" processor to teach their EE/CE students the innerworkings of a basic embedded processor. Our very own Dr. D. Raskovic taught the EE 444 course this past spring and some of his students used this very controller in their projects.

Of course, you can use this micro-controller for any embedded task that you wish. Just let your wander...

Back to Top

Bibliography / References

Back to Top
Copyright © 2007, Jonathan Sawyer. jonmsawyer AT gmail DOT com.