Re: pic 16f628 probléma
bela
bagameri at freestart.hu
Sat Apr 30 20:32:01 CEST 2005
> Érdekes problémába futottam bele, kíváncsi vagyok a véleményetekre.
> Írok egy soros vevő rutint, ami teljesen interruptból végezné el a
> vételt.
> A soros adat az RB0-n jön be, interruptot kérve. Ekkor én letiltom
> az rb0 int.-et (intcon,inte) törlöm a jelzőbitet (intcon,intf) és
> jelzem, hogy jön az adat. A timer rutinban kezdem fogadni a soros
> adatot, a timer0 időzítés fél bit hosszú.
> A jelenség az, hogy hiába tiltom le az rb0/int-et, az újra
> engedélyeződik a retfie utasításra.
> A könyv aztat írja:
> "The 'return from interrupt' instruction, RETFIE, exits interrupt
> routine as well as sets the GIE bit, which re-enable RB0/INT
> interrupts."
>
> Ezekszerint én nem tilthatom le a megszakítás rutinomban a további
> megszakítást?
> Tud-e valaki valami értelmes megoldást erre a problémára?
>
Nincs itt valami félreértés?
A RETFIE csak a GIE bitet állítja vissza (intcon,7), vagyis a globális
IT engedélyezőt. Az RB0-nak külön engedélyező bitje van, az intcon,4.
Viszont: Az IT flagek mindig bebillennek, amikor az interrupt feltétele
adott. Hiába van tehát letiltva az RB0 interruptod, ha billen az Rb0,
akkor az ő IT bitje is bebillen. Az engedélyező bitnek annyi a szerepe,
hogy ha le van tiltva az Rb0 IT, akkor a proci nem ugrik el a 0x04 címre.
Ez kavarodást okozhat, ha valami egyéb (pl. egy másik IT) miatt mégis a
0x04-re ugrik a proci. Ha ott végigkérdezed az IT flageket, akkor
bebillenve találod azt is, ami le van tiltva.
Én csinálnék egy jelzőflaget, ami jelzi, hogy most épp kell-e vizsgálni
az RB0 IT bitet, vagy nem.
üdv: béla
____________________________________________________________________
Miert fizetsz az internetert? Korlatlan, ingyenes internet hozzaferes a FreeStarttol.
Probald ki most! http://www.freestart.hu
More information about the Elektro
mailing list