Anda di halaman 1dari 23

Bab 3: Arsitektur

Mikrokontroler AVR
Mikroprosesor dan Antarmuka
Oleh: Amin Suharjono
Topics
 AVR’s CPU
- Its architecture
- Some simple programs
 Data Memory access
 Program memory
 RISC architecture
RAM EEPROM Timers

PROGRAM
Flash ROM

Program Data
Bus Bus
CPU

Interrupt Other
OSC Ports
Unit Peripherals

I/O
PINS

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


AVR’s CPU
 AVR’s CPU
- ALU
- 32 General Purpose registers R0
(R0 to R31) R1
ALU
- PC register R2


- Instruction decoder
SREG: N Z
- Status Register I T H S V C
R15

CPU R16
R17


PC

R30
Instruction decoder
R31
Instruction Register
registers

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Some simple instructions
1. Loading values into the general purpose registers
LDI (Load Immediate)
 LDI Rd, k
- Its equivalent in high level languages:
Rd = k
 Example:
- LDI R16,53
- R16 = 53 R0
ALU R1
- LDI R19,132 R2
- LDI R23,0x27


- R23 = 0x27 SREG: I T H S V N Z C
R15

CPU R16
R17


PC
R30
Instruction decoder
R31
Instruction Register
registers

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Some simple instructions
2. Arithmetic calculation
 There are some instructions for doing Arithmetic and logic operations;
such as:
ADD, SUB, MUL, AND, etc.
 ADD Rd,Rs
R0
- Rd = Rd + Rs R1
ALU
- Example: R2


- ADD R25, R9 SREG: I T H S V N Z C
- R25 = R25 + R9 R15

- ADD R17,R30 CPU R16


R17
- R17 = R17 + R30


PC
R30
Instruction decoder
R31
Instruction Register
registers

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


A simple program

 Write a program that calculates 19 + 95

LDI R16, 19 ;R16 = 19


LDI R20, 95 ;R20 = 95
ADD R16, R20 ;R16 = R16 + R20

R0
ALU R1
R2


SREG: I T H S V N Z C
R15

CPU R16
R17


PC
R30
Instruction decoder
R31
Instruction Register
registers

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


A simple program

 Write a program that calculates 19 + 95 + 5

LDI R16, 19 ;R16 = 19


LDI R20, 95 ;R20 = 95
LDI R21, 5 ;R21 = 5
ADD R16, R20 ;R16 = R16 + R20
ADD R16, R21 ;R16 = R16 + R21

LDI R16, 19 ;R16 = 19


LDI R20, 95 ;R20 = 95
ADD R16, R20 ;R16 = R16 + R20
LDI R20, 5 ;R20 = 5
ADD R16, R20 ;R16 = R16 + R20

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Some simple instructions
2. Arithmetic calculation
 SUB Rd,Rs
- Rd = Rd - Rs
 Example:
- SUB R25, R9
- R25 = R25 - R9
- SUB R17,R30
- R17 = R17 - R30 R0
ALU R1
R2


SREG: I T H S V N Z C
R15

CPU R16
R17


PC
R30
Instruction decoder
R31
Instruction Register
registers

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


R0 thru R15

 Only registers in the range R16 to R31 can be loaded immediate. We


cannot load a constant into the registers R0 to R15 directly. It would
have to be loaded into a valid register first then copied. To load the value
of 10 into register zero (R0):
Code:

LDI R16,10 ;Set R16 to value of 10
MOV R0,R16 ;Copy contents of R16 to R0

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Some simple instructions
2. Arithmetic calculation
 INC Rd
- Rd = Rd + 1
 Example:
- INC R25
- R25 = R25 + 1

 DEC Rd R0
ALU R1
- Rd = Rd - 1 R2
 Example:


SREG: I T H S V N Z C
- DEC R23 R15
- R23 = R23 - 1
CPU R16
R17


