mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051er in C Programmieren - Programm wird nicht ausgeführt


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich programmiere einen 8051er in C und lade das erstellte Programm 
mittels ISP auf meinen Mikrocontroller.

Ich wollte zu Testzwecken einfach mal alle Ports auf Low setzen.
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;

void main (void) {
  P0 = 0;
  P1 = 0;
  P2 = 0;
  P3 = 0;
  
  while (1);
}

Leider habe ich auf fast allen Ports immer noch VCC.

Das Programm wird ohne Probleme auf meinen Controller übertragen. Das 
HEX File auf derm Prozessor ist ident mit downgeloadeten.

Würde mich über ein paar Ratschläge freuen.

Gruß Daniel

Autor: Carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Daniel,
was für einen 8051 benutzt Du ?
Hat er den Daten- und Programmspeicher extern angeschlossen ?
Denn dann kann das Programm nicht funktionieren, da über Port P0 und 
über Port 2 der externe Daten- und Adressbus des 8051ers realisiert 
wird.
Laß diese beiden Ports einfach mal weg.

Das Gleiche gilt für einige Pins von Port P3, da hierüber die RD\- und 
WR\-Steuersignale für externe Daten-Speicher bzw. Peripherie-Bausteine 
realisiert werden.

Wie mißt Du den Pegel an den Port-Pins ?
Nicht mit einem Multimeter, sondern besser mit einem Oszilloskop, denn 
dann siehst Du sehr schnell, ob sich noch etwas anderes tut.

Gruß
Carlos

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Syntax mit dem "sfr" sieht mir irgendwie verdächtig aus. Wenn das 
ein Compiler für den 8051 ist, binde das headerfile für deinen µc ein 
und greife dann auf P0 usw zu.
P0...P3 sind normalerweise "fertige" Zeiger, die du einfach so verwenden 
kannst.
Ansonsten (gesetzt den Fall, das mit dem sfr geht so überhaupt) könnte 
auch ein "volatile" davor helfen.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Ich benutze den AT89S52 von Atmel.

Es wundert mich sowieso, dass die einzelnen Prots nicht als Ein- oder 
Ausgänge definiert werden.

Nein, ich habe keine externen Speicher dazugeschalten.

Ja, ich messe mit einem Oszilloskop.

Daniel

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/EA-Pin an VCC


Peter

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim 8051 musst die Datenrichtungsumschaltung vom AVR nicht machen. Bei 
nem Lesezugriff ist es ein Eingang und beim Schreiben ein Ausgang. Kein 
DDR-Register.

Hau mal den ganzen Block

sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;

weg und lass den Rest. Dazu noch irgendwas in der Richtung #include 
<AT89S52.h> oben reinschreiben (näheres dazu in der Doku deines 
Compilers) und es sollte sich was tun.

Autor: Carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Du hast nichts externes an P0 und P2 angeschlossen und arbeitest 
nur mit den internen Einheiten des µC´s.

Port P0 benötigt dann aber externe Pull-Ups, um als Ausgang zu arbeiten.

Die Port brauchst Du generell nicht beosnders als Ausgänge zu 
programmieren, Du gibt einfach das Bit-Muster aus.
Versuche einfach nur einmal an Port P1 eine Rechteckschwingung 
auszugeben:

void main (void)
{
   while(1)
   {
      P1=0xaa;
      P1=0x55;
   }
}

Das kannst Du gut mit dme Oszilloskop messen.

Allerdings sehen Deine SFR-Definitionen etwas merkwürdig aus.
Welchen Compiler benutzt Du ?

Gruß

Carlos

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So viele Antworten in so kurzer Zeit. Ist ja super hier =).

So ich habe den EA Pin nun auf Vcc gelegt.

Die Bilbliothek heißt AT89X52.h.

Nein ich benutze keine externen Pull Up Widerstände. Braucht die nur der 
P0 oder alle 4 Ports?

Also das Ausgeben des Rechtecks hat wunderbar funktioniert danke.

Autor: Carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die externen Pull-Ups sind nur bei Port P0 notwendig.

Wenn Du an Port P2 und P3 nicht anderes angeschlossen hast, kannst Du 
nun die Rechteckschwingung auch über diese Ports ausgeben.

Carlos

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, danke.

Um deine Frage noch zu beantworten: Ich verwende Keil.

Danke nochmals.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.