Hallo
        
        brauche Tips für ein Programm in C für C515 von Infineon.
        Benutze die Keil-Sofware zum simulieren.
        Habe 2 Ports (P3.4 und P3.5) die als Digitaleingänge benutzt werden sollen, muss jetzt ein Signal auf die Eingänge geben und sie dann wieder einlesen.
        Da mein C nicht ganz so gut ist ,bräuchte ich ein paar Hilfestellungen fürs programmieren.
        
        Vielen Dank
      
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
          Hallo Piett,
          
          mir ist zwar nicht so ganz klar, was Du machen willst,
          aber vielleicht kannst Du mit folgendem Beispiel-Code was anfangen.
          Ich habe das von Keil mitgelieferte Beispielprojekt "hello.uv2"
          ein wenig abgeaendert.
          Uebrigens sind die Ports P3.4 und P3.5 bidirektional. Sie koennen somit
          als Ein- oder Ausgaenge verwendet werden. Beim 8051 gibt es zur Konfiguration
          der Richtung(Ein- oder Ausgang) der Ports keine Einstellmoegichkeiten ueber ein
          Direction Register, wie es beim C166 der Fall ist.
          Die Ports P3.4 und P3.5 koennen als spezielle Eingaenge benutzt werden,
          die mit Timer0 bzw. Timer1 verknuepft werden koennen. Die Timer bzw. Counter
          zaehlen dann die Anzahl der 1/0 Uebergange.
          
          In meinem Beispiel-Code habe ich nur Port P3.4 mit Timer0 verknuepft,
          da Timer1 beim Debuggen ueber die serielle Schnittstelle verwendet wird.
          Im Simulator kannst Du dann im Menue "Peripherals/IO-Ports/Port3" die Eingaenge
          der Ports aendern. Mit printf werden dann die Ports im Ausgabefenster,
          dass Du im Menue "View/Serial Window1" aktivieren jannst, ausgegeben.
          
          
          #include <reg515.h>
          #include <stdio.h>
          
          
          sbit p3_4=P3^4;
          sbit p3_5=P3^5;
          
          void main (void)
          {
          
          /*------------------------------------------------
          Setup the serial port for 1200 baud at 16MHz.
          ------------------------------------------------*/
          #ifndef MONITOR51
          SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
          TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
          TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */
          TR1 = 1; /* TR1: timer 1 run */
          TI = 1; /* TI: set TI to send first char of UART */
          #endif
          
          /*
          ** Timer 0 initialisieren
          ** Timer 0 kann als Counter benutzt werden.
          ** der jedesmal wenn Port 3.4 von 1 auf 0 geht,
          ** hochgezaehlt wird
          */
          TMOD &= 0xF0; // Timer 0 als 16 Bit Counter benutzen
          TMOD |= 0x05;
          TH0 = 0; // Timer 0 ruecksetzen
          TL0 = 0;
          TR0 = 1; // Timer 0 starten
          
          while (1)
          {
          // Port P3.4, P3.5 und Timer0 ausgeben
          printf("P3.4:%02bX,P3.5:%02bX,TH0:%02bX,TL0:%02bX\n",
          (unsigned char)p3_4,(unsigned char)p3_5,TH0,TL0);
          }
          }
          
        
