[ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Assembler Atmega8

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34 | 34
Bydlisko: IP: 209.85....
NapísalOffline : 17.10.2009 11:12 | Assembler Atmega8

Cavte, mam problem s assemblerom pre 8bitovy Atmel ATmega8.

V podstate to funguje ako odpocitadlo, register r18 znizuje z hodnoty F o jedno nizsie,
ked sa dostane na 0, zacne dekrementovat r19, ked sa dostane na 0, zacne dekrementovat r20,
ked sa r20 dostane na 0, program sa opakuje.

Problem je v tom, ked sa dostane v registri r19 na hodnotu 4, AVRstudio vypise chybu:
"Stack pointer below start of RAM" Simulator AVRstudia sice funguje dalej, da sa dalej dekrementovat,
lenze ked to napalim do hardveru, tak presne na tomto mieste prestane fungovat.
Po tejto chybe vypise neskor "Excessive stack overflow, stop sim".

Programujem v AVRstudiu 4.17.
Po skompilovani nie je ziadna chyba, a ziadne varovanie.

Kód:
.include "m8def.inc"
   rjmp START   
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop

START:
   ;nastavenie zasobnika
   ldi r16,high(ramend)
   out sph,r16
   ldi r16,low(ramend)
   out spl,r16

   ;nastavenie konstant zobrazenia 0x
   .EQU   z0=0xc0
   .EQU   z1=0xf9
   .EQU   z2=0xa4
   .EQU   z3=0xb0
   .EQU   z4=0x99
   .EQU   z5=0x92
   .EQU   z6=0x82
   .EQU   z7=0xf8
   .EQU   z8=0x80
   .EQU   z9=0x90
   .EQU   zA=0x88
   .EQU   zB=0x83
   .EQU   zC=0xc6
   .EQU   zD=0xa1
   .EQU   zE=0x86
   .EQU   zF=0x8e
   
   ldi r16,0xff
    out ddrb,r16      ;cely port ddrb nastavime na vystup
   out ddrd,r16      ;cely port ddrd nastavime na vystup
   out portb,r16      ;na piny displejov dame 1, cize ZHASNUTIE DISPLEJOV

INIT:
   ldi r16, 0xff
   ldi r17, 0xff
   


POROVNAJ:
   ldi r18, 0x0f      ;horna cast registra r18 [7..4]
   and r18, r16      ;logical AND
   ldi r19, 0xf0      ;dolna cast registra r19 [3..0]
   and r19, r16      ;r19 = r19 & r16; r19 = 11110000 & 11111111
   swap r19         ;rotacia r19[3..0] <-> r19[7..4]
   ldi r20, 0x0f      ;dolna cast registra r20 [7..0]
   and r20, r17      ;logical AND; r20 = r20 & r17; r20 = 00001111 & 11111111
   rcall PODPROGRAM1   ;zavolame PODPROGRAM1

ZOBRAZ:
   dec r18
   cpi r18,0
   brne PODPROGRAM1
   
   ldi r18,0x0f
   dec r19
   cpi r19,0
   brne PODPROGRAM1
   
   ldi r18,0x0f
   ldi r19,0x0f
   dec r20
   cpi r20,0
   brne PODPROGRAM1
   
   ldi r18,0x0f
   ldi r19,0x0f
   ldi r20,0x0f
   rjmp INIT         ;breq INIT


KONIEC:
   rjmp KONIEC


PODPROGRAM1:
   ;rcall DELAY      ;volanie podprogramu DELAY
   ldi r16,0xff              ;zhasnutie displejov cez r16 +1
   out portb,r16      ;zhasnutie
   
   cpi r18,0
   breq n0
   cpi r18,1
   breq n1
   cpi r18,2
   breq n2
   cpi r18,3
   breq n3
   cpi r18,4
   breq n4
   cpi r18,5
   breq n5
   cpi r18,6
   breq n6
   cpi r18,7
   breq n7
   cpi r18,8
   breq n8
   cpi r18,9
   breq n9
   cpi r18,0x0a
   breq na
   cpi r18,0x0b
   breq nb
   cpi r18,0x0c
   breq nc
   cpi r18,0x0d
   breq nd
   cpi r18,0x0e
   breq ne
   cpi r18,0x0f
   breq nf
   rjmp KONIEC

n0:
   ldi r16,z0
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n1:
   ldi r16,z1
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2
n2:
   ldi r16,z2
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n3:
   ldi r16,z3
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n4:
   ldi r16,z4
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n5:
   ldi r16,z5
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n6:
   ldi r16,z6
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n7:
   ldi r16,z7
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n8:
   ldi r16,z8
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

n9:
   ldi r16,z9
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

na:
   ldi r16,zA
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

nb:
   ldi r16,zB
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

nc:
   ldi r16,zC
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

nd:
   ldi r16,zD
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

ne:
   ldi r16,zE
   out portd,r16
   cbi portb,3
   rcall PODPROGRAM2

nf:
   ldi r16,zF         ;register r16 naplnime hodnotou znaku F t.j. 0x8e
   out portd,r16      ;na piny portu d dame znak F, cize hodnotu 0x8e
   cbi portb,3         ;na treti displej (3.4.5.displej) posleme 0, cize ho rozsvietime
   rcall PODPROGRAM2   ;zavolame PODPROGRAM2
ret


PODPROGRAM2:
   ;rcall DELAY      ;volanie podprogramu DELAY
   ldi r16,0xff              ;zhasnutie displejov cez r16 +1
   out portb,r16      ;zhasnutie   

   cpi r19,0
   breq n10
   cpi r19,1
   breq n11
   cpi r19,2
   breq n12
   cpi r19,3
   breq n13
   cpi r19,4
   breq n14
   cpi r19,5
   breq n15
   cpi r19,6
   breq n16
   cpi r19,7
   breq n17
   cpi r19,8
   breq n18
   cpi r19,9
   breq n19
   cpi r19,0x0a
   breq n1a
   cpi r19,0x0b
   breq n1b
   cpi r19,0x0c
   breq n1c
   cpi r19,0x0d
   breq n1d
   cpi r19,0x0e
   breq n1e
   cpi r19,0x0f
   breq n1f
   rjmp KONIEC

n10:
   ldi r16,z0
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n11:
   ldi r16,z1
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3
n12:
   ldi r16,z2
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n13:
   ldi r16,z3
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n14:
   ldi r16,z4
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n15:
   ldi r16,z5
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n16:
   ldi r16,z6
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n17:
   ldi r16,z7
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n18:
   ldi r16,z8
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n19:
   ldi r16,z9
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n1a:
   ldi r16,zA
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n1b:
   ldi r16,zB
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n1c:
   ldi r16,zC
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n1d:
   ldi r16,zD
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n1e:
   ldi r16,zE
   out portd,r16
   cbi portb,4
   rcall PODPROGRAM3

n1f:
   ldi r16,zF         ;register r16 naplnime hodnotou F, t.j. 0x8e
   out portd,r16      
   cbi portb,4         ;rozsvietime stvrty displej (3.4.5.displej)
   rcall PODPROGRAM3
ret

PODPROGRAM3:   
   ;rcall DELAY           ;volanie podprogramu DELAY
   ldi r16,0xff              ;zhasnutie displejov cez r16 +1
   out portb,r16      ;zhasnutie   

   cpi r20,0
   breq n20
   cpi r20,1
   breq n21
   cpi r20,2
   breq n22
   cpi r20,3
   breq n23
   cpi r20,4
   breq n24
   cpi r20,5
   breq n25
   cpi r20,6
   breq n26
   cpi r20,7
   breq n27
   cpi r20,8
   breq n28
   cpi r20,9
   breq n29
   cpi r20,0x0a
   breq n2a
   cpi r20,0x0b
   breq n2b
   cpi r20,0x0c
   breq n2c
   cpi r20,0x0d
   breq n2d
   cpi r20,0x0e
   breq n2e
   cpi r20,0x0f
   breq n2f
   rjmp KONIEC

n20:
   ldi r16,z0
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n21:
   ldi r16,z1
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ
n22:
   ldi r16,z2
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n23:
   ldi r16,z3
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n24:
   ldi r16,z4
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n25:
   ldi r16,z5
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n26:
   ldi r16,z6
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n27:
   ldi r16,z7
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n28:
   ldi r16,z8
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n29:
   ldi r16,z9
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n2a:
   ldi r16,zA
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n2b:
   ldi r16,zB
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n2c:
   ldi r16,zC
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n2d:
   ldi r16,zD
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n2e:
   ldi r16,zE
   out portd,r16
   cbi portb,5
   rcall ZOBRAZ

n2f:
   ldi r16,zF
   out portd,r16
   cbi portb,5         ;rozsvietime piaty displej (3.4.5.displej)
   rcall ZOBRAZ
ret


DELAY:
   ldi r21, 2
   DLY23:
      dec r21
      breq DONE
      ldi r22, 50
      DLY22:
         dec r22
         breq DLY23
         ldi r23, 255
         DLY21:
            dec r23
            breq DLY22   
            rjmp DLY21
   DONE:
ret


_________________
Tajna misia: Ignorovat dlzne a makcene.
Offline

Skúsený užívateľ
Skúsený užívateľ
Assembler Atmega8

Registrovaný: 11.01.09
Prihlásený: 21.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 17.10.2009 12:16 | Assembler Atmega8

Nepracujem s týmto assemblerom, ale tá chyba hovorí za všetko. Všimni si, že v celom programe sú vlastne rekurzívne volané podprogramy. To znamená neustále zmenšovanie zásobníkovej pamäte. Na návesti nXX je stále volaný podprogram rcall PODPROGRAMX a z tohto podprogramu ďalší, teda nie je uvoľnená zásobníková pamäť. Takto sa zahltí celý stack až dôjde k spomínanej chybe. Žiaľ, ako som spomenul, nepoznám inštrukcie tohoto assembleru, takže ti nemôžem pomôcť prerobiť kód, iba ak by som ti to naznačil nejako schématicky. V každom prípade je nutné zmeniť celý algoritmus, hlavne zamedziť rekurzii.


Offline

Užívateľ
Užívateľ
Assembler Atmega8

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34 | 34
Bydlisko: IP: 209.85....
Napísal autor témyOffline : 17.10.2009 12:49 | Assembler Atmega8

Takze zmenit algoritmus, alebo zakazdym mazat zasobnik, ale ako sa maze zasobnik? Tu je instrukcna sada:
http://www.atmel.com/dyn/resources/prod ... oc1022.pdf
Skusim este upravit algoritmus.


_________________
Tajna misia: Ignorovat dlzne a makcene.
Offline

Skúsený užívateľ
Skúsený užívateľ
Assembler Atmega8

Registrovaný: 11.01.09
Prihlásený: 21.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 17.10.2009 12:54 | Assembler Atmega8

Moment, ty nemôžeš zmazať zásobník, to by si pod sebou zrezal konár :) . Ak by si potom vyšiel z rekurzie, program by nevedel, kde sa má vrátiť (pretože by si to zmazal). Musíš proste upraviť program tak, aby nepoužíval rekurziu (prípadne aby ju obmedzil v rámci pamäte).

