ATmega Chap4 Assembly Programming
ATmega Chap4 Assembly Programming
Chapter 4
Assembly Language
How to write a program
• […]: optional
• Op: operand
• Example:
➢LOOP: INC R1 ; R1 R1 + 1
➢ LDI R16,20 ; R16 20
➢ BREQ LOOP ; LOOP is name of label, Operand1
Nguyễn Trung Hiếu 2
Instruction Format
.ORG 0
.EQU COUNTER = $A0
.EQU MYADDR1=$08
.SET MYADDR2 = 0x18
LDI R26,MYADDR1 ;R26=$08
LDI R27,MYADDR2 ;R27=$18
LDI R16, COUNTER ;R16 = 0xA0
.SET MYADDR2=0X0B ;redefine MYADDR2=$0B
OUT MYADDR1,R16 ;MYADDR1≡PORTC=0xA0
OUT MYADDR2,R16 ;MYADDR2≡PORTD=0xA0
• Arithmetic
• Logical
• Boolean variable
Conditional and
Call, return
Unconditional Jump
.ORG $0
LDI R16,$20
STS $200,R16
STS $201,R16
STS $202,R16 17 lần
STS $203,R16
…
.ORG $0
(Ptr) R16
LDI R16,$20
LDI R17,17
LDI ZH,HIGH($200) Ptr Ptr+1
LDI ZL,LOW($200)
Again: ST Z+,R16 LoopLoop-1
DEC R17
BRNE Again N
Loop=0?
Z=0
SIMILAR TO FOR LOOPS Z=1
Y
Nguyễn Trung Hiếu 27
Creating a Loop (3)
Viết chương trình thực hiện ghi giá trị $20
vào bộ nhớ SRAM từ ô nhớ $200 đến
$210 R16 $20
Loop 17
.ORG $0
LDI R17,$30 R16 (Ptr)
LDI ZH,HIGH($200)
LDI ZL,LOW($200) R16 R16+R17
LDI R18,17
Again: LD R16,Z (Ptr) R16
ADD R16,R17
ST Z+,R16 Ptr Ptr+1
DEC R18
Loop Loop - 1
BRNE Again
N
Loop=0?
Nguyễn Trung Hiếu
Z=0 31
Y Z=1
R17 $30
Solutions (2)
Ptr $200
Viết chương trình thực hiện xóa thanh ghi R1, sau đó thực
hiện cộng cho R1 số 10 năm lần liên tiếp
Solution:
CLR R1
LDI R16,10
LDI R17,5
AGAIN: ADD R1,R16
DEC R17
BRNE AGAIN
Nguyễn Trung Hiếu 35
Timing Program
CLR R1 ; 1 MC
LDI R16,10 ; 1 MC
LDI R17,5 ; 1 MC
AGAIN: ADD R1,R16 ; 1 MC
DEC R17 ; 1 MC
BRNE AGAIN ; True – 2 MCs
; False – 1 MC
CLR R1 ; 1 MC
1 time LDI R16,10 ; 1 MC
LDI R17,5 ; 1 MC
AGAIN: ADD R1,R16 ; 1 MC
5 times DEC R17 ; 1 MC
4 times T BRNE AGAIN ; True – 2 MCs
1 time F
; False – 1 MC
Total time = (1 + 1 + 1).1 + (1 + 1).5 + 2.4 + 1 = 22 MCs
Or = (1 + 1 + 1).1 + (1 + 1 + 2).5 - 1 = 22 MCs
If fMC = 1 MHz → TMC = 1 µs → Total time = 22 µs
Nguyễn Trung Hiếu 37
Blinky Program
PC0 1
Delay
PC0 0
Delay
DELAY: PC0 0
LDI R21,100
L1: LDI R20,250
L2: NOP Delay
DEC R20
BRNE L2
DEC R21
BRNE L1 → Waveform? Period? Frequency?
RET
Nguyễn Trung Hiếu 39
Blinky Program
.ORG 0
SBI DDRC,0
DELAY:
LDI R21,100
L1: LDI R20,250
L2: NOP ; 1 MC
DEC R20 ; 1 MC 250x(1+1+2) – 1 = 999 MCs
BRNE L2 ; 2/1 MC
DEC R21
BRNE L1
RET
Nguyễn Trung Hiếu 40
Blinky Program
.ORG 0
SBI DDRC,0
DELAY:
LDI R21,100
L1: LDI R20,250 ; 1 MC
L2: NOP ; 1 MC
DEC R20 ; 1 MC 100x(999+1+1+2) – 1
BRNE L2 ; 2/1 MC = 100299 MCs
DEC R21 ; 1 MC
BRNE L1 ; 2/1 MC
RET
Nguyễn Trung Hiếu 41
Blinky Program
.ORG 0
SBI DDRC,0
DELAY:
LDI R21,100 ; 1 MC
L1: LDI R20,250 ; 1 MC
L2: NOP ; 1 MC
DEC R20 ; 1 MC 100299 + 1 + 4
BRNE L2 ; 2/1 MC = 100304 MCs
DEC R21 ; 1 MC
BRNE L1 ; 2/1 MC
RET ; 4 MC
Nguyễn Trung Hiếu 42
Blinky Program
.ORG 0
SBI DDRC,0
DELAY:
LDI R21,100 ; 1 MC
L1: LDI R20,250 ; 1 MC
L2: NOP ; 1 MC
DEC R20 ; 1 MC 100299 + 1 + 4
BRNE L2 ; 2/1 MC = 100304 MCs
DEC R21 ; 1 MC
BRNE L1 ; 2/1 MC
RET ; 4 MC
Nguyễn Trung Hiếu 43
Blinky Program
.ORG 0
SBI DDRC,0
Delay tL
tH tL
DELAY: 4 MCs
LDI R21,100 PC0 1
L1: LDI R20,250 ; 1 MC
L2: NOP ; 1 MC
DEC R20 ; 1 MC Delay tH
BRNE L2 ; 2/1 MC
DEC R21 ; 1 MC
BRNE L1 ; 2/1 MC PC0 0
RET
Delay tL
PC0 1
tH tL
T
Delay tH
tH = tL
PC0 0
Delay tL
DELAY:
LDI R20,100
L1: NOP ; 1 MC
DEC R20 ; 1 MC
BRNE L1 ; 2/1 MC
RET
tH tL
Delay tH
T
Delay tL
N CP R16,R17
R16 = R17?
Z=0 BRNE Skip
Z=1 (Statement 1)
Y
Statement 1 Skip: (Continue)
N
CPI R16,$05
R16 = $05?
Z=0 BRNE Not_Eq
Z=1 (Statement 1)
Y
Statement 2 Statement 1 RJMP Next
Not_Eq: (Statement 2)
Next: (Continue)
CPI R16,$05
N
R16 ≥ $05? BRCC LessThan
C=1
(Statement 1)
C=0
Y LessThan: (Continue)
Statement 1
CPI R16,$05
N
R16 < $05? BRCS GrEqThan
C=0
(Statement 1)
C=1
Y GrEqThan: (Continue)
Statement 1
.ORG $0 LessThan:
LDI R16,$FF NEQ R16
OUT DDRA,R16 RJMP NEXT
CPI R16,5 GrEgThan:
BRCC LessThan COMP R16
CPI R16,11 NEXT: OUT PORTA,R16
BRCS GrEqThan NOP
N
CPI R16,$05
R16 ≥ $05? BRCC LessThan
C=1 (Statement 1)
C=0
Y RJMP Next
Statement 2 Statement 1 LessThan: (Statement 2)
Next: (Continue)
N
CPI R16,$05
R16 < $05? BRCS GrEqThan
C=0 (Statement 1)
C=1
Y RJMP Next
Statement 2 Statement 1 GrEqThan: (Statement 2)
Next: (Continue)
Y SBRC R16,0
R16(0)=0?
(Statement 1)
(Continue)
N
Statement 1
Y
SBRS R16,0
R16(0)=1?
RJMP BitSet
N (Statement 2)
Statement 2 Statement 1 RJMP Next
BitSet: (Statement 1)
Next: (Continue)