Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Prerusenie s atmel

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
zawin



Založen: Jul 21, 2006
Příspěvky: 94

PříspěvekZaslal: so červen 28 2008, 13:12    Předmět: Prerusenie s atmel Citovat

Caute, robim program ktory prepina medzi efektami: EFEKT1 az EFEKT3 po prichode prerusenia. Problem je v tom ze to nejak nefunguje. Neviem si s tym rady kde som mohol spravit chybu.

kód:

   $MODXX51
   ORG   0
   AJMP   INI
   
   ORG   003H
   JMP   VYBER
   
EFEKT1:   CLR   P1.1
   CLR   P1.0
   CALL   CAKAJ
   SETB   P1.1
   SETB   P1.0
   CALL   CAKAJ
   JMP   EFEKT1
EFEKT2:   CLR   P1.1
   CALL   CAKAJ
   SETB   P1.1
   CALL   CAKAJ
   CLR   P1.0
   CALL   CAKAJ
   SETB   P1.0
   CALL   CAKAJ
   JMP   EFEKT2
EFEKT3:   CLR   P1.1
   CALL   CAKAJ
   SETB   P1.1
   CALL   CAKAJ
   CLR   P1.1
   CALL   CAKAJ
   SETB   P1.1
   CALL   CAKAJ
   CALL   CAKAJ
   CLR   P1.0
   CALL   CAKAJ
   SETB   P1.0
   CALL   CAKAJ
   CLR   P1.0
   CALL   CAKAJ
   SETB   P1.0
   CALL   CAKAJ
   CALL   CAKAJ
   JMP   EFEKT3

INI:   SETB   IT0
   SETB   EX0
   SETB   EA
   MOV   R4,#1
   JMP   EFEKT1

VYBER:   INC   R4
   CJNE   R4,#1,VYBER2
   JMP   EFEKT1
VYBER2:   CJNE   R4,#2,VYBER3
   JMP   EFEKT2
VYBER3:   CJNE   R4,#3,VYBER4
   JMP   EFEKT3
VYBER4:   JMP    ZNOVA
   RETI
ZNOVA:   MOV   R4,#1
   JMP   EFEKT1
CAKAJ:   DJNZ   R1,$
   DJNZ   R2,$-2
   RET
CAKAJ2:   MOV   R3,#15
   DJNZ   R1,$
   DJNZ   R2,$-2
   DJNZ   R3,$-4
   RET
   END





Dakujem za rady
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pivko99
Neregistrovaný





PříspěvekZaslal: so červen 28 2008, 15:05    Předmět: Citovat

mno, po letmom pohlade na zdrojak si myslim, ze problem je v tom, ze ty pouzivas prerusenie a vtedy treba mat po vykonani prerusenia instrukciu RETI, ty ju tam sice pouzitu mas ale pochybujem, ze k jej vykonaniu niekedy dojde... Potom ti po mnohych preruseniach prepise stack registre R4 atd a potom ti program robi blbiny...
Návrat nahoru
caven



Založen: Aug 15, 2006
Příspěvky: 417

PříspěvekZaslal: so červen 28 2008, 15:43    Předmět: Citovat

jj přesně tak, chybí ti tam návrat z přerušení.. když to otestuješ v tom přerušení tak ti to rovnou skočí na to zobrazování ale nikdy se to přerušení neukončí a nastane chaos v regiistrech Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
zawin



Založen: Jul 21, 2006
Příspěvky: 94

PříspěvekZaslal: so červen 28 2008, 16:13    Předmět: Citovat

Aha jasne tak tam bude problem ale ako to vyriesit aby to prerusenie preslo az do konca? ked chcem aby to prepinalo medzi tymy efektami?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zirafka



Založen: Aug 20, 2006
Příspěvky: 819

PříspěvekZaslal: so červen 28 2008, 17:14    Předmět: Citovat

ASM sice nerozumím, ale možná ti poradím.

Přerušení musíš ukončit, jinak začne program bloudit a pak se dějí věci, to už říkali kluci.

No a přerušení se končí na jeho konci, takže můžeš udělat co potřebuješ a pak se vrátíš.

Také se dá v přerušení jen nastavit nějaký příznak a potom v hlavním programu dělat podle toho další akce.

Například:

Start programu

Inicializace procesoru a dalších věcí

DO

if priznak = 1 then EFEKT1
if priznak = 2 then EFEKT2

LOOP

Preruseni

if priznak = 1 then priznak =2
if priznak = 2 then priznak =1

navrat z preruseni

Také je dobré zkontrolovat, jestli jsou přerušení povolená a která. To není podceňování, ale zkušenost...

Snad nepíšu moc zmateně Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
radekrd



Založen: May 21, 2008
Příspěvky: 642
Bydliště: Moravský Krumlov

PříspěvekZaslal: so červen 28 2008, 19:20    Předmět: Citovat

