-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Atmel AT89S8252 Ports ansprechen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2005
    Ort
    Oberhausen
    Alter
    30
    Beiträge
    18

    Atmel AT89S8252 Ports ansprechen

    Anzeige

    Hi!

    Bin ziemlich neu in der Szene der µc's. Habe nun ein lauffähige Platine mit dem µc AT89S8252. Nun wollte ich wissen wie ich mit C-Quelltext einzelne Ports ansprechen kann. Zum Beispiel ob der Signal Pegel am Port 2.7 HIGH oder LOW ist. Keiner mir einer verraten wie das geht?

    Danke schonmal im vorraus

    cya

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    25.04.2005
    Ort
    Aachen
    Alter
    56
    Beiträge
    21
    Hi,
    Wahrscheinlich willst Du ein Programm schreiben, das auf dem µC läuft, oder?
    Dafür brauchst Du einen Compiler und die Möglichkeit, das resultierende Hex- oder Bin-File in den Speicher des Controllers zu laden.

    Ich selbst habe zwar diesen Controller schon mehrfach eingesetzt, aber in Assembler. Das Prinzip bleibt das gleiche.
    8051 und die meisten Abkömmlinge sprechen die Ports über SFRs (Special Function Register) an. Mit bestimmten Befehlen kann man dann das Bit-Muster in das SFR für den gewünschten Port schreiben. Vorher muss man noch den Port als Ausgabeport konfigurieren, wiederum über ein anderes SFR. Die Liste der SFRs und Ihrer Funktion entnimmst Du am besten dem Datenblatt (erhältlich z.B. bei www.reichelt.de) des AT89S8252 und seines Urahnen 8051 oder einem Buch über die 8051 Familie. Die "Bibel" der 8051 Programmierung ist nmM das "8051 Kochbuch".

    In C sind diese SFRs in Form von globalen Variablen erreichbar (zumindest habe ich das mal in einer C-Source für 8051 so gesehen, es könnte auch per Funktionsaufruf gelöst werden).

    Wenn Du eher an ein C-Programm denkst, das auf dem PC läuft, kommt es auf die Firmware Deiner µC-Karte an. Es gibt solche Controller, die als Steuerkarte für den PC gedacht sind. Wie man dabei den µC dazu bringt, einen seiner Ports zu bedienen ist sehr unterschiedlich.

    Schwabix

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2005
    Ort
    Oberhausen
    Alter
    30
    Beiträge
    18
    Nein nicht direkt. Ich habe bereits ein Programm geschrieben und ein LCD Display damit angesteuert und auch Text drauf ausgegeben. Nun möchte ich einen Taster an Port 2 Pin 7 anschliessen und beim betätigen dieses Taster wird der Signal Pegel ja auf 0 gesetzt. Nur wie kann ich den Zustand von Port 2 Pin 7 abfragen ob der HIGH oder LOW ist?

    cya

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    25.04.2005
    Ort
    Aachen
    Alter
    56
    Beiträge
    21
    Ach, wahrscheinlich hast Du ein Problem mit einer Marotte der 8051er (möglicherweise auch bei anderen µCs vorhanden):

    Ein Ein- und Ausgang eines Ports ist dieselbe Leitung. Soll es ein Eingang sein, muss das entsprechende Ausgangs-Bit auf logisch "!" gesetzt werden, ansonsten würde der Ausgangstransistor auf logisch "0" ziehen.

    Also:
    setb P2.7 ; als Eingang konfigurieren
    ...
    mov A,P2 ; Port 2 einlesen
    anl A,#80h ; Bit 7 maskieren, dann vergleichen
    jz key_pressed
    ; Nix gedrückt
    ...
    key_pressed
    ; Taste gedrückt

    Das geht mit Bitadressierung noch sehr viel schöner, aber dann lässt es sich nicht mehr so einfach nach C übersetzen.

    Schwabix

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2005
    Ort
    Oberhausen
    Alter
    30
    Beiträge
    18
    Danke nur kann mir das mal einer in C übersetzen ich kann noch kein Assembler
    Sry

    cya

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    25.04.2005
    Ort
    Aachen
    Alter
    56
    Beiträge
    21
    Ich könnte mir vorstellen, dass das dann ungefähr so aussieht:

    port2 = port2 | 0x80; // bit 7 in Port 2 setzen

    if ((port2 & 0x80) == 0) {
    // Nix gedrückt
    }
    else {
    // Taste gedrückt
    }

    Statt "port2" könnte es auch "P2" heißen. Hilft das weiter?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2005
    Ort
    Oberhausen
    Alter
    30
    Beiträge
    18
    Ja tut es nur muss ich noch was deklarieren damit der weiss was mit p2 gemeint is? Wenn ja wie?

    cya

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.03.2005
    Ort
    Nürnberg
    Alter
    37
    Beiträge
    118
    Hallo Unrealfighter

    Ich selbst programmiere eigentlich auch nur in Assembler.
    Aber ich habe hier etwas Code für den Reads51 C-Compiler.
    Um die SFRs zu deklarieren mußt du nur ein
    #include <sfr51.h>
    in deinen Code mit aufnehem.
    Das ist eine Headerdatei. Darin sind bereits alle SFR deffiniert.
    Danach kannst du einfach mit
    n = p2
    auf den Port2 zugreifen.
    Wenn du einen anderen Compiler benutzt muß die Headerdatei evtl. auf eine andere Art eingebunden werden. Das steht bestimmt in der Beschreibung. Es kann auch sein das er dann andere Schlüsselwörter benutzt. Öffne also einfach die sfr51.h und schau was darin steht.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.03.2005
    Ort
    Nürnberg
    Alter
    37
    Beiträge
    118
    Zitat Zitat von Schwabix
    Hi,
    Mit bestimmten Befehlen kann man dann das Bit-Muster in das SFR für den gewünschten Port schreiben. Vorher muss man noch den Port als Ausgabeport konfigurieren, wiederum über ein anderes SFR.
    Das finde ich etwas missverständlich.
    Alle 8051-Derivate die ich kenne haben quasi-bidirektionale Ports. Es existiert also kein Richtungsregister in dem man den Port als Ein- oder Ausgang deklarieren könnte. Um ihn als Eingang zu benutzen setzt man ihn einfach auf high. Dann kann er dem extern anliegenden Signal folgen.
    Benutzt man ihn als Ausgang setzt man die Bits einfach wie man das gerne möchte.
    Möglicherweise gibt es da Ausnahmen.
    Sollte das so sein lasse ich mich gerne eines besseren belehren.

    Ps.
    @Schwabix
    Ich sehe gerade du hast das ja selbst auch schon so erklärt.
    Zitat Zitat von Schwabix
    Ach, wahrscheinlich hast Du ein Problem mit einer Marotte der 8051er (möglicherweise auch bei anderen µCs vorhanden):

    Ein Ein- und Ausgang eines Ports ist dieselbe Leitung. Soll es ein Eingang sein, muss das entsprechende Ausgangs-Bit auf logisch "!" gesetzt werden, ansonsten würde der Ausgangstransistor auf logisch "0" ziehen.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    27.04.2005
    Ort
    Oberhausen
    Alter
    30
    Beiträge
    18
    Hab mir jetzt mal den Reads51 runtergeladen nur ich bekomm immer einen Fehler.Habe folgendes im Queltext stehen:
    Code:
    #include <sfr51.h>
    int main()
    {
    
      return 0;
    }
    Und jetzt der Fehler:

    Code:
    Error Count = 1
    "C:\Program Files\Rigel\Reads51\Work\test\test" 0, External "_main" defined in module "C:\Program Files\Rigel\Reads51\Include\\c0.OBJ" is not exported by any module
    Was mache ich falsch und kann mir vlt mal einer von euch nen kleines Prog in C geben damit ich mal sehen kann wie ihr das so macht

    cya

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •