Gå til innhold

Anbefalte innlegg

Har fått i oppgåve i eksamen der eg skal lage eit program.

Når nokon går in ei dør skal eit aukustisk signal gå og 8 diodar lyse frå høgre til venstre og tilbake 10 gångar.

 

Har skreve programmet men det funkar ikkje :no:

 

.include"1200def.inc"

 

 

 

 

; Definerer.

 

 

start1: ldi r19,$ff

 

      out ddrb,r19 ;utg

 

      ldi r19,$00

 

      out ddrd,r19 ;inng

 

      ldi r18,$ff

 

      ldi r20,$fe

 

      rjmp start

 

 

 

 

 

; Naar pind,0 ikkje er trykt er den 1.

 

start: sbic pind,0 ; pind,0 er ein folar

 

  rjmp start

 

  rjmp alarm

 

 

 

 

; Alarm.

 

 

 

alarm: out portb,r20

 

      rcall tidsf

 

      rjmp lys1

 

 

 

 

 

; 1.Forste roteringa mot hogre.

 

 

lys1: ror r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys2

 

 

 

 

; 2.Forste roteringa mot venstre.

 

 

lys2: rol r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys3

 

 

 

 

; 3.Andre roteringa mot hogre.

 

 

lys3: ror r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys4

 

 

 

 

; 4.Andre roteringa mot venstre.

 

lys4: rol r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys5

 

 

 

 

 

; 5.Tredje roteringa mot hogre.

 

 

lys5: ror r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys6

 

 

 

; 6.Tredje roteringa mot venstre.

 

lys6: rol r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys7

 

 

 

 

; 7.Forste roteringa mot hogre.

 

lys7: ror r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys8

 

 

 

 

; 8.Forste roteringa mot venstre.

 

lys8: rol r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys9

 

 

 

 

; 9.Andre roteringa mot hogre.

 

 

lys9: ror r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp lys10

 

 

 

 

; 10.Andre roteringa mot venstre.

 

lys10: rol r18

 

  out portb,r18

 

  rcall tidsf

 

  rjmp start

 

 

 

 

; Tidsforsinkelse.

 

tidsf:    ldi r16,$01

 

loop1:  ldi r17,$02

 

loop2:  nop

 

      dec r17

 

      brne loop2

 

      dec r16

 

      brne loop1

 

      ret

Lenke til kommentar
Videoannonse
Annonse

Hvis du kunne sagt litt mer spesifikt hva den skal brukes til, og hva det er som ikke fungerer i koden så kan jeg godt hjelpe.

 

Det er viktig å gi fra seg litt opplysninger før man poster, slik som hvilken arkitektur det er snakk om, i dette tilfellet AVR, å da er det litt greit å si hvilken chip man skal bruke osv.

Nå så jeg det i koden at du hadde definert 1200, men allikevel

Lenke til kommentar

Prøv denne:

.include"1200def.inc"

; Definerer.


start1: 
     ldi r19,$ff
     out ddrb,r19;utg
     ldi r19,$00
     out ddrd,r19;inng
     ldi r18,$ff
     ldi r20,$fe
     rjmp start


; Naar pind,0 ikkje er trykt er den 1.
start: 
 sbic pind,0; pind,0 er ein folar
 rjmp start


//Dette er en rutine jeg har kalt 'alarmloop'.
//Grunnen til det er fordi den gjør ikke noe annet
//enn å loope 'alarm' rutinen 10 ganger.
alarmloop:
rcall alarm	//kjør igjenom alarm rutinen en gang
rcall tidsf	//kjør tidsf rutinen en gang

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rcall alarm
rcall tidsf

rjmp start //hopp tilbake til start


//denne rutinen har jeg kortet ned
//slik at det blir litt mer oversiktlig
//og at den roterer 8 ganger til venstre
//og 8 ganger tilbake.
alarm:
 out portb,r20  //spytt ut register 20 på port B
 rcall tidsf  //kjør igjenom tidsf rutinen
   	
 rol r18  	//roter lysene/bitene i register 18 et hakk mot venstre
 out portb,r18  //spytt ut register 18 på port B
 rcall tidsf  //kjør igjenom tidsf rutinen

 rol r18
 out portb,r18
 rcall tidsf
 
 rol r18
 out portb,r18
 rcall tidsf

 rol r18
 out portb,r18
 rcall tidsf
 
 rol r18
 out portb,r18
 rcall tidsf

 rol r18
 out portb,r18
 rcall tidsf
 
 rol r18
 out portb,r18
 rcall tidsf

 rol r18
 out portb,r18
 rcall tidsf
;Gå tilbake igjen
 ror r18  	//denne er akuratt samme som rol bare her går den andre veien og roterer mot høyre
 out portb,r18
 rcall tidsf

 ror r18
 out portb,r18
 rcall tidsf
 
 ror r18
 out portb,r18
 rcall tidsf

 ror r18
 out portb,r18
 rcall tidsf
 
 ror r18
 out portb,r18
 rcall tidsf

 ror r18
 out portb,r18
 rcall tidsf
 
 ror r18
 out portb,r18
 rcall tidsf

 ror r18
 out portb,r18
 rcall tidsf

 ret    	//retuner til alarmloop



; Tidsforsinkelse.
tidsf:    ldi r16,$01
loop1:  ldi r17,$02
loop2:  nop
     dec r17
     brne loop2
     dec r16
     brne loop1
     ret

Lenke til kommentar

her er problem stillinga på oppgåva:

* Følar i dør inn til klasseromet.

* 8stk lys som skal rotere høgre/venstre/høgre 10 gangar for kvar inn-/utpassering

* Eit aukustisk signal for kvar inn-/utpassering.

 

har skreve litt om på programmet men det er ikkje heilt ferdi.

Det fungerar å simulere det :D

 

.include"1200def.inc"

 

; Definerer.

 

start1:

    ldi r19,$ff

    out ddrb,r19;utg

    ldi r19,$00

    out ddrd,r19;inng

    ldi r18,$ff

    ldi r20,$fe

    rjmp start

 

 

; Naar pind,0 ikkje er trykt er den 1.

 

start: sbic pind,0; pind,0 er ein folar

rjmp start

 

;Dette er en rutine eg har kalt 'lysloop'.

;Grunnen til det er fordi den gjor ikke noe annet

;enn aa loope 'lys' rutinen 10 ganger.

 

lysloop:

 

rcall lys ;kjor igjenom lys rutinen en gang

rcall tidsf ;kjor tidsf rutinen en gang

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

 

rcall lys

rcall tidsf

rjmp start ;hopp tilbake til start

 

;den roterer 8 ganger til venstre

;og 8 ganger tilbake.

 

lys:

out portb,r20  ;spyttar ut register 20 paa port B

rcall tidsf  ;kjor igjenom tidsf rutinen

 

rol r18  ;roter lysene i register 18 et hakk mot venstre

out portb,r18  ;spyttar ut register 18 paa port B

rcall tidsf  ;kjorer igjenom tidsf rutinen

 

rol r18

out portb,r18

rcall tidsf

 

rol r18

out portb,r18

rcall tidsf

 

rol r18

out portb,r18

rcall tidsf

 

rol r18

out portb,r18

rcall tidsf

 

rol r18

out portb,r18

rcall tidsf

 

rol r18

out portb,r18

rcall tidsf

 

rol r18

out portb,r18

rcall tidsf

 

;Gaa tilbake igjen

 

ror r18  ;denne er akuratt samme som rol bare her gor den andre veien og roterer mot hoyre

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ror r18

out portb,r18

rcall tidsf

 

ret ;retuner til lysloop

 

; Tidsforsinkelse.

 

tidsf: ldi r16,$01

loop1: ldi r17,$02

loop2: nop

      dec r17

brne loop2

dec r16

brne loop1

ret

 

Veit ikkje heilt om alle registera trengs? :hrm:

Lenke til kommentar
  • 1 måned senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...