Файл: Embedded Controller Hardware Design (Ken Arnold, 2001).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.06.2025

Просмотров: 2682

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

50EMBEDDED CONTROLLER

Hardware Design

In each of these instructions, the contents of the accumulator and either the DPTR or the PC (the program counter register) are added together, generating a 16-bit address. The contents of the address in the program memory space pointed to by this 16-bit sum is copied to the accumulator. In this way, either the PC or the DPTR can be used as a base address into a data table in the program memory space. The accumulator then becomes an offset into the data table, with a maximum offset value of 256.

The last method of indirect addressing available in the 8051 is the XCHD (exchange digit) instruction. The XCHD instruction is frequently used when BCD (binary coded decimal) arithmetic is being performed, or when a BCD lookup table is stored in internal RAM (a common use of a BCD lookup table would be for driving a 7-segment LED display). The XCHD instruction has the following syntax:

XCHD A,@R0

XCHD A,@R1

This instruction exchanges the low nibble (that is, the low 4 bits) of the accumulator with the low nibble of the internal RAM location pointed to by either the R0 or R1 register. Recalling that BCD uses 4 bits to represent the decimal numbers 0 through 9, this instruction offers a quick way to indirectly address a BCD (or any other 4-bit coding scheme) lookup table in internal RAM. To illustrate this with an example: suppose the accumulator contains A6h, register R1 contains 43h, and internal RAM location 43h contains 0BBh.

The instruction:

XCHD A,@R1

Will result in the accumulator containing 0ABh, and internal RAM location 43h containing 0B6h.

Immediate Addressing

Sometimes it is necessary to place a fixed constant into a memory location. This may be performed through the use of the immediate operator “#”.

As an example,

51CHAPTER TWO

Microcontroller Concepts

MOV A,#09h

places the number 09h into the accumulator. Likewise,

MOV 52h,#3Ah

places the constant 3Ah into internal RAM location 52h. The immediate operator indicates that the number that follows is to be interpreted as an immediate constant, rather than a memory location. Notice that, had we issued the instruction

MOV 52h,3Ah

this would have copied the contents of internal RAM location 3Ah to internal RAM location 52h. Since this is a perfectly valid 8051 instruction, the assem­ bler will not flag this as an error if we had actually meant to prefix the 3Ah with the immediate operator. The code will not function as we might expect it to operate. Watch out for this – it is a VERY common error!

Immediate data, by its very nature, must only occur as the source operand of an 8051 instruction.

The instruction

MOV #52h,44h

makes no sense, and will be flagged as an error by the assembler. On the other hand, below is a valid instruction that will put the number 44h into internal data RAM location 52h:

MOV 52h,#44h

A detailed list of all of the instructions and their operations is contained in the 8051 programmer’s reference handbook.

Generic Address Modes and Instruction Formats

Regardless of the type of processor, certain address modes are usually available in one form or another. This section describes some of the generic address mechanisms and instruction encoding formats, using the 8051 instructions and address modes as an example.

52EMBEDDED CONTROLLER

Hardware Design

Instructions can be classified by the number of operand addresses that are explicitly specified. For example, “CPL A — complement accumulator” is an instruction that does not contain an explicit address, so it is a zero-address instruction. The accumulator is called an implied operand because the instruc­ tion op code does not have an address field, since this instruction always refers to the accumulator. An explicit operand has an address field embedded in the instruction op code or follows the op code, usually as a pointer to the data that is to be used. Other examples of zero-address instructions include PUSH, POP and RETurn because the operand is implied to be on the stack. The instruction “MOV A,address” — load accumulator with the content of internal memory location address” is a one-address instruction because the accumulator is an implied address, but the memory location is specified explicitly by its address. A two-address instruction, such as “MOV addr,@R0” (move the data at address pointed to by R0 to “addr”) has two address fields. Some processors have three-address instructions, which allow the processor to perform an operation on two operands and store the result in a third operand, all of which may be referred to explicitly.

Instructions for a typical 8-bit CPU might consist of one or more op code bytes followed by optional operand fields. The first (op code) byte would identify the type of instruction, and the optional byte(s) following it would be the operand(s) or addresses of the operand(s).

8051 Address Modes

Implied addressing, as described above, always references the same location and does not have an explicit address field in the instruction. The instruction shown would take only one byte, and would result in only one memory cycle to fetch the op code byte. Table 2-1 illustrates this.

Instruction

Operand

CPL

A

complement

accumulator

