konstanter i avr (AT90S2313)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

konstanter i avr (AT90S2313)

Inlägg av Rymdninja »

Hej...
Har ett litet problem med förljande kod

Kod: Markera allt

        .INCLUDE "2313def.inc"
	.LIST
	.ORG $00b
	.DSEG

charA:	
	.BYTE 0xff		;

	.CSEG
init:
	ldi r16, 0xFF
	out DDRB, r16; set port B to output all
	out DDRD, r16; set port D to output all
	ldi r16, 0x00	
	out PORTB, r16; disable all output on port B
	out PORTD, r16; disable all outputs on port D

	;; done initializing
bigLoop:
	lds r16,  charA    	; load Z register with charA
	out PORTD, r16		; send it to the port
	rjmp bigLoop		; now we do this again
Det jag har tänkt att göra är att skriva bokstäver på en vanlig 14 segments LED-display men jag får inte till det....

Alltså, borde inte alla pinnar på PORTD vara ettor efter out PORTD, r16 operationen?
Tanken är att lds r16, charA laddar register 16 med värdet som finns lagrat på addres charA....alla portar är bara noll :/

tack o hej
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

lds är gjort för sram och i/o register.
och inte för ladda från flash

exempel på hur man kan ladda från flashen

Kod: Markera allt

	ldi	ZH,high(tabell*2)			;pekar på flashen
	ldi	ZL,low(tabell*2)
	lpm										;ladar i från flashen till R0
	out	PORTD, R0

tabell:  .db     0x01,0x02,0x03,0x04	;den önskade tabellenl 
för jag antar att det du vill göra?
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

tack för det...jag kom fram till samma sak :)

Dock har jag en fråga....jag har inte luskat ut varför man multiplicerar addressen med 2???


Problemet är bara att min nuvarande kompilator påstår att 2313 inte har lpm open....men jag byternog kompilator ;)

EDIT: Jovisst....problemet med lpm var att 2313 enbart stöder varianten utan operander....
Senast redigerad av Rymdninja 17 september 2004, 16:52:53, redigerad totalt 1 gång.
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

om det är som i PIC så tar varje kolumn 2 instr vilket betyder att den raden som erixon visade är 8 instr lång. För att nå tex fyran och du skriver i 4 så ska den hoppa till plats 8 i minnet. Ungefär
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Det beror på att instruktioner är 16bitar och därför anges addresen till ett word iställe för byte...

och LPM arbetar med byte... så man måste "översätta" adressen

EagleSpirit:
4Byte är 4byte stor i AVR, delvis inget spill :)
Rymdninja
Inlägg: 330
Blev medlem: 15 december 2003, 13:41:25
Ort: Göteborg

Inlägg av Rymdninja »

aha...då hajjar jag :)
tack för det
Skriv svar