PC
R30
Instruction decoder
R31
Instruction Register
registers

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Address Address Address
Data Address Space
I/O
$00
Mem.
$20
Name
TWBR
I/O
$16
Mem.
$36
Name
PINB
I/O
$2B
Mem.
$4B
Name
OCR1AH
$01 $21 TWSR $17 $37 DDRB $2C $4C TCNT1L
$02 $22 TWAR $18 $38 PORTB $2D $4D TCNT1H
$03 $23 TWDR $19 $39 PINA $2E $4E TCCR1B
$04 $24 ADCL $1A $3A DDRA $2F $4F TCCR1A
$05 $25 ADCH $1B $3B PORTA $30 $50 SFIOR
$06 $26 ADCSRA $1C $3C EECR OCDR
$07 $27 ADMUX $1D $3D EEDR $31 $51 General RAM EEPROM Timers
OSCCAL
$08 $28 ACSR $1E $3E EEARL $32 $52 Purpose
TCNT0
$09 $29 UBRRL $1F $3F PROGRAM
EEARH $33 $53 Registers
TCCR0
$0A $2A UCSRB UBRRCROM $34 $54 MCUCSR
$20 $40
$0B $2B UCSRA UBRRH $35 $55 MCUCR
Program CPU
$0C $2C UDR $21 $41 WDTCR $36 $56 TWCRData
$0D $2D SPCR $22 $42 ASSR Bus
$37 $57 SPMCRBus address bus
$0E $2E SPSR $23 $43 OCR2 $38 $58 TIFR data bus
control bus
$0F $2F SPDR $24 $44 TCNT2 $39 $59 TIMSK Data
$10 $30 PIND $25 $45 TCCR2 $3A $5A GIFR
$11 $31 DDRD 8 bit
$26 $46 ICR1L $3B $5B GICR
Bus
Data Address
$12 $32 PORTD $27R0 $47 ICR1H $3C $5C OCR0
Space
$13 $33 PINC $28R1 $48 OCR1BL $3D $5D SPL
$14
$0000 $34 DDRC $29R2 $49 OCR1BH $3E $5E SPH Interrupt Other
$0001 $35
$15 General
PORTC OSC Ports
$2A $4A OCR1AL $3E $5E SREG Unit Peripherals
...

Purpose
...

Registers R31
$001F I/O Address I/O
$0020 Example:
TWBR
TWSR
$00 Add contents
$01
of location
Example: 0x90
Store to contents
0x53 into PINS of location
the SPH 0x95
register.
Standard I/O Example:
and store What doesinthe
the result following
location
The
LDS
STS (Load
(Store instruction
0x313.
address of SPH
direct do?space)
isdata
from
direct to 0x5E
data space)
Example: Write a program that stores 55 into location 0x80 of RAM.
...
...

Registers Example: Write a program that copies the contents of location 0x80
$005F LDS
SPH
of RAM
SREG
$3E
R20,2
Solution:
into location 0x81.
$3F
$0060 LDS
STS Rd, addr ;[addr]=Rd
addr,Rd ;Rd = [addr]
General LDS R20, 0x90 Solution: ;R20 = [0x90]
purpose Solution:
Answer:
...

RAM
LDS R20,
LDI R21, 55
0x95 LDI =;R21
Example:
;R20 R20,= 0x53
55 [0x95] ;R20 = 0x53
(SRAM) Solution:
It copies
ADD the contents
R20, R21 of
STSR2 ;R20
into R20;
0x5E,= R20
R20as+ 2R21
is the;SPH
address
= R20of R2.
STS 0x80, R20
LDS R20, 0x80 LDS;[0x80]
STS R1, =
;R20 R20
0x60
0x60,R15 = 55
= [0x80]
; [0x60] = R15
STS 0x313, R20 ;[0x313] = R20
STS 0x81, R20 ;[0x81] = R20 = [0x80]
$FFFF

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Data Address Space

General RAM EEPROM Timers


Purpose
PROGRAM
Registers
ROM

Program CPU Data


Bus Bus address bus
data bus
control bus
Data
8 bit Bus
Data Address
R0
Space
Example:
R1
R2
Write a program that adds the contents of the PINC IO
$0000 Other
$0001 General register to the contents of
OSCPIND andInterrupt
stores the result
Unit
Ports in location 0x90
Peripherals
...

Purpose of the SRAM OUT


IN (IN(OUT toIO
from IOlocation)
location)
...

Registers R31
$001F I/O Address I/O
$0020 TWBR
Solution:
$00
OUT IOAddr,Rd
PINS
;[addr]=Rd
Standard I/O
TWSR $01
IN Rd,IOaddress
Using Names of;Rd
IO = [addr]
registers
...
...

