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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
primus
Inlägg: 2
Blev medlem: 7 januari 2008, 16:33:20
Ort: Göteborg

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

Inlägg 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?
Senast redigerad av primus 7 januari 2008, 17:26:22, redigerad totalt 1 gång.
primus
Inlägg: 2
Blev medlem: 7 januari 2008, 16:33:20
Ort: Göteborg

Inlägg 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
Skriv svar