//EDIT

Skúšal som si to letmo prezrieť a napadla ma menšia úprava (nemusí to fungovať správne, pretože nemám to ako vyskúšať, je to všetko z hlavy, ale aspoň to skús):

Začni od návestia PODPROGRAM1. Na všetkých návestiach nX zmeň inštrukcie volania rcall PODPROGRAM2 na inštrukcie skoku rjmp PODPROGRAM2.
Pokračuj na návestí PODPROGRAM2. Na všetkých návestiach n1X zmeň inštrukcie volania rcall PODPROGRAM3 na inštrukcie skoku rjmp PODPROGRAM3.
Ďalej v PODPROGRAM3 na všetkých návestiach n2X zmeň inštrukcie volania rcall ZOBRAZ na inštrukcie skoku rjmp ZOBRAZ.

Skús to celé prerobiť a daj si to odkrokovať, pričom sleduj zásobník (nemal by sa meniť takmer vôbec, keďže rekurzia je úplne odstránená). Je ale možné, že okrem týchto úprav sú nutné ešte nejaké iné zmeny, ale je to dosť rozsiahly kód a bez praktického skúšania je nemožné ti poradiť niečo viac.


Offline

Užívateľ
Užívateľ
Assembler Atmega8

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34 | 34
Bydlisko: IP: 209.85....
Napísal autor témyOffline : 17.10.2009 14:13 | Assembler Atmega8

