Hy allemaal,

Heb het hele weekend met mn nieuwe STK500 gespeeld :p echt super, Het programeren gaat steeds beter. Alleen de subrutines in assembler kom ik niet echt uit. Zodra je het commando "Call" uitvoer springt ie netjes naar het gegeven adres maar als je dan terug wilt naar waar je gebleven was in het programma (met het commando "Ret") dan begint ie weer opnieuw aan het begin van het programma.

Ik heb het probleem ff kort weergegeven in het programmaatje hieronder het is dus de bedoeling dat alle bits van portD gaan knipperen. (Dus hoog, vertraging, laag, vertraging, hoog,....)

Kan iemand mij vertellen wat ik niet goed doe??

alvast bedankt,

Sytse


.device		ATmega8
.include	"m8def.inc"
;
;
;
;variabele declaratie
.def		var	=	r16
.def		timer1	=	r17
.def 		timer2	=	r18
;
;
.cseg
.org		0x00
		rjmp	main
;
;
;
; subroutine "DELAY"
delay:		dec timer1
		brne delay

		dec timer2
		brne delay
			
		ret
;
;
;Hoofdprogramma
main:
		ldi	var,	0b11111111	;schrijf FF naar var
		out	DDRD,	var		;maak heel poortD output
			
			

;eindeloze loop
loop:

		call    delay			;call subroutine


		ldi	var,	0b11111111	;schrijf FF naar var
		out	PORTD,	var		;schrijf FF naar poortD

		call 	delay			;call subroutine

		ldi	var,	0b00000000	;schrijf 00 naar var
		out	PORTD,	var		;schrijf 00 naar poortD
			
		rjmp	loop			;begin opnieuw		

Op 3 februari 2003 22:21:01 schreef sytse:
Kan iemand mij vertellen wat ik niet goed doe??

Denk je nou echt dat iemand jou nog gaat helpen nadat je dat bord hebt gewonnen?

Oh sorry, was een geintje. :D
Je bent vergeten je stackpointer in je stellen.

Op 3 februari 2003 22:23:31 schreef Bastiaan:

[...]

Denk je nou echt dat iemand jouw nog gaat helpen nadat je dat bord hebt gewonnen?

Jaloers ????:P:P:P:P

Ok bedankt, ik ga het meteen proberen

Op 3 februari 2003 22:25:15 schreef sytse:
[...]
Ok bedankt, ik ga het meteen proberen

Weet je hoe het moet?
Zo:


; set stackpointer to top of RAM
		ldi r16,high(RAMEND)
		out SPH, r16
		ldi r16, low(RAMEND)
		out SPL, r16

Je kunt trouwens meerdere manieren gebruiken voor de notatie van getallen. Jij gebruikt alleen de byte notatie met 0b00000000

Maar je kunt ook (af en toe) de hex notatie nemen. Jij zegt namelijk bij je commentaar ;laad met FF. Het is ook makkelijker om dan te zeggen
ldi r16, 0xff

Gewoon een tip, of je er wat mee doet moet je zelf weten.

/edit, maar ff meteen gepost hoe het moet, en een tip erbij :)

[Bericht gewijzigd door Bastiaan op ]

Nog niet, maar ik heb dat AVR boek gekocht dus ik zoek het ff op

Op 3 februari 2003 22:25:53 schreef Bastiaan:

Maar je kunt ook (af en toe) de hex notatie nemen. Jij zegt namelijk bij je commentaar ;laad met FF. Het is ook makkelijker om dan te zeggen
ldi r16, 0xff

K super.

Ps. De hex notatie had ik al in het orginele programma gebruikt, maar ik vond de binaire notatie wat overzichtelijker in dit korte voorbeeldje. Dusss....

had ik ook eerst vergeten die stackpointer :)
heeft wel tijd gekost eer ik het door had ;)

Maar nu met Bastiaan's AVR knobbel moet dat wel goed komen op het forum hier :7

Op 3 februari 2003 23:16:34 schreef Koen Van Vlaenderen:
Maar nu met Bastiaan's AVR knobbel moet dat wel goed komen op het forum hier :7

Zeg maar gerust µC/P knobbel, want AVR is niet de enigste die ik ken :D

Op 4 februari 2003 00:07:07 schreef Bastiaan:

[...]

Zeg maar gerust µC/P knobbel, want AVR is niet de enigste die ik ken :D

http://www.melvine.be/users/raveforum/images/smiles/hail.gifBastiaanhttp://www.melvine.be/users/raveforum/images/smiles/hail.gif

Op 4 februari 2003 00:07:07 schreef Bastiaan:
Zeg maar gerust µC/P knobbel, want AVR is niet de enigste die ik ken :D

Goh Bastiaan, waar zit die knobbel dan? :D Als ie aan de zijkant van je hoofd zit, loop je zeker nogal 'ns scheef? :D :D :D

je bent gewoon jaloers ;)