[elektro] PIC C IO portok kezelese
potyo
potyo.ada at gmail.com
Sat Oct 23 21:11:03 CEST 2010
Várjunk, 16F-nél nem lehet a kimenetre írást teljes mértékben
elszeparálni az olvasástól. Ha egész portot írsz, akkor egész portot
írsz, az összes kimenetre állított láb felveszi azt az értéket, amit a
hozzá tartozó bitben kapott, a bemenetre állított lábak olvasásakor
meg azt olvasod be, ami fizikailag a lábon van (feltéve, hogy az
analóg funkciók ki vannak kapcsolva). Ez a hardverből ered,
programozási nyelvtől függetlenül ez történik, tehát a bemenetre
állított lábakon csak akkor kaphatod azt olvasáskor, amit ráírtál, ha
a lábon fizikailag is az jön be. Ha csak egy bitet módosítasz, akkor
jön a képbe az RMW, ami azt jelenti, hogy a hardver először beolvassa
a porton levő értékeket (kimenet és bemenetet is), módosítja az adott
bitet, majd visszaírja a teljes portot. Ebből aztán jöhet 1-2
probléma, de ez megint nem programozási nyelvtől függ.
C-ben egy bitet valami ilyesmivel tudsz állítani:
PORTC1=1; // BSF PORTC, 1
PORTC1=0; // BCF PORTC, 1
PORTC1=!PORTC1; // invertálja az adott bitet
Ez első dologra csinálj egy egyszerű mintakódot, amin tudod produkálni
a hibának vélt dolgot és tedd fel ide. Illetve nézd meg a fordított
asm listát is, sokat lehet tanulni belőle.
Gergely Vakulya <antiemes at gmail.com> írta (2010. október 23. 20:55):
> Udvozletem!
>
> Most kezdek atszokni PIC-en assemblyrol C-re es adodott nehany
> problemam. Egy olyan aramkort keszitek, amin LED kijelzok es
> nyomogombok vannak (egyeb mas dolgok mellett). A portok teljesen
> vegyesen inputok, illetve outputok. A kovetkezo ket gondom van eddig:
> - Nem tudom azt mondani, hogy PORTx|=foo; PORTx&=~bar; Bizonyos
> esetekben nemelyik bitet kinullazza. ASM-ben ugye lehetett a biteket
> egyenkent is piszkalni anelkul, hogy fenntartok egy plusz valtozot,
> ahol pluszban eltarolom a valtozok elozo erteket.
> - Hogyan tudom elszeparalni egy port kimenetere torteno irast az
> olvasastol? Mivel ha egy valtozo erteket kiirom egy portra, akkor azok
> az ertekek a bemeneti latch-ben is megjelennek.
>
> Ja, es tovabbra is Hi-Tech PIC C es PIC16F877A.
>
> Elore is koszonom.
>
> By(t)e
> TBS::Antiemes
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list