Ty si genius, ono to funguje :) Dal som krokovat s breakpointom a sledoval som hodnoty registrov, presiel cely cyklus od F F F po 0 0 0 a zacal odznova, takze chyba so zasobnikom je odstranena, dakujem. Pocas krokovania AVRstudio vypisovalo "Target not found" nevies nahodou co tym mysli? Ale to bolo len ciernym, ziadna cervena chyba. Mal by som odstranit asi aj ret z podprogramov, lebo uz su to navestia, nie? Este vyriesit vypisovanie nuul na dislplej, a vyskusat to aj s delayom...


_________________
Tajna misia: Ignorovat dlzne a makcene.
Offline

Užívateľ
Užívateľ
Assembler Atmega8

Registrovaný: 23.11.08
Príspevky: 187
Témy: 34 | 34
Bydlisko: IP: 209.85....
Napísal autor témyOffline : 17.10.2009 17:13 | Assembler Atmega8

Tu je hotovy program, tzv odpocitavadlo na tri sedemsegmentove displeje. Vypisuje aj nuly, s funkcnym oneskorenim, a bez chyby v zasobniku, ak by ho niekto potreboval alebo len si chcel pozriet:
Kód:
.include "m8def.inc"
   rjmp START   
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop

START:
   ;nastavenie zasobnika
   ldi r16,high(ramend)
   out sph,r16
   ldi r16,low(ramend)
   out spl,r16

   ;nastavenie konstant zobrazenia 0x
   .EQU   z0=0xc0
   .EQU   z1=0xf9
   .EQU   z2=0xa4
   .EQU   z3=0xb0
   .EQU   z4=0x99
   .EQU   z5=0x92
   .EQU   z6=0x82
   .EQU   z7=0xf8
   .EQU   z8=0x80
   .EQU   z9=0x90
   .EQU   zA=0x88
   .EQU   zB=0x83
   .EQU   zC=0xc6
   .EQU   zD=0xa1
   .EQU   zE=0x86
   .EQU   zF=0x8e
   
   ldi r16,0xff
    out ddrb,r16      ;cely port ddrb nastavime na vystup
   out ddrd,r16      ;cely port ddrd nastavime na vystup
   out portb,r16      ;na piny displejov dame 1, cize ZHASNUTIE DISPLEJOV

INIT:
   ldi r16,0xff
   ldi r17,0xff
   ldi r24,0xff
   ldi r25,0xff
   

POROVNAJ:
   ldi r18,0x0f         ;horna cast registra r18 [7..4]
   and r18,r16            ;logical AND
   ldi r19,0xf0         ;dolna cast registra r19 [3..0]
   and r19,r16            ;r19 = r19 & r16; r19 = 11110000 & 11111111
   swap r19            ;rotacia r19[3..0] <-> r19[7..4]
   ldi r20,0x0f         ;dolna cast registra r20 [7..0]
   and r20,r17            ;logical AND; r20 = r20 & r17; r20 = 00001111 & 11111111
   ldi r17,0xff
   rjmp PRAVY_DISPLAY      ;skoci na navestie PRAVY_DISPLAY

ZOBRAZ:
   cpi r17,0
   breq NULA1            ;ak je 0, skoci na navestie NULA1
   
   dec r18
   rjmp PRAVY_DISPLAY

NULA1:
   ldi r17,0xff
   ldi r18,0x0f

   cpi r24,0
   breq NULA2            ;ak je 0, skoci na navestie

   dec r19
   rjmp PRAVY_DISPLAY

NULA2:
   ldi r17,0xff
   ldi r18,0x0f
   ldi r19,0x0f
   ldi r24,0xff

   cpi r25,0
   breq NULA3            ;ak je 0, skoc na navestie NULA3


   dec r20
   rjmp PRAVY_DISPLAY

NULA3:   
   ldi r18,0x0f
   ldi r19,0x0f
   ldi r20,0x0f
   rjmp INIT


