Söker programmeringstips, XOR på PORTB
Postat: 23 oktober 2006, 06:31:58
Det gäller 16F628A.
Jag har två pinnar på PORTB som växlande ska vara var hög resp låg under aktiva tiden i en PWM-period. Under den passiva tiden är TRIS=1 för aktuella pinnar. Innan jag går in i aktiva perioden (Sätter TRIS till 0) vill jag växla pinnarnas värden.
Jag tänkte använda koden: PORTB^=OutTOGGLE; för att få tänkt funktion. OutTOGGLE är en mask som har värdet 0 vid alla bitar utom de aktuella pinnarnas positioner. Det kommer dock inte att funka eftersom PORTB är ingångar som har pullup när TRIS=1;
Har in några tips på hur man kan göra detta snabbt?
Här är den aktuella koden:
Jag har två pinnar på PORTB som växlande ska vara var hög resp låg under aktiva tiden i en PWM-period. Under den passiva tiden är TRIS=1 för aktuella pinnar. Innan jag går in i aktiva perioden (Sätter TRIS till 0) vill jag växla pinnarnas värden.
Jag tänkte använda koden: PORTB^=OutTOGGLE; för att få tänkt funktion. OutTOGGLE är en mask som har värdet 0 vid alla bitar utom de aktuella pinnarnas positioner. Det kommer dock inte att funka eftersom PORTB är ingångar som har pullup när TRIS=1;
Har in några tips på hur man kan göra detta snabbt?
Här är den aktuella koden:
Kod: Markera allt
#pragma bit OutA @ PORTB.0
#pragma bit OutB @ PORTB.3
#define OutOFF 0b0000.1001
#define OutON 0b1111.0110
#define OutTOGGLE 0b0000.1001
bit outMode;
...
...
if (CCP1IF) //Sköter pulserandet
{
if (outMode==OFF)
{
//Detta vill jag göra --------------------------------------------
PORTB^=OutTOGGLE;
//-----------------------------------------------------------------
TRISB&=OutON; //Sättigång
CCPR1H=pulseWidth.high8;
CCPR1L=pulseWidth.low8;
outMode=ON;
}
else
{
TRISB|=OutOFF; //Stängav
CCPR1H=pulseDiff.high8;
CCPR1L=pulseDiff.low8;
outMode=OFF;
}
CCP1IF=0;
}