Fórum témák
» Több friss téma |
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.
Wow!!! Bejött! Köszönöm a tanácsot!
![]() 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! ![]() ![]() 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.... ![]()
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
É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! ![]() |
Bejelentkezés
Hirdetés |