Koen Van Vlaenderen
De vergeetachtigheid bewijst grotere diensten aan het hart dan het geheugen aan het verstand.
Heren,
Ik heb overlaatst het boek AVR microcontrollers van Elektuur gekocht en dan op het net nog wat zitten zoeken achter tutorials.
nu heb ik AVR studio 4 op mijn pc staan en ik tik mijn programma in en dan kun je gaan debuggen/simuleren.
Als oefenwerkje wil ik een night rider maken met 8 ledjes op een AT90S2313
enkel heb ik een probleempje, na de 'delay' subroutine zet ik RET (return from subroutine) maar dan springt ie terug naar het begin van mijn programma en niet na de regel waar ik rcall delay aanroep.
even mijn programmacode posten:
.include "2313def.inc" ; include
.device AT90S2313
.def temp = R16 ; Register R16 -> name temp
.def tel = R17 ; Register 17 -> name count
.org 0x0000 ;code address 0x0000
rjmp START ;
START: ;
ldi temp,0b11111111 ; load 11111111 in temp
out DDRB,temp ; portB is output
ldi tel,0b11111111 ; teller op 255 zette
RIDER:
ldi temp,0b00000001
out PORTB,temp ; led1 aan
rcall DELAY ; DELAYen
ldi temp,0b00000010
out PORTB,temp ; led2 aan
rcall DELAY ; DELAYen
ldi temp,0b00000100
out PORTB,temp ; led3 aan
rcall DELAY ; DELAYen
ldi temp,0b00001000
out PORTB,temp ; led4 aan
rcall DELAY ; DELAYen
ldi temp,0b00010000
out PORTB,temp ; led5 aan
rcall DELAY ; DELAYen
ldi temp,0b00100000
out PORTB,temp ; led6 aan
rcall DELAY ; DELAYen
ldi temp,0b01000000
out PORTB,temp ; led7 aan
rcall DELAY ; DELAYen
ldi temp,0b10000000
out PORTB,temp ; led8 aan
rcall DELAY ; DELAYen
ldi temp,0b01000000
out PORTB,temp ; led7 aan
rcall DELAY ; DELAYen
ldi temp,0b00100000
out PORTB,temp ; led6 aan
rcall DELAY ; DELAYen
ldi temp,0b00010000
out PORTB,temp ; led5 aan
rcall DELAY ; DELAYen
ldi temp,0b00001000
out PORTB,temp ; led4 aan
rcall DELAY ; DELAYen
ldi temp,0b00000100
out PORTB,temp ; led3 aan
rcall DELAY ; DELAYen
ldi temp,0b00000010
out PORTB,temp ; led2 aan
rcall DELAY ; DELAYen
rjmp RIDER ;loop it
DELAY:
cpi tel,0b00000000 ; vergelijk count met 0
dec tel
brne DELAY
ldi tel,0b11111111
ret
dus na die RET springt hij naar boven naar het regeltje RJMP start
ik ben nog vrij nieuw met die AVR's dus een beetje hulp van jullie graag 
de franky
meten is weten, gissen is missen
ha ha, nog een AVR freak.
Ben ook een beginneling met de AVR's, Koen
maar wat doet RETI in plaats van RET.
RETI wordt gebruikt als je uit een interupt terug komt.
Koen Van Vlaenderen
De vergeetachtigheid bewijst grotere diensten aan het hart dan het geheugen aan het verstand.
met RETI doet hij net hetzelfde.
ik heb van een website een gelijksoortig assembler bestand gehaald ook met night rider maar dan met 6 leds en daar heb ik hetzelfde probleem. ik begin te twijfelen of het niet aan de software ligt ?
Koen Van Vlaenderen
De vergeetachtigheid bewijst grotere diensten aan het hart dan het geheugen aan het verstand.
er schiet mij even iets te binnen, dat ik vergeten ben de stack te pointen naar RAMEND dus ik ga even verder proberen, ik laat het weten of dit de oplossing is 
:EDIT:
Hij doet het!!!!!! 
ldi temp, RAMEND ;point stack in RAM
out SPL, temp
was ik vergeten, waardoor de stackpointer op een waarde kwam te staan die niet mogelijk was en daardoor deed ie raar 
[Bericht gewijzigd door Koen Van Vlaenderen op ]
de franky
meten is weten, gissen is missen
Yep, ik verdenk ook studio 4 van rare capriolen in zijn simulator.
Ben eens gaan zoeken tussen mijn projectjes, ik heb mij ook eens bezig gehouden met een looplicht in assembler, welliswaar met een AT90S8535 op een STK-200 board.
RET zou volgens mij toch moeten doen waar het voor bedoeld is, bij mij werkte alles ok,zo?
dit is de code, en ik heb toen ook RET gebruikt en het werkte "just fine":
.include "8535def.inc"
.def reg1 = r16
.def reg2 = r17
.def reg3 = r18
.def reg4 = r19
.def reg5 = r20
.def temp = r21
Reset: ldi reg3,0b11111111
out DDRB,reg3
ldi reg4,0b00000000
out PortB,reg4
ldi temp,low(ramend)
out spl,temp
ldi temp,high(ramend)
out sph,temp
Schema1: ldi reg5,10
Seq1: ldi reg3,0b01111110
out PortB,reg3
rcall Delay1
ldi reg3,0b10111101
out PortB,reg3
rcall Delay1
ldi reg3,0b11011011
out PortB,reg3
rcall Delay1
ldi reg3,0b11100111
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq1
Schema2: ldi reg5,20
Seq2: ldi reg3,0b11111110
out PortB,reg3
rcall Delay2
ldi reg3,0b11111101
out PortB,reg3
rcall Delay2
ldi reg3,0b11111011
out PortB,reg3
rcall Delay2
ldi reg3,0b11110111
out PortB,reg3
rcall Delay2
ldi reg3,0b11101111
out PortB,reg3
rcall Delay2
ldi reg3,0b11011111
out PortB,reg3
rcall Delay2
ldi reg3,0b10111111
out PortB,reg3
rcall Delay2
ldi reg3,0b01111111
out PortB,reg3
rcall Delay2
ldi reg3,0b10111111
out PortB,reg3
rcall Delay2
ldi reg3,0b11011111
out PortB,reg3
rcall Delay2
ldi reg3,0b11101111
out PortB,reg3
rcall Delay2
ldi reg3,0b11110111
out PortB,reg3
rcall Delay2
ldi reg3,0b11111011
out PortB,reg3
rcall Delay2
ldi reg3,0b11111101
out PortB,reg3
rcall Delay2
ldi reg3,0b11111110
out PortB,reg3
rcall Delay2
dec reg5
cpi reg5,0
brne Seq2
Schema3: ldi reg5,5
Seq3: ldi reg3,0b11111110
out PortB,reg3
rcall Delay1
ldi reg3,0b11111100
out PortB,reg3
rcall Delay1
ldi reg3,0b11111000
out PortB,reg3
rcall Delay1
ldi reg3,0b11110000
out PortB,reg3
rcall Delay1
ldi reg3,0b11100000
out PortB,reg3
rcall Delay1
ldi reg3,0b11000000
out PortB,reg3
rcall Delay1
ldi reg3,0b10000000
out PortB,reg3
rcall Delay1
ldi reg3,0b00000000
out PortB,reg3
rcall Delay1
ldi reg3,0b01111111
out PortB,reg3
rcall Delay1
ldi reg3,0b00111111
out PortB,reg3
rcall Delay1
ldi reg3,0b00011111
out PortB,reg3
rcall Delay1
ldi reg3,0b00001111
out PortB,reg3
rcall Delay1
ldi reg3,0b00000111
out PortB,reg3
rcall Delay1
ldi reg3,0b00000011
out PortB,reg3
rcall Delay1
ldi reg3,0b00000001
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq3
Schema4: ldi reg5,10
Seq4: ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
ldi reg3,0b11111110
out PortB,reg3
rcall Delay1
ldi reg3,0b11111100
out PortB,reg3
rcall Delay1
ldi reg3,0b11111000
out PortB,reg3
rcall Delay1
ldi reg3,0b11110001
out PortB,reg3
rcall Delay1
ldi reg3,0b11100011
out PortB,reg3
rcall Delay1
ldi reg3,0b11000111
out PortB,reg3
rcall Delay1
ldi reg3,0b10001111
out PortB,reg3
rcall Delay1
ldi reg3,0b00011111
out PortB,reg3
rcall Delay1
ldi reg3,0b00111111
out PortB,reg3
rcall Delay1
ldi reg3,0b01111111
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq4
Schema4b: ldi reg5,10
Seq4b: ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
ldi reg3,0b01111111
out PortB,reg3
rcall Delay1
ldi reg3,0b00111111
out PortB,reg3
rcall Delay1
ldi reg3,0b00011111
out PortB,reg3
rcall Delay1
ldi reg3,0b10001111
out PortB,reg3
rcall Delay1
ldi reg3,0b11000111
out PortB,reg3
rcall Delay1
ldi reg3,0b11100011
out PortB,reg3
rcall Delay1
ldi reg3,0b11110001
out PortB,reg3
rcall Delay1
ldi reg3,0b11111000
out PortB,reg3
rcall Delay1
ldi reg3,0b11111100
out PortB,reg3
rcall Delay1
ldi reg3,0b11111110
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq4b
Schema5: ldi reg5,15
Seq5: ldi reg3,0b00000000
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq5
Schema6: ldi reg5,20
Seq6: ldi reg3,0b10101010
out PortB,reg3
rcall Delay1
ldi reg3,0b01010101
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq6
Schema7: ldi reg5,20
Seq7: ldi reg3,0b00001111
out PortB,reg3
rcall Delay1
rcall Delay1
ldi reg3,0b11110000
out PortB,reg3
rcall Delay1
rcall Delay1
dec reg5
cpi reg5,0
brne Seq7
Schema8: ldi reg5,15
Seq8: ldi reg3,0b01111110
out PortB,reg3
rcall Delay1
ldi reg3,0b00111100
out PortB,reg3
rcall Delay1
ldi reg3,0b00011000
out PortB,reg3
rcall Delay1
ldi reg3,0b00000000
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq8
Schema9: ldi reg5,15
Seq9: ldi reg3,0b11100111
out PortB,reg3
rcall Delay1
ldi reg3,0b11000011
out PortB,reg3
rcall Delay1
ldi reg3,0b10000001
out PortB,reg3
rcall Delay1
ldi reg3,0b00000000
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq9
Schema10: ldi reg5,10
Seq10: ldi reg3,0b01111111
out PortB,reg3
rcall Delay1
ldi reg3,0b01011111
out PortB,reg3
rcall Delay1
ldi reg3,0b01010111
out PortB,reg3
rcall Delay1
ldi reg3,0b01010101
out PortB,reg3
rcall Delay1
ldi reg3,0b01010100
out PortB,reg3
rcall Delay1
ldi reg3,0b01010000
out PortB,reg3
rcall Delay1
ldi reg3,0b01000000
out PortB,reg3
rcall Delay1
ldi reg3,0b00000000
out PortB,reg3
rcall Delay1
ldi reg3,0b11111111
out PortB,reg3
rcall Delay1
dec reg5
cpi reg5,0
brne Seq10
Schema11: ldi reg5,10
Seq11: ldi reg3,0b11111110
out PortB,reg3
rcall Delay2
ldi reg3,0b11111100
out PortB,reg3
rcall Delay2
ldi reg3,0b11111000
out PortB,reg3
rcall Delay2
ldi reg3,0b11110000
out PortB,reg3
rcall Delay2
ldi reg3,0b11100000
out PortB,reg3
rcall Delay2
ldi reg3,0b11000000
out PortB,reg3
rcall Delay2
ldi reg3,0b10000000
out PortB,reg3
rcall Delay2
ldi reg3,0b00000000
out PortB,reg3
rcall Delay2
ldi reg3,0b11111111
out PortB,reg3
rcall Delay2
ldi reg3,0b01111111
out PortB,reg3
rcall Delay2
ldi reg3,0b00111111
out PortB,reg3
rcall Delay2
ldi reg3,0b00011111
out PortB,reg3
rcall Delay2
ldi reg3,0b00001111
out PortB,reg3
rcall Delay2
ldi reg3,0b00000111
out PortB,reg3
rcall Delay2
ldi reg3,0b00000011
out PortB,reg3
rcall Delay2
ldi reg3,0b00000001
out PortB,reg3
rcall Delay2
ldi reg3,0b00000000
out PortB,reg3
rcall Delay2
ldi reg3,0b11111111
out PortB,reg3
rcall Delay2
dec reg5
cpi reg5,0
brne Seq11
rcall Schema1
Delay1: ldi reg4,3
rjmp LoopB
Delay2: ldi reg4,2
LoopB: ldi reg2,255
LoopA: ldi reg1,255
Loop1: dec reg1
brne Loop1
Loop2: dec reg2
brne LoopA
Loop3: dec reg4
brne LoopB
ret
.exit
Koen Van Vlaenderen
De vergeetachtigheid bewijst grotere diensten aan het hart dan het geheugen aan het verstand.
de franky
meten is weten, gissen is missen
Koen als het je intereseerd om in basic te proggrammeren voor de AVR, dit is een goede Basic-compiler, en de demo versie kan tot 2k compileren, wat voldoende is voor een AT90S2313.
http://www.mcselec.com/bascom-avr.htm
Het aansturen van LCD,serial port,enzv wordt hier heel wat makkelijker mee
just telling you
groetjes
