Hallo Nachbar,

in Bascom bin ich ja die bekannte Doppelnull - wo ich doch schon in Cäh ne Null bin. Aber hier mal auf die Schnelle ein Schnippsel, wie ICH bei meinen Döschen die Motoren schalte (ist aber ein H-Brücken-IC). Weiß ja nicht ob Dir das hilft. In den Wahrheitstabellen der H-Brücken-ICs gibts vielleicht auch ne Hilfe/Erklärung.
Code:
Initialisierung:
/* ============================================================================== */
/* ==  PWM-Routinen zur Motoransteuerung  ======================================= */
 void TC0PWM_init(void)	//Init Timer/Counter0 für Erzeugung des PWM-Signals
 {
   TCCR0A |= (1<<COM0A1)|(1<<COM0B1);   //Clear/set OC0A/OC0B on Compare Match,
                                        //    doc S102 , OC0A/OC0B ist Port PD6/D5
   TCCR0A |= (1<<WGM01)|(1<<WGM00);     // Fast PWM, TOP=0xFF=dez255,     doc S104
                //  das ergibt aus 20 MHz mit Prescaler 1/64  1220 Hz
   TCCR0B |= (1<<CS01)|(1<<CS00);       // Prescaler ist clk/64           doc S106
   TIMSK0 &= ~(1<<OCIE0A)|(1<<OCIE0B);	// Tmr/Cntr0 Oput CompB Match intrrpt dsabld
   TIMSK0 &= ~(1<<TOIE0);		// Tmr/Cntr0 Overflow interrupt disabled
   OCR0A     = 0;                       // PWM auf Null setzen
   OCR0B     = 0;                       // PWM auf Null setzen
   Iz_diff0  = 0;
   isum12    =  isum34    = 0;
   ie_mot12  =  ie_mot34  = 0;
   ie_alt12  =  ie_alt34  = 0;
}            
/* ============================================================================== */
void setPWMrechts(uint8_t speed)        //Geschwindigkeit Motor 12 (rechter)
{OCR0B = speed;}                        //  PWM auf PD5/OC0B, korrig. 24mrz09
/* ============================================================================== */
void setPWMlinks(uint8_t speed)         //Geschwindigkeit Motor 34 (linker)
{OCR0A = speed;}                        //  PWM auf PD6/OC0A, korrig. 24mrz09
/* ============================================================================== */
...
und die verschiedenen Richtungen:
//  Drehrichtungsbefehle für Motor 1,2 = "rechter" Motor
 void M12pos (void)             // Mot12 dreht im Uhrzeigersinn = neg. math.
 { PORTB  |=  (1<<PB4);  PORTD  &= ~(1<<PD4);  mdir12 = 1; }
//             r r r r r r r Motor 1,2 = rechter Motor r r r r r r
 void M12neg (void)             // Mot12 dreht im mathematisch positiven Drehsinn
 { PORTB  &= ~(1<<PB4);  PORTD  |=  (1<<PD4);  mdir12 = -1; }
//             r r r r r r r Motor 1,2 = rechter Motor r r r r r r
 void M12stp (void)             // Motor 12 aus
 { PORTB  &= ~(1<<PB4);  PORTD  &= ~(1<<PD4); }
//                -----------------------
//  Drehrichtungsbefehle für Motor 3,4 = "linker" Motor
 void M34neg (void)             // Mot3,4 dreht im Uhrzeigersinn = neg. math.
 { PORTB  |=  (1<<PB0);  PORTD  &= ~(1<<PD7);  mdir34 = 1; }
//             l l l l l l l Motor 3,4 = linker Motor l l l l l l
 void M34pos (void)             // Mot3,4 dreht im mathematisch positiven Drehsinn
 { PORTB  &= ~(1<<PB0);  PORTD  |=  (1<<PD7);  mdir34 = -1; }
//             l l l l l l l Motor 3,4 = linker Motor l l l l l l
 void M34stp (void)             //  Motor 12 aus
 { PORTB  &= ~(1<<PB0);  PORTD  &= ~(1<<PD7); }
// - - - -
Anmerkung zum Code: beim Mot12 geht Mot12neg in die mathematisch positive Richtung, weil Motxxneg natürlich "fahre rückwärts" heißt.
Vielleicht bringt Dir das RNWiki mehr Hilfe?