Registers
SPH $3E
IN R20,PINC ;R20 = PINC
$005F SREG $3F
$0060
IN R21,PIND Example:
;R21 = PIND
General Example:
purpose
...

ADD R20,R21 ;R20 =


OUT R20 + R21;OUT 0x3E,R12
IN SPH,R12
RAM
(SRAM) OUTR1,0x3F,R12
0x3F ;R1 ;SREG = R12
= SREG
STS 0x90,R20 ;[0x90]
IN = R20
R15,SREG ;IN R15,0x3F
OUT 0x3E,R15;R17
IN R17,0x3E ;SPH = R15
= SPH
$FFFF

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Status Register (SREG)
SREG: I T H S V N Z C
Carry
Interrupt oVerflow Zero
Temporary Negative
Sign
Data Address
Half carry N+V Space
Example:Show
Example:
Example:
Example: Showthe
Show
Show thestatus
the
the status of
status
status ofthe
of
of theC,
the
the C,H,
C,
C, H,$0000
H,
H, andZZ
and
and
and ZZflags
flagsafter
flags
flags afterthe
after
after theaddition
the
the addition
$0001 General
subtraction
subtraction
of
of 0x9C of
of 0x9C
0x23
0x73 from
from
from 0x9C
0xA5
0x52 in
in the
the following
following
0x64 in the following instructions:
0x38 and 0x2F instructions:
instructions:
Purpose

...
LDI LDILDI 0x38
LDI
R16, R20, 0x9C
R20,
R20, 0x9C
0xA5
0x52;R16 = 0x38 Registers
R0 $001F IO Address
ALU LDI LDI 0x2F
LDI
LDI
R17, R21,
R21,
R21, 0x9C
0x23
0x73
R1 0x64
;R17 = $0020
0x2F TWBR $00
TWSR $01
R2 Standard IO
ADD SUB R17R20,
SUB
ADD
R16, R20, R21
R20, R21;add R17;add
R21 ;subtract
;subtract
R21 toR21
to Registers
R16 R21 from R20
R20from R20

...
...

SPH $3E
SREG: I T H S V N Z C
Solution:
Solution:
Solution: R15 11
$005F SREG $3F
Solution:
CPU $52
$9C
$A5
$38
$9C
- $23
$73
0101
R16
0011
1001
0111
0010
1001 1100
1010 1100
0101
1000
R17 0011
$0060
General
purpose
...
+-- +$64
$9C
$2F 10010100
0010
0110 1100
0011
1111 RAM
$DF 1101 1111 R20 = $DF

PC $00
$82
$67 0000
1000
0110 0000
0010
0111 R20
R20
R16 = $00
= 00
$82
0x67
$100 1 0000 0000 R20 =
(SRAM)
C = 1 because R21 is bigger than R20 and there is a borrow from D8 bit.
CC===100because
C becausethere
because R21 is
R21 is not
isnot bigger
bigger
a carry
R30 than R20
than
beyond R20 andbit.
and
the D7 there is
there is no
no borrow
borrow from
from D8
D8 bit.
bit.
Z
C == 00 decoder
because
because the
thereR20
is has
no a value
carry otherthe
beyond than
D7zero after the subtraction.
Instruction
ZZ =
H == 1
01 because
because there
because the R20
the R20 iscarry
is ahaszero after
a value
from the D3
other
the than 0 bit.
subtraction.
to theafter the subtraction.
D4 bit.
H = 1 because there isR31 a borrow
carry from
from D4D3
the toto
D3.
the D4 bit.
ZH
H =
= 00 because
because there
there is
is no
no borrow
borrow from
from D4
D4 to
to D3.
D3.
Z = 0 because the R16 (the result) has a value 0other
= 1 because
Instruction Register the R20 (the
registers
result) has a value in it after
than 0the addition.
after the addition.
$FFFF

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Writing Immediate Value to SRAM

 You cannot copy immediate value directly into SRAM location in AVR.
 This must be done via GPRs
 Example: The following program adds content of location 0x220 to
location 0x221

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Example 2-1

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Example 2- 2

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Example 2- 3

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Example 2- 4

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Problems (1)

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Problems (2)

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Problems (3)

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Problems (4)

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id


Terima Kasih

Amin Suharjono

Mikroprosesor dan Antarmuka – amin.suharjono@polines.ac.id 23