Programarea Familiei de Microcontrolere AVR

Previzualizare referat:

Extras din referat:

Note the numeration of these bits: the least significant bit starts with zero (20 = 1).

A register can either store numbers from 0 to 255 (positive number, no negative values), or numbers from -128 to +127 (whole number with a sign bit in bit 7), or a value representing an ASCII-coded character (e.g. 'A'), or just eight single bits that do not have something to do with each other (e.g. for eight single flags used to signal eight different yes/no decisions).

The special character of registers, compared to other storage sites, is that

- they can be used directly in assembler commands,

- operations with their content require only a single command word,

- they are connected directly to the central processing unit called the accumulator,

- they are source and target for calculations.

There are 32 registers in an AVR. They are originally named R0 to R31, but you can choose to name them to more meaningful names using an assembler directive. An example:

.DEF MyPreferredRegister = R16

Note that assembler directives like this are only meaningful for the assembler but do not produce any code that is executable in the AVR target chip. Instead of using the register name R16 we can now use our own name MyPreferredRegister, if we want to use R16 within a command. So we write a little bit more text each time we use this register, but we have an association what might be the content of this register.

Using the command line

LDI MyPreferredRegister, 150

which means: load the number 150 immediately to the register R16, LoaD Immediate. This loads a fixed value or a constant to that register. Following the assembly or translation of this code the program storage written to the AVR chip looks like this:

000000 E906

The load command code as well as the target register (R16) as well as the value of the constant (150) is part of the hex value E906, even if you don't see this directly. Don't be afraid: you don't have to remember this coding because the assembler knows how to translate all this to yield E906.

Within one command two different registers can play a role. The easiest command of this type is the copy command MOV. It copies the content of one register to another register. Like this:

.DEF MyPreferredRegister = R16

.DEF AnotherRegister = R15

LDI MyPreferredRegister, 150

MOV AnotherRegister, MyPreferredRegister

The first two lines of this monster program are directives that define the new names of the registers R16 and R15 for the assembler. Again, these lines do not produce any code for the AVR. The command lines with LDI and MOV produce code:

000000 E906

000001 2F01

The commands write 150 into register R16 and copy its content to the target register R15. IMPORTANT NOTE:

The first register is always the target register where the result is written to!

(This is unfortunately different from what one expects or from how we speak. It is a simple convention that was once defined that way to confuse the beginners learning assembler. That is why assembler is that complicated.)

Different registers

The beginner might want to write the above commands like this:

.DEF AnotherRegister = R15

LDI AnotherRegister, 150

And: you lost. Only the registers from R16 to R31 load a constant immediately with the LDI command, R0 to R15 don't do that. This restriction is not very fine, but could not be avoided during construction of the command set for the AVRs.

There is one exception from that rule: setting a register to Zero. This command

CLR MyPreferredRegister

is valid for all registers.

Besides the LDI command you will find this register class restriction with the following additional commands:

- ANDI Rx,K ; Bit-And of register Rx with a constant value K,

- CBR Rx,M ; Clear all bits in register Rx that are set to one within the constant mask value M,

- CPI Rx,K ; Compare the content of the register Rx with a constant value K,

- SBCI Rx,K ; Subtract the constant K and the current value of the carry flag from the content of register Rx and store the result in register Rx,

- SBR Rx,M ; Set all bits in register Rx to one, that are one in the constant mask M,

Descarcă referat

Pentru a descărca acest document,
trebuie să te autentifici in contul tău.

Structură de fișiere:
  • Programarea Familiei de Microcontrolere AVR.docx
Alte informații:
Tipuri fișiere:
docx
Diacritice:
Nu
Nota:
7/10 (6 voturi)
Nr fișiere:
1 fisier
Pagini (total):
20 pagini
Imagini extrase:
20 imagini
Nr cuvinte:
11 811 cuvinte
Nr caractere:
58 485 caractere
Marime:
60.91KB (arhivat)
Publicat de:
Anonymous A.
Nivel studiu:
Facultate
Tip document:
Referat
Domeniu:
Limbaje de Programare
Tag-uri:
sisteme, programare, microcontrolere
Predat:
la facultate
Materie:
Limbaje de Programare
Sus!