Hallo, ich habe hier ein Project mit einem pic 18f4550.
Mit dem Controller wird eine 2 Farben LED angesteuert. Das ganze ist etwas kompliziert gemacht, da diese LED keine gemeinsame Masse hat und die LEDs antiparallel geschaltet sind.

Nun wollte ich erstmal ein kleines Testprogramm schreiben, bei dem die LED grün und rot abwechselnd blinkt.

Bei der schaltung müssen für rot folgende Bedingungen erfüllt sein:
RB0: Input
RB1: Output und High
RB2: Input
RB3: Output und Low

für grün siehts so aus:
RB0: Output und low
RB1: Input
RB2: Output und High
RB3: Input

Wenn ich nur eine der Farben erzeugen will funktioniert das ganze auch, nur klappt es nicht wenn ich die Farben wechseln will.
Was mache ich falsch?
Kann ich die nicht einfach neu definieren, so wies hier steht?

Hab mal die Spannungen gemessen. Komischerweise sind RB1 und RB2 bei 5V und RB0 und RB3 bei0V

Eine Frage hab ich noch:
Wie kann ich die Internen Pullups aktivieren, oder sind die bei Input schon automatisch aktiv?

Code:
/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include "delays.h"

/** V A R I A B L E S ********************************************************/
#pragma udata


int		switch_setting = 0;

/** P R I V A T E  P R O T O T Y P E S ***************************************/

/** V E C T O R  R E M A P P I N G *******************************************/

extern void _startup (void);        // See c018i.c in your C18 compiler dir
#pragma code _RESET_INTERRUPT_VECTOR = 0x000800
void _reset (void)
{
    _asm goto _startup _endasm
}
#pragma code

#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
void _high_ISR (void)
{
    ;
}

#pragma code _LOW_INTERRUPT_VECTOR = 0x000818
void _low_ISR (void)
{
    ;
}
#pragma code

/** D E C L A R A T I O N S **************************************************/
#pragma code
/******************************************************************************
 * Function:        void main(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Main program entry point.
 *
 * Note:            None
 *****************************************************************************/
/** L E D ***********************************************************/
#define mInitAllLEDs()      LATD &= 0xF0; TRISD &= 0xF0;

#define mLED_1              LATDbits.LATD0
#define mLED_2              LATDbits.LATD1
#define mLED_3              LATDbits.LATD2
#define mLED_4              LATDbits.LATD3

#define mLED_1_On()         mLED_1 = 1;
#define mLED_2_On()         mLED_2 = 1;
#define mLED_3_On()         mLED_3 = 1;
#define mLED_4_On()         mLED_4 = 1;

#define mLED_1_Off()        mLED_1 = 0;
#define mLED_2_Off()        mLED_2 = 0;
#define mLED_3_Off()        mLED_3 = 0;
#define mLED_4_Off()        mLED_4 = 0;

#define mLED_1_Toggle()     mLED_1 = !mLED_1;
#define mLED_2_Toggle()     mLED_2 = !mLED_2;
#define mLED_3_Toggle()     mLED_3 = !mLED_3;
#define mLED_4_Toggle()     mLED_4 = !mLED_4;

/** PORTB Red LED ******************************************************/


#define mInitRedLED() 		LATB &= 0xF5; TRISB &= 0xF5;

#define mRB1				LATBbits.LATB1	
#define mRB3				LATBbits.LATB3

#define mRB1Red()			mRB1 = 1;
#define mRB3Red()			mRB3 = 0;				


/** PORTB Green LED ******************************************************/


#define mInitGreenLED() 	LATB &= 0xFA; TRISB &= 0xFA;

#define mRB0				LATBbits.LATB0	
#define mRB2				LATBbits.LATB2

#define mRB0Green()			mRB0 = 0;
#define mRB2Green()			mRB2 = 1;		


/** S W I T C H *****************************************************/
#define mInitAllSwitches()  TRISBbits.TRISB4=1;TRISBbits.TRISB5=1;
#define mInitSwitch2()      TRISBbits.TRISB4=1;
#define mInitSwitch3()      TRISBbits.TRISB5=1;
#define sw2                 PORTBbits.RB4
#define sw3                 PORTBbits.RB5



void main(void)
{
    ADCON1 |= 0x0F;                 // Default all pins to digital
    mInitAllSwitches();
    mInitAllLEDs();

    while(1){

	mInitGreenLED();
	mRB0Green();
	mRB2Green();

	Delay10KTCYx(1000);

	mInitRedLED();
	mRB1Red();
	mRB3Red();

	Delay10KTCYx(1000);


		




    }//end while
}//end main

Hier nochmal der Teil, worauf es mir ankommt. Die Umschaltung der der Eingänge zu Ausgängen und die der einzelnen Pegel:
Code:
/** PORTB Red LED ******************************************************/


#define mInitRedLED() 		LATB &= 0xF5; TRISB &= 0xF5;

#define mRB1				LATBbits.LATB1	
#define mRB3				LATBbits.LATB3

#define mRB1Red()			mRB1 = 1;
#define mRB3Red()			mRB3 = 0;				


/** PORTB Green LED ******************************************************/


#define mInitGreenLED() 	LATB &= 0xFA; TRISB &= 0xFA;

#define mRB0				LATBbits.LATB0	
#define mRB2				LATBbits.LATB2

#define mRB0Green()			mRB0 = 0;
#define mRB2Green()			mRB2 = 1;		

 while(1){

	mInitGreenLED();
	mRB0Green();
	mRB2Green();

	Delay10KTCYx(1000);

	mInitRedLED();
	mRB1Red();
	mRB3Red();

	Delay10KTCYx(1000);


		




    }//end while




Vielen Dank fürs Lesen.