Stránka 1 z 1

Prerušenie od RB7/4 v PIC 16F628A

Napsal: 22 srp 2009, 13:13
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.

Napsal: 22 srp 2009, 13:33
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í...

Napsal: 22 srp 2009, 14:36
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.

Napsal: 22 srp 2009, 16:08
od Stan3
Zkus tohle jestli to pùjde:

Napsal: 22 srp 2009, 17:46
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.

Napsal: 22 srp 2009, 19:43
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...

Napsal: 22 srp 2009, 20:19
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.

Napsal: 22 srp 2009, 21:14
od Mendor
Zkus před nulováním RBIF přečíst PORTB a pak teprve nulovat RBIF.

Napsal: 23 srp 2009, 07:30
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

Napsal: 23 srp 2009, 10:39
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.

Napsal: 23 srp 2009, 11:09
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:

Napsal: 23 srp 2009, 12:09
od urbanek
U PICů je tohle normální, však jsem hned poprvé psal že se musí mj. přečíst port