A CCS PICC nagy előnyének látom azt, hogy bármely változót, így akár struct-ot is, egyben kirakhatunk egy PORT-ra, sőt, akár köthetjük is a porthoz. Így bármilyen bit változik a változóban, az megjelenik a Pic kimenetén. Ez struct-ok esetében kényelmes és nagyon jól olvasható kódot ad.
A legutóbbi esetben a kimeneti portnak csak egy részét szerettem volna a következő kód segítségével uralni.
#byte portc = GETENV("sfr:portc")
/*Ez teljességgel azonos a régebbi verziókban használt változattal, amit most is lehet használni
int portc;
#locate portc= GETENV("sfr:portc")
*/
Ehhez a megoldáshoz elengedhetetlen volt a byte maszkolások segítségével történő manipulálása. De bármit tettem, az előzőleg kirakott adatot mindig felülírta a következő. Legalábbis úgy tűnt és csak a sokadik próbálkozásra tűnt fel, hogy nem felülírta, hanem elveszett minden lépésnél az adat. Így már eljutottam oda, hogy a #locattel elhelyezett változókon keresztül valamiért nem lehet visszaolvasni a kimeneti port aktuális állapotát. A megoldáshoz jelenleg egy átmeneti változót vezettem be és a változásokat ennek segítségével helyezem át a portra.
Egyenlőre nem tudom, hogy ez a hiba miért jelentkezik így, de több ötletem is van rá:
- A PICC az olvasás hatására bemenetté konfigurálja a portot és így az nincs hajtva és az üres portot olvassa be.
- A PICC nem veszi figyelembe, hogy a 16F690-es sfr memóriaterülete bankokra van osztva a változón keresztüli olvasáskor és nem választja ki a megfelelő bankot.
Nincsenek megjegyzések:
Megjegyzés küldése