KONIEC:
   rjmp KONIEC


PRAVY_DISPLAY:
   rcall DELAY            ;volanie podprogramu DELAY
   ldi r16,0xff         ;zhasnutie displejov cez r16 +1
   out portb,r16         ;zhasnutie
   
   cpi r18,0
   breq n0
   cpi r18,1
   breq n1
   cpi r18,2
   breq n2
   cpi r18,3
   breq n3
   cpi r18,4
   breq n4
   cpi r18,5
   breq n5
   cpi r18,6
   breq n6
   cpi r18,7
   breq n7
   cpi r18,8
   breq n8
   cpi r18,9
   breq n9
   cpi r18,0x0a
   breq na
   cpi r18,0x0b
   breq nb
   cpi r18,0x0c
   breq nc
   cpi r18,0x0d
   breq nd
   cpi r18,0x0e
   breq ne
   cpi r18,0x0f
   breq nf
   rjmp KONIEC

n0:
   ldi r16,z0
   out portd,r16
   cbi portb,3
   ldi r17,0x00
   rjmp STREDNY_DISPLAY

n1:
   ldi r16,z1
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY
n2:
   ldi r16,z2
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n3:
   ldi r16,z3
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n4:
   ldi r16,z4
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n5:
   ldi r16,z5
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n6:
   ldi r16,z6
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n7:
   ldi r16,z7
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n8:
   ldi r16,z8
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

n9:
   ldi r16,z9
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

na:
   ldi r16,zA
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

nb:
   ldi r16,zB
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

nc:
   ldi r16,zC
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

nd:
   ldi r16,zD
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

ne:
   ldi r16,zE
   out portd,r16
   cbi portb,3
   rjmp STREDNY_DISPLAY

nf:
   ldi r16,zF            ;register r16 naplnime hodnotou znaku F t.j. 0x8e
   out portd,r16         ;na piny portu d dame znak F, cize hodnotu 0x8e
   cbi portb,3            ;na treti displej (3.4.5.displej) posleme 0, cize ho rozsvietime
   rjmp STREDNY_DISPLAY   ;skocime na navestie STREDNY_DISPLAY


STREDNY_DISPLAY:
   rcall DELAY            ;volanie podprogramu DELAY
   ldi r16,0xff         ;zhasnutie displejov cez r16 +1
   out portb,r16         ;zhasnutie   

   cpi r19,0
   breq n10
   cpi r19,1
   breq n11
   cpi r19,2
   breq n12
   cpi r19,3
   breq n13
   cpi r19,4
   breq n14
   cpi r19,5
   breq n15
   cpi r19,6
   breq n16
   cpi r19,7
   breq n17
   cpi r19,8
   breq n18
   cpi r19,9
   breq n19
   cpi r19,0x0a
   breq n1a
   cpi r19,0x0b
   breq n1b
   cpi r19,0x0c
   breq n1c
   cpi r19,0x0d
   breq n1d
   cpi r19,0x0e
   breq n1e
   cpi r19,0x0f
   breq n1f
   rjmp KONIEC

n10:
   ldi r16,z0
   out portd,r16
   cbi portb,4
   ldi r24,0x00
   rjmp LAVY_DISPLAY

n11:
   ldi r16,z1
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY
n12:
   ldi r16,z2
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n13:
   ldi r16,z3
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n14:
   ldi r16,z4
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n15:
   ldi r16,z5
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n16:
   ldi r16,z6
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n17:
   ldi r16,z7
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n18:
   ldi r16,z8
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n19:
   ldi r16,z9
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n1a:
   ldi r16,zA
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n1b:
   ldi r16,zB
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n1c:
   ldi r16,zC
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n1d:
   ldi r16,zD
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n1e:
   ldi r16,zE
   out portd,r16
   cbi portb,4
   rjmp LAVY_DISPLAY

n1f:
   ldi r16,zF            ;register r16 naplnime hodnotou F, t.j. 0x8e
   out portd,r16
   cbi portb,4            ;rozsvietime stvrty displej (3.4.5.displej)
   rjmp LAVY_DISPLAY


