presentation_FND(assembly)

Download Report

Transcript presentation_FND(assembly)

Code description
FND(assembly)
20072413 박민호
Code main
FND
LOOP:
LDI
STS
LDI
STS
R16, 0xFF
DIG_SELECT, R16
R16, 0xFF
FND_DATA, R16
;R16 = 0xFF
;FND_CS = R16
;R16 = 0xFF
;FND_DATA = R16
LDI
R17, 0x00
;R17 = 0x00
MOV
CALL
STS
CALL
INC
CPI
BRNE
R16, R17
BIN2LED
FND_DATA, R16
D50MS
R17
R17, 0x10
LOOP1
;R16 = R17
;call BIN2LED subroutine
;FND_DATA = R16
;call D50MS subroutine
;R17++
;(R17==0x10)?
;다르면 goto LOOP1
LDI
CALL
STS
CALL
R16, 'H'
BIN2LED
FND_DATA, R16
D50MS
;R16 = 'H'
;call BIN2LED subroutine
;FND_DATA = R16
;call D50MS subroutine
LDI
CALL
STS
CALL
R16, '-'
BIN2LED
FND_DATA, R16
D50MS
;R16 = '-'
;call BIN2LED subroutine
;FND_DATA = R16
;call D50MS subroutine
LDI
CALL
STS
CALL
R16, '.'
BIN2LED
FND_DATA, R16
D50MS
;R16 = '.'
;call BIN2LED subroutine
;FND_DATA = R16
;call D50MS subroutine
LDI
CALL
STS
CALL
R16, '''
BIN2LED
FND_DATA, R16
D50MS
;R16 = '''
;call BIN2LED subroutine
;FND_DATA = R16
;call D50MS subroutine
JMP
LOOP
;goto LOOP
LOOP1:
출처 : 수업자료
Code bin2led
FND
BIN2LED:
FND_TABLE:
PUSH
PUSH
PUSH
CPI
BRNE
LDI
RJMP
R17
ZH
ZL
R16, 'H'
BIN2L1
R16, 0x10
BIN2L4
0b11000000, 0b11111001
; 0,
.db
0b10100100, 0b10110000
; 2,
.db
0b10011001, 0b10010010
; 4,
.db
0b10000010, 0b11011000
; 6,
.db
0b10000000, 0b10010000
; 8,
.db
0b10001000, 0b10000011
; a,
.db
0b11000110, 0b10100001
; c,
.db
.db
0b10000110, 0b10001110
0b10001001, 0b10111111
; e, f
; H,
3
5
BIN2L1:
7
CPI
BRNE
LDI
RJMP
R16, '-'
BIN2L2
R16, 0x11
BIN2L4
9
b
d
...
BIN2L4:
LDI
LDI
LDI
ADD
CLR
ADC
ADC
OUT
LPM
POP
POP
POP
RET
출처 : 수업자료
.db
1
R17, byte3(FND_TABLE << 1)
ZH, high(FND_TABLE << 1)
ZL, low(FND_TABLE << 1)
ZL, R16
R16
ZH, R16
R17, R16
RAMPZ, R17
R16, Z
ZL
ZH
R17
.db
0b01111111, 0b11111111
RAMPZ 레지스터와 함께 z-pointer를 초기화해주기 위한 작업이다.
여기서는 LPM을 사용하므로, RAMPZ가 필요없다.
따라서
LDI
ADC
OUT
R17,바이트
byte3(FND_TABLE<<1)
;첫 번째
더한 캐리를 두 번째 바이트에 더함
R17,바이트
R16 더한 캐리를 세 번째 바이트에 더함
;두 번째
RAMPZ,
R17 캐리를 RAMPZ set하는데 사용
;세 번째로
올라온
이 세 줄은 없어도 상관없음!!
; ., '
Sstate in
memory
FND
Low
High
Address
Low
High
0000 0000 0000 0000
0000 0000 0000 0001
0000 0000 0000 0000
$0000
$0001
$0000
0000 0000 0000 0010
0000 0000 0000 0011
0000 0000 0000 0001
$0002
$0003
$0001
0000 0000 0000 0100
0000 0000 0000 0101
0000 0000 0000 0010
$0004
$0005
$0002
0000 0000 0000 0110
0000 0000 0000 0111
0000 0000 0000 0011
$0006
$0007
$0003
0000 0000 0000 1000
0000 0000 0000 1001
0000 0000 0000 0100
$0008
$0009
$0004
0000 0000 0000 1010
0000 0000 0000 1011
0000 0000 0000 0101
$000A
$000B
$0005
0000 0000 0000 0000
High
Address
Low
High
0000 0000 0000 0001
0000 0000 0000 0000
$0000
$0001
…..
…..
Low
2x
0000 0000 0000 0010 0000 0000 0000 0011
0000 0000 0000 0001
1111 1111 1111 1100 1111 1111 1111 1101
0111 1111 1111 1110
0000 0000 0000 0100 0000 0000 0000 0101
0000 0000 0000 0010
1111 1111 1111 1110 1111 1111 1111 1111
0111 1111 1111 1111
0000 0000 0000 0110 0000 0000 0000 0111
0000 0000 0000 0011
FND_TABLE:
Address
$FFFC
$FFFE
Address
$0000
$0001
$0002
$0003
$FFFD $7FFE
$0002
$0004
$0005
$FFFF $7FFF
$0003
$0006
$0007
0000 0000 0000 0100
$0008
$0009
$0004
0000 0000 0000 1010
0000 0000 0000 1011
0000 0000 0000 0101
$000A
$000B
$0005
.db
0b11000000, 0b11111001
.db
0b10100100, 0b10110000
.db
0b10011001, 0b10010010
.db
0b10000010, 0b11011000
.db
0b10000000, 0b10010000
1111 1111 1111 1100
1111 1111
1111 1101
.db
0b10001000,
0b10000011
.db
0b11000110, 0b10100001
1111 1111 1111 1110 1111 1111 1111 1111
.db
0b10000110, 0b10001110
.db
0b10001001, 0b10111111
.db
0b01111111, 0b11111111
; 0, 1
; 2, 3
; 4, 5
; 6, 7
; 8, 9
0111
; a,1111
b 1111 1110
; c, d
0111 1111 1111 1111
; e, f
; H, ; ., '
$FFFC
$FFFD
$7FFE
$FFFE
$FFFF
$7FFF
…..
0000 0000 0000 1001
…..
0000 0000 0000 1000
FND
Thank
you
Q&A