fnd(assembly)

5
FND(assembly) Code description 20072413 박박박

Upload: aulii

Post on 05-Jan-2016

24 views

Category:

Documents


1 download

DESCRIPTION

FND(assembly). Code description. 20072413 박민호. Code - main. FND. LOOP: LDIR16, 0xFF;R16 = 0xFF STSDIG_SELECT, R16;FND_CS = R16 LDIR16, 0xFF;R16 = 0xFF STSFND_DATA, R16;FND_DATA = R16 LDIR17, 0x00;R17 = 0x00 LOOP1: MOVR16, R17;R16 = R17 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: FND(assembly)

FND(assembly)Code description

20072413 박민호

Page 2: FND(assembly)

FNDCode - main

출처 : 수업자료LOOP:

LDI R16, 0xFF ;R16 = 0xFFSTS DIG_SELECT, R16 ;FND_CS = R16LDI R16, 0xFF ;R16 = 0xFFSTS FND_DATA, R16 ;FND_DATA = R16

LDI R17, 0x00 ;R17 = 0x00LOOP1:

MOV R16, R17 ;R16 = R17CALL BIN2LED ;call BIN2LED subroutineSTS FND_DATA, R16 ;FND_DATA = R16CALL D50MS ;call D50MS subroutineINC R17 ;R17++CPI R17, 0x10 ;(R17==0x10)?BRNE LOOP1 ; 다르면 goto LOOP1

LDI R16, 'H' ;R16 = 'H'CALL BIN2LED ;call BIN2LED subroutineSTS FND_DATA, R16 ;FND_DATA = R16CALL D50MS ;call D50MS subroutine

LDI R16, '-' ;R16 = '-'CALL BIN2LED ;call BIN2LED subroutineSTS FND_DATA, R16 ;FND_DATA = R16CALL D50MS ;call D50MS subroutine

LDI R16, '.' ;R16 = '.'CALL BIN2LED ;call BIN2LED subroutineSTS FND_DATA, R16 ;FND_DATA = R16CALL D50MS ;call D50MS subroutine

LDI R16, ''' ;R16 = '''CALL BIN2LED ;call BIN2LED subroutineSTS FND_DATA, R16 ;FND_DATA = R16CALL D50MS ;call D50MS subroutine

JMP LOOP ;goto LOOP

Page 3: FND(assembly)

FNDCode - bin2led

출처 : 수업자료

BIN2LED: PUSH R17

PUSH ZHPUSH ZLCPI R16, 'H'BRNE BIN2L1LDI R16, 0x10RJMP BIN2L4

BIN2L1:CPI R16, '-'BRNE BIN2L2LDI R16, 0x11RJMP BIN2L4

...

BIN2L4:LDI R17, byte3(FND_TABLE << 1)LDI ZH, high(FND_TABLE << 1)LDI ZL, low(FND_TABLE << 1)ADD ZL, R16CLR R16ADC ZH, R16ADC R17, R16OUT RAMPZ, R17LPM R16, ZPOP ZLPOP ZHPOP R17RET

FND_TABLE:.db 0b11000000, 0b11111001 ; 0,

1.db 0b10100100, 0b10110000 ; 2,

3.db 0b10011001, 0b10010010 ; 4,

5.db 0b10000010, 0b11011000 ; 6,

7.db 0b10000000, 0b10010000 ; 8,

9.db 0b10001000, 0b10000011 ; a,

b.db 0b11000110, 0b10100001 ; c,

d.db 0b10000110, 0b10001110 ; e, f.db 0b10001001, 0b10111111 ; H,

-.db 0b01111111, 0b11111111 ; ., '

; 첫 번째 바이트 더한 캐리를 두 번째 바이트에 더함; 두 번째 바이트 더한 캐리를 세 번째 바이트에 더함; 세 번째로 올라온 캐리를 RAMPZ set 하는데 사용

RAMPZ 레지스터와 함께 z-pointer 를 초기화해주기 위한 작업이다 .여기서는 LPM 을 사용하므로 , RAMPZ 가 필요없다 .따라서

LDI R17, byte3(FND_TABLE<<1)ADC R17, R16OUT RAMPZ, R17

이 세 줄은 없어도 상관없음 !!

Page 4: FND(assembly)

FNDSstate in memory

$0000 $0001

$0002 $0003

$0004 $0005

$0006 $0007

$0008 $0009

$000A $000B

Low High Address

$0000

$0001

$0002

$0003

$0004

$0005

$FFFC $FFFD

$FFFE $FFFF

$7FFE

$7FFF

0000 0000 0000 0000

Low High Address0000 0000 0000 0001 0000 0000 0000 0000

0000 0000 0000 00010000 0000 0000 0010 0000 0000 0000 0011

0000 0000 0000 0100 0000 0000 0000 0101 0000 0000 0000 0010

0000 0000 0000 00110000 0000 0000 0110 0000 0000 0000 0111

0000 0000 0000 1000 0000 0000 0000 1001 0000 0000 0000 0100

0000 0000 0000 01010000 0000 0000 1010 0000 0000 0000 1011

1111 1111 1111 1100 1111 1111 1111 1101 0111 1111 1111 1110

0111 1111 1111 11111111 1111 1111 1110 1111 1111 1111 1111

…..

…..

FND_TABLE:.db 0b11000000, 0b11111001 ; 0, 1.db 0b10100100, 0b10110000 ; 2, 3.db 0b10011001, 0b10010010 ; 4, 5.db 0b10000010, 0b11011000 ; 6, 7.db 0b10000000, 0b10010000 ; 8, 9.db 0b10001000, 0b10000011 ; a, b.db 0b11000110, 0b10100001 ; c, d.db 0b10000110, 0b10001110 ; e, f.db 0b10001001, 0b10111111 ; H, -.db 0b01111111, 0b11111111 ; ., '

2x

Page 5: FND(assembly)

Q&A

Thank youFND