Fórum témák

» Több friss téma
Fórum » RS232 Interrupt PIC16F628
 
Témaindító: Rikfic, idő: Aug 9, 2007
Témakörök:
Lapozás: OK   3 / 3
(#) _vl_ válasza Zolg hozzászólására (») Nov 28, 2012 / 1
 
Azért van folyamatosan az interrupt rutinban a cpu, mivel engedélyezted a TXIE bitet, és folyamatosan van transmit interrupt. Ez csak akkor múlna el, ha raknál valamit a küldő regiszterbe (és csak arra az időre múlna el, amíg a regiszter ki nem ürülne), de mivel nem raksz bele semmit, így folyamatosan jelzi az interrupt, hogy "szabad küldeni". A TXIE-t nem így kell használni: akkor engedélyezed csak, ha éppen van mit küldeni ÉS a küldő regiszter foglalt is. Nyilván az elküldendő adatot ideiglenesen valahová el kell tárolni, majd az interrupt rutinban ezt elővenni, betölteni a küldő regiszterbe, és ha nem maradt több elküldeni való byte, akkor törölni a TXIE bitet.

Egyébként más problémák is vannak, szóval ez csak a jéghegy csúcsa

Az interrupt rutin ugyanis szétgázolja a STATUS és a W regiszter tartalmát, így a főprogram egyébként sem fog tudni megbízhatóan működni. Az adatlapban a "context saving during interrupts" címszó alatt találsz példát meg leírást, hogy mit is kéne csinálni.
(#) Zolg válasza _vl_ hozzászólására (») Nov 28, 2012 /
 
Wow!!! Bejött! Köszönöm a tanácsot! Van még mit tanulni, de a végén összeáll!
Idézet:
„Az interrupt rutin ugyanis szétgázolja a STATUS és a W regiszter tartalmát, így a főprogram egyébként sem fog tudni megbízhatóan működni. Az adatlapban a "context saving during interrupts" címszó alatt találsz példát meg leírást, hogy mit is kéne csinálni.


Igen tudom, ez a progimban így is van megírva, de ez csak egy leegyszerűsített teszt program, szóval ez ok! Eddig az AN774-ből táplálkoztam, de úgy fest a küldés fejezetet nem olvastam át kellő figyelemmel... Azért érdekelne hogy milyen más problémákat találtál még? Márcsak hogy abból is tanuljak!
(#) Zolg válasza _vl_ hozzászólására (») Nov 28, 2012 /
 
Idézet:
„ÉS a küldő regiszter foglalt is”

Ide nem azt akartad írni hogy : "ÉS a küldő regiszter szabad is" ? Mert ha nem akkor nem értem....
(#) _vl_ válasza Zolg hozzászólására (») Nov 28, 2012 /
 
Ha a küldő regiszter szabad, akkor minek kérni interruptot arra az esetre, ha "majd kiürül"? Hiszen már most is szabad, ezért az interrupt rögtön meg is jönne! Nem egyszerűbb a küldeni kívánt byte-ot rögtön berakni a szabad regiszterbe, és nem szórakozni az interrupttal?

További problémák/értelmetlenségek:
- az interrupt rutinban feltételezed, hogy van mit kiolvasni a RCREG-ből (és pontosan egy olvasható byte van, és az jó adat), holott ez több okból sem biztos, hogy így van - ha egynél több interrupt forrás van, akkor pl. ez eleve nem egyértelmű, de ha csak az RXIF lehet az egyetlen ok, akkor is lehetnek más hibák is, ezeket is kéne kezelni (FERR, OERR)
- movwf trisb helyett trisd
- call loop, mikor sose tér vissza a főprogram (ide inkább goto kéne)
- előbb engedélyezed az interruptokat, aztán konfigurálod fel az adott perifériát
(#) Zolg válasza _vl_ hozzászólására (») Nov 28, 2012 /
 
Értem és köszönöm a kritikát...javítom a felsoroltakat. Ha jól értelmezem akkor ennek fényében igazából nincs is értelme, 1 bájtos küldésnél iterruptot kérni a küldésre. Azt úgyis tudom mikor következik be.
Annyiban viszont megvédeném magam hogy csak ebben a programban tételezem fel hogy 1 bájt érkezik, mert ez csak egy teszt program, egyébként indirekt címzéssel hozok létre egy "tömböt" és abba tárolom az adatot ameddig csak jön. Viszont a hibakezelés még ott sincs kész, de dolgozom rajta!
Következő: »»   3 / 3
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem