0% found this document useful (0 votes)
189 views26 pages

Advanced Assembly: The AVR Microcontroller and Embedded Systems

The document discusses different addressing modes for the AVR microcontroller including single register, immediate, two-register, direct, I/O direct, and register indirect addressing modes. It provides examples of assembler directives and instructions that use these addressing modes.

Uploaded by

LuqmanMaraaba
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
189 views26 pages

Advanced Assembly: The AVR Microcontroller and Embedded Systems

The document discusses different addressing modes for the AVR microcontroller including single register, immediate, two-register, direct, I/O direct, and register indirect addressing modes. It provides examples of assembler directives and instructions that use these addressing modes.

Uploaded by

LuqmanMaraaba
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 26

Advanced Assembly

Chapter 6

The AVR microcontroller


and embedded
systems
using assembly and c

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Topics
 Assembler directives
 Addressing modes
 Macro
 EEPROM memory
 Checksum

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Some Assembler directives
Example
+ LDI R20,5+3 ;LDI R20,8
- LDI R30,9-3 ;LDI R30,6
* LDI R25,5*7 ;LDI R25,35
/ LDI R19,8/2 ;LDI R19,4

Example
& LDI R20,0x50&0x10 ;LDI R20,0x10
| LDI R25,0x50|0x1 ;LDI R25,0x51
^ LDI R23,0x50^0x10 ;LDI R23,0x40

Example
<< LDI R16, 0x10<<1 ;LDI R16,0x20
>> LDI R16, 0x8 >>2 ;LDI R16,0x2
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
HIGH and LOW

LDI R20, LOW(0x1234) LDI R20, $34


$1234
LDI R21, HIGH(0x1234) LDI R21, $12
HIGH LOW

LDI R20, LOW(-200) LDI R20, $38


LDI R21, HIGH(-200) LDI R21, $FF

-200 = $FF38

HIGH LOW
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Single Register Addressing Mode
 Single Register Addressing Mode
 INC Rd
 INC R19
 DEC Rd
 DEC R23 ;R23 = R23 – 1

12 bits 4 bits
GPRs
Op. Code Rd 0

31

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Immediate Addressing Mode
(Single register with immediate)
4 bits 8 bits 4 bits
GPRs
Op. Code Immediate Rd 0

 LDI Rd,K
d
 LDI R19,25
31

 SUBI Rd,K
 SUBI R23,5 ;R23 = R23 – 5

 ANDI Rd,K
 ANDI R21,0x15
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Two-register addressing mode

6 bits 5 bits 5 bits


GPRs
Op. Code Rr Rd 0

31
 ADD Rd,Rr
 ADD R26,R23
 SUB Rd,Rr
 LDI R20,R10

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Direct addressing mode
 LDS Rd,address  STS address,Rs
 LDS R19,0x313  STS 0x95,R19

31 20 19 16 Data Space
Op. Code Rr/Rd 0
Data Address
15 0

Note: RAMEND has been used to


represent the highest location in
RAMEND
data space.
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
I/O direct addressing mode
 OUT address, Rs  IN Rs,address
 OUT 0x70,R16  IN R19,0x90

I/O Memory
15 5 0 0
Op. Code Rr/Rd A

63
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Register indirect addressing mode
 LD Rd,X Data Space
0

LD R24,X
15 0

 X, Y, OR Z - REGISTER

 LD R19,Y
 LD R20,Z
Note: RAMEND has been used to represent
the highest location in data space. RAMEND

 ST X,Rd
 ST X,R18 15 XH XL 0

ST Y,R20 X – register : 7 0 7 0
 R27 R26
15 YH YL 0
Y – register : 7 0 7 0
R29 R28
15 ZH ZL 0
Z – register : 7 0 7 0
R31 R30

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Example
 Write a program to copy the value $55 into
