Sida 1 av 1

Problem läsa från tabell i AVR assembler (löst)

Postat: 7 januari 2008, 16:58:18
av primus
Hej!

Jag vill läsa värden ur en tabell i assebler för AVR (ATMEGA168), men jag får det inte att fungera.

Så här har jag tänkt:

Skapa en tabell med värden.
Ladda in tabellens adress i register X.
Läs av det värde som ligger på adressen som X pekar på, och spara det i t ex R16 (register16).

Så här ser min kod ut:

Kod: Markera allt

.include "m168def.inc"	

.org 0x0000
	rjmp main
;*********************************************************
main:
	ldi R16, 0xFF
	out DDRD, R16
	ldi R16, 0x00
	out PORTD,R16
	clr XH
	ldi XL, low(SIFFROR) ; ladda X med adressen till SIFFROR
	ld R16, X		; läs första siffran från tabellen
	out PORTD, R16	; visa på display
loop:
	nop
	rjmp loop
;*********************************************************

; "7-segmentskod" för de olika siffrorna
SIFFROR: .DB 0x6F,0x06,0xAB,0x8F,0xC6,0xCD,0xED,0x07,0xEF,0xCF,0xE7,0xEC,0x69,0xAE,0xE9,0xE1
När jag kör det i simulatorn så laddas inte R16 med något värde, även fast X innehåller adressen till tabellen. Vad är felet?

Postat: 7 januari 2008, 17:14:49
av primus
ok, löste problemet själv :D

Kod: Markera allt

.include "m168def.inc"	

.org 0x0000
	rjmp main
;*********************************************************
main:
	ldi R16, 0xFF
	out DDRD, R16
	ldi R16, 0x00
	out PORTD,R16
	ldi ZH, high(SIFFROR*2)
	ldi ZL, low(SIFFROR*2) ; load X with adress to SIFFROR array
	lpm R16, Z		; load first digit from array
	out PORTD, R16	; show in segment display	
loop:
	nop
	rjmp loop
;*********************************************************

; "7-segmentskod" för de olika siffrorna
SIFFROR: .DB 0x6F,0x06,0xAB,0x8F,0xC6,0xCD,0xED,0x07,0xEF,0xCF,0xE7,0xEC,0x69,0xAE,0xE9,0xE1