LAVY_DISPLAY:   
   rcall DELAY            ;volanie podprogramu DELAY
   ldi r16,0xff         ;zhasnutie displejov cez r16 +1
   out portb,r16         ;zhasnutie   

   cpi r20,0
   breq n20
   cpi r20,1
   breq n21
   cpi r20,2
   breq n22
   cpi r20,3
   breq n23
   cpi r20,4
   breq n24
   cpi r20,5
   breq n25
   cpi r20,6
   breq n26
   cpi r20,7
   breq n27
   cpi r20,8
   breq n28
   cpi r20,9
   breq n29
   cpi r20,0x0a
   breq n2a
   cpi r20,0x0b
   breq n2b
   cpi r20,0x0c
   breq n2c
   cpi r20,0x0d
   breq n2d
   cpi r20,0x0e
   breq n2e
   cpi r20,0x0f
   breq n2f
   rjmp KONIEC

n20:
   ldi r16,z0
   out portd,r16
   cbi portb,5
   ldi r25,0x00
   rjmp ZOBRAZ

n21:
   ldi r16,z1
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ
n22:
   ldi r16,z2
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n23:
   ldi r16,z3
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n24:
   ldi r16,z4
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n25:
   ldi r16,z5
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n26:
   ldi r16,z6
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n27:
   ldi r16,z7
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n28:
   ldi r16,z8
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n29:
   ldi r16,z9
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n2a:
   ldi r16,zA
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n2b:
   ldi r16,zB
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n2c:
   ldi r16,zC
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n2d:
   ldi r16,zD
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n2e:
   ldi r16,zE
   out portd,r16
   cbi portb,5
   rjmp ZOBRAZ

n2f:
   ldi r16,zF
   out portd,r16
   cbi portb,5         ;rozsvietime piaty displej (3.4.5.displej)
   rjmp ZOBRAZ


DELAY:
   ldi r21,2
   DLY23:
      dec r21
      breq DONE
      ldi r22,50
      DLY22:
         dec r22
         breq DLY23
         ldi r23,255
         DLY21:
            dec r23
            breq DLY22   
            rjmp DLY21
   DONE:
ret



_________________
Tajna misia: Ignorovat dlzne a makcene.
 [ Príspevkov: 6 ] 


Assembler Atmega8



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Naprogramovanie ATmega8 a uprava programu

v Elektronika

17

2296

03.11.2010 15:32

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

ASSEMBLER

v Assembler, C, C++, Pascal, Java

8

1787

13.03.2007 20:39

My-reC

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler

v Assembler, C, C++, Pascal, Java

0

828

31.03.2009 20:10

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

assembler

v Assembler, C, C++, Pascal, Java

1

1537

10.11.2006 18:14

Marco

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler

v Assembler, C, C++, Pascal, Java

0

746

01.04.2009 21:02

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

Kniha : Assembler

v Assembler, C, C++, Pascal, Java

1

562

16.04.2013 22:34

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8086

v Assembler, C, C++, Pascal, Java

2

654

27.03.2009 20:33

Ivan11114

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8080

v Assembler, C, C++, Pascal, Java

5

1339

02.04.2010 20:44

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

zacat assembler

v Assembler, C, C++, Pascal, Java

15

1182

16.12.2011 23:24

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Kalkulačka - assembler

v Assembler, C, C++, Pascal, Java

0

719

10.11.2011 18:54

Reverser

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8086

v Assembler, C, C++, Pascal, Java

11

1326

19.05.2010 22:38

JR55

V tomto fóre nie sú ďalšie neprečítané témy.

assembler zaciatky

v Assembler, C, C++, Pascal, Java

5

1004

03.09.2010 15:14

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8086

v Assembler, C, C++, Pascal, Java

3

643

21.04.2009 20:05

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

aky assembler?

v Assembler, C, C++, Pascal, Java

4

785

21.11.2007 9:49

euthanan

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

assembler zadanie

v Assembler, C, C++, Pascal, Java

1

1041

09.03.2010 20:27

ac.milan

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler binary

v Assembler, C, C++, Pascal, Java

23

1272

18.04.2012 7:17

Fico



© 2005 - 2024 PCforum, edited by JanoF