memory locations $140 to $144
LDI R19,0x5 ;R19 = 5 (R19 for counter)
LDI R16,0x55 ;load R16 with value 0x55 (value to be copied)
LDI YL,0x40
YL,0x40 ;load the LDI
low byte of Y with value 0x40
YL,LOW(0x140)
LDI YH,0x1
YH,0x1 ;load the LDI
highYH,HIGH(0x140)
byte of Y with value 0x1
L1: ST Y,R16 ;copy R16 to memory location 0x140
INC YL ;increment the low byte of Y
DEC R19 ;decrement the counter
BRNE L1 ;loop until counter = zero

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Auto-increment and Auto decrement
 Register indirect addressing with Post-increment
 LD Rd, X+ 15
X, Y, OR Z - REGISTER
0 Data Space
0

 LD R20,X+
 ST X+, Rs 1 +

 ST X+, R8 RAMEND

 Register indirect addressing with Pre-decrement


 LD Rd, -X 15
X, Y, OR Z - REGISTER
0 Data Space
0

 LD R19,-X
+
ST –X,R31
-1

RAMEND

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Example
 Write a program to copy the value $55 into
memory locations $140 to $144
LDI R19,0x5 ;R19 = 5 (R19 for counter)
LDI R16,0x55 ;load R16 with value 0x55 (value to be copied)
LDI YL,LOW($140) ;load the low byte of Y with value 0x40
LDI YH,HIGH($140) ;load the high byte of Y with value 0x1
L1: ST Y+,R16 ;copy R16 to memory location Y
DEC R19 ;decrement the counter
BRNE L1 ;loop until counter = zero

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Register indirect with displacement
 STD Z+q,Rr ;store Rr into location Z+q
 STD Z+5,R20 ;store R20 in location Z+5
 LDD Rd, Z+q ;load from Z+q into Rd
 LDD R20, Z+8 ;load from Z+8 into R20

15 0 Data Space
Y OR Z - REGISTER 0

+
15
Op. Rr/Rd q
15 10 6 5 0
RAMEND

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Storing fixed data in flash memory
DATA1: .DB 28 ;DECIMAL(1C in hex)
DATA2: .DB 0b00110101 ;BINARY (35 in hex)
DATA3: .DB 0x39 ;HEX
DATA4: .DB 'Y' ;single ASCII char
DATA6: .DB "Hello ALI" ;ASCII string

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Storing fixed data in flash memory
LPM Rd, Z
Program Memory
 15 10
LSB
0
Z - REGISTER

 LPM R15, Z 15

 Example:
 LDI R30,0x80
 LDI R31,0
FLASHEND
15
Low High Address Low High 8 Address
7 0

 LPM R18,Z ;read from the low byte of loc 0x40


0000 0000 0000 0000 $0000
0000 0000 0000 0001 $0001 $0000
0000 0000 0000 0000

0000 0000 0000 0010 $0002


0000 0000 0000 0011 $0003 $0001
0000 0000 0000 0001

 LPM Rd, Z+
0000 0000 0000 0100

0000 0000 0000 0110


0000 0000 0000 0101

0000 0000 0000 0111


0000 0000 0000 0010

0000 0000 0000 0011


$0004
$0006
$0005
$0007
$0002
$0003

 LPM R20,Z
0000 0000 0000 1000

0000 0000 0000 1010


0000 0000 0000 1001

0000 0000 0000 1011


0000 0000 0000 0100

0000 0000 0000 0101


$0008
$000A
$0009
$000B
$0004
$0005
…..

…..

1111 1111 1111 1100 1111 1111 1111 1101 0111 1111 1111 1110 $FFFC $FFFD $7FFE
1111 1111 1111 1110 1111 1111 1111 1111 0111 1111 1111 1111 $FFFE $FFFF $7FFF

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Example
 Analyze the following program; then rewrite it using LPM R20,Z+

.ORG $0000 ;burn into ROM starting at 0


