Prerušenie od RB7/4 v PIC 16F628A

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 01:00

Prerušenie od RB7/4 v PIC 16F628A

#1 Příspěvek od relatko »

Zdravím.
Pri programovaní jedného môjho projektu som zistil že po vyvolaní prerušenia od pinov RB7/4(PIC16F628A prog. je v asm.)mi program nedokáže zmazať prízmak prerušenia od spomínaných RB7/4 ani opäť globálne povoliť všetky prerušenia.Dostane sa do slučky a stále sa vracia na začiatok prerušenia.Pokiaľ nastavím prerušenie napr.od pinu RB0 ,tak nie je žiadny problém.Pripájam "cvičný"projekt na ktorom to taktiež nefunguje.Prosím o radu.
Vopred ďakujem.
Relatko.
Přílohy
prerusenie_problem.rar
(12.42 KiB) Staženo 101 x

Uživatelský avatar
urbanek
Příspěvky: 556
Registrován: 01 kvě 2005, 02:00
Kontaktovat uživatele:

#2 Příspěvek od urbanek »

Na začátku obsluhy přerušení je potřeba nejdřív zakázat přerušení od RB, přečíst port a nulovat flag přerušení. Pak provést všechny potřebné akce, na konci pro jistotu ještě jednou přečíst port a znovu povolit přerušení...

Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 01:00

#3 Příspěvek od relatko »

urbanek píše:Na začátku obsluhy přerušení je potřeba nejdřív zakázat přerušení od RB...
To sa mi podarilo.

urbanek píše:nulovat flag přerušení
Ale tento príznak sa mi nedá zmazať.Ani vtedy keď už nieje stlačené žiadne tl na RB7/4.

Uprav to prosím v mojom zdrojáku a daj to sem.Ďakuje.Relatko.

Stan3

#4 Příspěvek od Stan3 »

Zkus tohle jestli to pùjde:
Přílohy
prerusenie_problem.asm
(1.7 KiB) Staženo 148 x

Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 01:00

#5 Příspěvek od relatko »

Stan3 píše:Zkus tohle jestli to půjde:
Mrzíma ale nejde.Stále sa nedá zmazať príznak prerušenia od RB7/4 RBIF.
Nevadí ,skúmam to ďalej.
Relatko.

Uživatelský avatar
urbanek
Příspěvky: 556
Registrován: 01 kvě 2005, 02:00
Kontaktovat uživatele:

#6 Příspěvek od urbanek »

Můžu se zeptat, jak máš ten port RB zapojený? Vzhledem k tomu že máš celý port jako vstupní a pull-upy vypnutý, nesmí žádný pin z RB být "v luftě" jinak jsou na vstupu nedefinované hodnoty a přerušení to bude vyvolávat neustále...

Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 01:00

#7 Příspěvek od relatko »

Momentálne to nemám nijak zapojené len to testujem v MPlabe.Skúšal som to aj z pull-up odpormi aj bez nich,a je to stále rovnaké.Relatko.

Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 02:00
Bydliště: Kladno

#8 Příspěvek od Mendor »

Zkus před nulováním RBIF přečíst PORTB a pak teprve nulovat RBIF.

Stan3

#9 Příspěvek od Stan3 »

Vèera jsem se na to poøádnì podíval a staèí pøed nulováním RBIF nulovat PORTB:

clrf PORTB
bcf INTCON,RBIF

nebo:
movf PORTB,W
movwf s_PORTB ; stav portu pro další zpracování
clrf PORTB
bcf INTCON,RBIF

Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 01:00

#10 Příspěvek od relatko »

Vďaka za rady,už to šlape ako má.Len mi prezraďte kde ste sa o tejto finte dozvedeli.V Moderní učebnice programování PIC 1 a 2.díl som to nevidel.

Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 02:00
Bydliště: Vysočina

#11 Příspěvek od Chenzee »

V datasheetu kazdého picu je toto uvedeno. V DS pro 628A je to na staně 38 v Areadru, (orig. str.36). "A mismatch condition will continue to set flag bit RBIF.
Reading PORTB will end the mismatch condition and
allow flag bit RBIF to be cleared".
:wink:
Žádnej učenej z nebe nespadl ...

Uživatelský avatar
urbanek
Příspěvky: 556
Registrován: 01 kvě 2005, 02:00
Kontaktovat uživatele:

#12 Příspěvek od urbanek »

U PICů je tohle normální, však jsem hned poprvé psal že se musí mj. přečíst port

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“