Hey..

Hier der Code...
Ich habe gerade nur einen etwas anderen teil zur verfügung..
der einzige unterschied ist nur, dass statt dem Ausgang mit einer LED der ausgang mit dem Gate genutzt wird (habt den code angepasst, könnte aber minimale abweichungen vom verwendeten haben - den poste ich heut abend - sorry)

Hoffe das hilft bei der lösung

MfG
ngb

Code:
//-----------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------//
//                         RS485- Implementierung mit MAX 485                              //
//                      Autor: Niels Göran Blume 2007 für ROUVus                           //
//                               www.hardegser-sv.de/rov                                   //
//-----------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------//
/*
   Hardware- Konzessionen:
   Atmega8 mit UART an PORTD0 und PORTD1 und Switch Receive/Send für MAX 485 an PORTD2
   Halb-Duplex
*/

/*    Protokoll- Definition:
   Das Protokoll ist auf den One-Master-Multi-Slave-Betrieb ausgelegt.
   Bei entsprechender Programmierung ist auch ein eingeschränkter
   Multi-Master-Betrieb möglich.
   
   Standard: Jede Nachricht startet mit "!".
   Es folgt die Adresse des Ziels in einem Byte.
   Nun folgen 5 Datenbytes, die beliebig gefüllt werden können (Erweiterung einfach möglich).
   Am Ende steht in der Zielmaschine ein char- Array bereit, dass alle Bytes seit dem "!"
   (sprich Adresse und 5 Datenbytes) enthält.
   
   | ! | a | L | E | D | 1 | 1 | als Beispiel...
   
   An Adresse "a" ergeht die Nachricht "LED11", was vielleicht als "LED1 auf Status 1 setzen"
   interpretiert werden könnte.
*/

#define F_CPU       16000000UL

#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <string.h>
#include "rs485.c"

int main(void)
{
    rs485_init();                                 //USART initialisieren (8 Datenbits, no Parity, 1 Stopbit)
                                             //Baud: 19200
   DDRD = (1<<DDD2)|(1<<DDD3);                     //Output DDD2 setzen für Send/Receive- Wechsel
                                             //DDD3 für ne LED
   warte(5000);
   
   rs485_puts('a',"Melde mich zum Dienst ! Meine Adresse: b");
   
   sei();                                       //Interrupts enablen
   
   PORTD &= ~(1 << 1);                           //Gate-Port ausschalten
   
   while(1)                                    //Reaktion in Schleife
   {
      if (befehl_fertig == 1)                     //Befehl vorhanden
      {
         warte(5000);                           //Zeit damit ich den Sende-Mode am PC mit der Maus beenden kann
         if(strcmp(buffer, "bpwm11") == 0)            //Beispielkommando als Vergleichsgrundlage
         {                                    
            PORTD |= (1 << 1);                     //mit einzelnem Byte (&buffer[i]) | Gate an
         };
         if(strcmp(buffer, "bpwm10") == 0)            //Beispielkommando als Vergleichsgrundlage
         {                                    
            PORTD &= ~(1 << 1);                     //mit einzelnem Byte (&buffer[i]) | Gate an
         };
         befehl_fertig = 0;                        //Befehl abgearbeitet - Status zurücksetzen
      }
   };
}