LDI R20,0xFF
OUT DDRB,R20 ;make PB an output
LDI ZL, LOW(MYDATA<<1) ;ZL = 0 look-up table low-byte addr
LDI ZH,HIGH(MYDATA<<1) ;ZH = 0A look-up table high-byte addr
LPM R20,Z LPM R20,Z+
OUT PORTB,R20 ;send itOUT
to Port B
PORTB,R20
INC ZL ;R30 = 01 pointing to next byte (A01)
LPM R20,Z ;load R20
LPMwith 'S' char pointed to by Z
R20,Z+
OUT PORTB,R20 ;send itOUT
to Port B
PORTB,R20
INC ZL ;R30 = 02 pointing to next (A02)
LPM R20,Z ;load R20 with 'A' char pointed to by Z
OUT PORTB,R20 ;send it to Port B
HERE: RJMP HERE ;stay here forever
;data is burned into code(program) space starting at $500
.ORG $500
MYDATA: .DB "USA"
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Example
 Assume that ROM space starting at $500 contains the
message “The Promise of World Peace”. Write a program
to bring it into CPU one byte at a time and place the
bytes in RAM locations starting at $140.
.ORG 0 ;burn into ROM starting at 0
LDI ZL, LOW(MYDATA<<1) ;R30 = 00 low-byte addr
LDI ZH, HIGH(MYDATA<<1) ;R31 = 0A, high-byte addr
LDI XL, LOW(0x140) ;R26 = 40, low-byte RAM address
LDI XH, HIGH(0x140) ;R27 = 1, high-byte RAM address
AGAIN: LPM R16, Z+ ;read the table, then increment Z
CPI R16,0 ;compare R16 with 0
BREQ END ;exit if end of string
ST X+, R16 ;store R16 in RAM and inc X
RJMP AGAIN
END: RJMP END
.ORG 0x500 ;data burned starting at 0x500
MYDATA: .DB "The Promise of World Peace",0
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Macro

.MACRO INITSTACK
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
.ENDMACRO

INITSTACK

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Macro
.MACRO LOADIO
LDIR20,@1
OUT @0,R20
.ENDMACRO

LOADIO DDRB,0xFF
LOADIO PORTB,0x55

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
EEPROM
EEPROM is a place to store data. It is not deleted
EEPROM Address Register
 EEPROM Data Register
when power
Bit 15isEEPROM
off
14 13 Control
12 11Register
10 9 8
EEARH - - - - - - EEAR9 EEAR8

 ATmega32
EEARL has 1024 bytes of EEPROM
EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0

Bit 7 6 5 4 3 2 1 0
 In AVR 3 registers are dedicated to EEPROM
 EEARH:EEARL
 EEDR EECR

 EECR 15 0 0
EEARH EEARL

EEDR

1023
EEPROM
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Reading from EEPROM
 1. Wait until EEWE becomes zero.
 2. Write new EEPROM address to EEAR (optional)
 3. Set EERE to one.
 4. Read EEPROM data from EEDR.

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Writing into EEPROM
 1. Wait until EEWE becomes zero.
 2. Write new EEPROM address to EEAR
(optional).
 3. Write new EEPROM data to EEDR (optional).
 4. Set EEMWE bit to one.
 5. Within four clock cycles after setting EEMWE,
set EEWE to one.

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Checksum
 To detect data corruption
 Calculating checksum byte:
 Add the bytes together and drop the carries
 Take the 2’s complement of the total sum
 Testing checksum
 Add the bytes together and drop the carries
 Add the checksum byte to the sum
 If the result is not zero, data is corrupted

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Example
 Find the checksum byte for the followings:
$25, $62, $3F, $52
Solution:
$25
+ $62
+ $3F
+ $52
$1 18
Checksum byte = 2’s complement of $18 = $E8

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Example
 The checksum byte is $E8. Test checksum for the
following data:
$25, $62, $3F, $52
Solution:
$25
+ $62
+ $3F
+ $52
+ $E8
$00  not corrupted
AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.

You might also like