Nebo ten rozhodovací blok nedávej do přerušení, ale volej ho v každém tom efektu, času je tam evidentně mraky a v přerušení jenom inkrementuj registr. Možná to není úplně ideální, ale v tomto případě to nevadí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovy WWW stránky
caven



Založen: Aug 15, 2006
Příspěvky: 417

PříspěvekZaslal: so červen 28 2008, 22:19    Předmět: Citovat

jj mám to taky tak. v přerušení pouze přičteš a otestuješ zda není větší a potom nakonci každého toho efektu zavolám testování a rozhodnutí jaký efekt se právě provede...

žádný zázrak, ale funguje to ...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Kado



Založen: Oct 27, 2007
Příspěvky: 44
Bydliště: PB, SVK

PříspěvekZaslal: so červen 28 2008, 22:30    Předmět: Citovat

Upravil som tvoj program do "kultivovanejsej podoby", nehnevaj sa, ale bolo tam vela chybco sa tyka dodrziavania urcitych pravidiel pri pisani programov pre 8051 (zrejme pre AT89C2051, AT89C51, AT89S51 atd)
prikladam upraveny program: podstata je v tom, ze v obsluhe prerusenia od INT0 (zostupa hrana) sa zvysuje hodnota registra r4, pricom sa este porovnava s konstantou #4 (maximum), ak ju dosiahne, tak znova nastavi register na hodnotu #1. V hlavnom slucke sa testuje obsah registra r4 a na zaklade zistenej hodnoty sa vola prislusny podprogram (v tvojom pripade konkretny efekt), po vykonani podprogramu sa dokonci testovanie cely cyklus sa opakuje odznova...
Predpokladam, ze budes pripajat na vyvod INT0 tlacidlo, pricom program nie je osetreny voci zakmitom (pri stlacani tlacidla),
kód:

; program pre 8051 "Efekt"
;
$MOD51   ; mod prekladaca
;
cseg     ; programovy segment
      ORG   0h   ;adresa po resete
      sjmp   start
   
      ORG   003H  ; prerusenie od int0
      ajmp   ext_prerus_0
;
;-----------------------------
   org 30h      ;
start:      SETB   IT0
      SETB   EX0   ; povolenie prerusenia od int0
      SETB   EA   ; povolenie global. prerusenia
      MOV   R4,#1   ; zacneme prvym efektom
      ;JMP   EFEKT1
;---------------------
; hlavna slucka
main:      CJNE   R4,#1, VYBER2
      acall   EFEKT1
VYBER2:      CJNE   R4,#2, VYBER3
      acall   EFEKT2
VYBER3:      CJNE   R4,#3, VYBER4
      acall   EFEKT3
VYBER4:      sjmp main   ; a znova na zaciatok      
;------------------------
; ---------------------------------
; podprogramy pre jednotlive efekty
;----------------------------------
;efekt 1
EFEKT1:      CLR   P1.1
      CLR   P1.0
      acall   CAKAJ
      SETB   P1.1
      SETB   P1.0
      acall   CAKAJ
      ret         ; a naspat z podprogramu
;---------------------------
; efekt 2
EFEKT2:      CLR   P1.1
      acall   CAKAJ
      SETB   P1.1
      acall   CAKAJ
      CLR   P1.0
      acall   CAKAJ
      SETB   P1.0
      acall   CAKAJ
      ret
;---------------------------
; efekt 3
EFEKT3:      CLR   P1.1
      acall   CAKAJ
      SETB   P1.1
      acall   CAKAJ
      CLR   P1.1
      acall   CAKAJ
      SETB   P1.1
      acall   CAKAJ
      acall   CAKAJ
      CLR   P1.0
      acall   CAKAJ
      SETB   P1.0
      acall   CAKAJ
      CLR   P1.0
      acall   CAKAJ
      SETB   P1.0
      acall   CAKAJ
      acall   CAKAJ
      ret
;-------------------------------------
;podprogramy oneskorenia
CAKAJ:      DJNZ   R1,$
      DJNZ   R2,$
      RET
;-------------------------------------
; (tak sa zda, ze ho ani nepouzivas!)
CAKAJ2:      MOV   R3,#15
      DJNZ   R1,$
      DJNZ   R2,$-2
      DJNZ   R3,$-4
      ret
;-------------------------------------
; obsluha prerusenia od int0
;-------------------------------------
;- pri kazdom preruseni sa zvysi hodnota v r4 a ak dosiahne hodnotu #4, tak nastavi prvy efekt r4=1
ext_prerus_0:   inc r4      ; dalsi efekt
   cjne r4, #4, ext_prerus_0_end
   mov r4,#1      ; prvy efekt
ext_prerus_0_end:   reti   ; a von z obsluhy prerusenia
;------------------------------------
END
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
zawin



Založen: Jul 21, 2006
Příspěvky: 94

PříspěvekZaslal: ne červen 29 2008, 7:47    Předmět: Citovat

Dakujem velmi pekne za vasu pomoc Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.22 sekund