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