Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Tips für ein Programm in C für C515 von Infineon

piett / 6 Antworten / Flachansicht Nickles

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

bei Antwort benachrichtigen
Bon1 piett „Tips für ein Programm in C für C515 von Infineon“
Optionen

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);
}
}

bei Antwort benachrichtigen
Bon bitte noch mal piett
Bon bitte noch mal Bon1
Bon bitte noch mal piett
Hat sich erledigt piett