Table 2-1:

E4

A

(op code)

(implied)

Implied addressing.

Immediate addressing is used when the operand is a constant value, and is part of the instruction, usually immediately following the op code in program


53CHAPTER TWO

Microcontroller Concepts

memory. An example would be an instruction that loads a constant into the accumulator, as shown in Table 2-2.

Table 2-2:

Immediate addressing.

Instruction

Operand

MOV A,

#35H

load accumulator

with 35

hex

74

35

(op code)

(constant)

The instruction would be stored in an 8-bit processor’s memory as follows:

AddressValue(hex)

1000

74 op code

1001

35 operand

Execution of this instruction would result in two memory cycles, one to fetch the op code and one to fetch the constant.

Direct addressing includes the address of the operand as part of the instruction rather than the operand itself. The address part of the instruction acts as a pointer to the data to be accessed. An instruction that loads the byte of data stored in memory location 1234 into the accumulator would consist of the op code followed by the address 1234.

Table 2-3:

Direct addressing.

Instruction

Operand

MOV A,

34H

load accumulator

with the contents

of location 34

74

35

(op code)

(constant)

The instruction could be stored in an 8-bit processor’s memory as follows:

AddressValue(hex)

1000

E5 op code

1001

34 operand address

Execution of this instruction would result in three memory cycles, one to fetch the op code and one to fetch the address and one to fetch the byte at location 1234.


54EMBEDDED CONTROLLER

Hardware Design

When dealing with values of more than eight bits, different microprocessor vendors use different methods of storing data in memory. Of course, Intel and Motorola chose opposite methods. The 16-bit address stored high byte first followed by the low byte as it is done in the Motorola 68000 family. Other processors, such as the Intel CPUs, reverse the order. For machines that sup­ port two byte or four byte values, there are two different ways of storing the bit operands: low byte first (Intel), and high byte first (Motorola).

Indirect addressing specifies a memory address that contains the address of the data to be transferred. An instruction that loads the byte of data that is pointed to by the address stored in memory location whose address (1234h) resides in the 16-bit register DPTR into the accumulator is shown below.

The instruction could be stored in an 8-bit processor’s memory as follows, assuming that DPTR contains 1234h:

Instruction

Operand

MOVX A,

@DPTR

load accumulator

contains the address of

the byte to be accessed

Table 2-3:

E0

DPTR=1234h

Indirect

(op code)

(address of the operand)

addressing.

External Memory

Code Address__Value(hex)

Data address

Value

1000

E0 op code

1234

57 operand

After completion of this instruction, the value 57 would be left in the accu­ mulator. Execution of this instruction would result in two memory cycles, one to fetch the op code (E0), one to fetch the contents (57) of the address (1234).

The 8051 does not support true indirect addressing. In processors that do, the address of the operand is stored at the location contained in the instruction op code.

Register indirect addressing (e.g. MOV A,@R1) uses the contents of a register as an address, so the instruction would consist of only an op code byte. A register points to the operand in memory, so there is no need for an address field in the instruction. Two memory cycles are needed, one for instruction fetch and one for fetching the data.


55CHAPTER TWO

Microcontroller Concepts

Indexed addressing (e.g. MOVC A,@A+DPTR) is a combination of direct and register indirect addressing, because the instruction includes an offset address (DPTR), which is added to an index register (A register) to determine the address of the data to transfer.

It should be noted that the nomenclature for the various address modes varies, and the 8051 family address modes used for the examples above are not necessarily the best examples, as other processors support more extensive and flexible address modes.

The Software Development Cycle

The standard software development process consists of the following steps:

1)Create or edit an ASCII text file containing the human readable source code, also known as the program instructions.

2)Translate the source code to machine-readable binary instruction code using a language translator. This is accomplished using an assembler or compiler.

3)Load the program memory with the binary instruction code into the processor’s program memory chip. For the SDK, the program is down­ loaded into program memory on the SDK.

4)Execute the program to test it and find program errors. For the SDK, this “debugging” process is facilitated using a special program (debugger or monitor) resident on the SDK.

5)Once the problem is located, the source code is corrected by repeating this process until all errors are corrected.

Software Development Tools

Software tools include translators, like assemblers and compilers, and debug­ ging tools. Active debugging tools include:

In-circuit emulators (ICE) for HW/SW integration; these are plugged into the application circuit (the “target” system) in place of the CPU, allowing the designer to “see inside” the microcontroller, download, and execute programs selectively.