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


von Daniel (Gast)


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.
1
sfr P0 = 0x80;
2
sfr P1 = 0x90;
3
sfr P2 = 0xA0;
4
sfr P3 = 0xB0;
5
6
void main (void) {
7
  P0 = 0;
8
  P1 = 0;
9
  P2 = 0;
10
  P3 = 0;
11
  
12
  while (1);
13
}

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

von Carlos (Gast)


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

von Thomas B. (detritus)


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.

von Daniel (Gast)


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

von Peter D. (peda)


Lesenswert?

/EA-Pin an VCC


Peter

von Thomas B. (detritus)


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.

von Carlos (Gast)


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

von Daniel (Gast)


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.

von Carlos (Gast)


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

von Daniel (Gast)


Lesenswert?

Super, danke.

Um deine Frage noch zu beantworten: Ich verwende Keil.

Danke nochmals.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.