Kérkel segíts, hogy ne maradjon hibás információ az oldalon!
Ha szerinted valami nem fedi a valóságot, kérlek írd meg, hogy javítani tudjam. Ha kérdésed van, fordulj hozzám bizalommal!

2008. június 16., hétfő

CCS és a #locate

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.
Egyszer talán kitesztelem.

Nincsenek megjegyzések: