mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anschluss von AT89C55WD


Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend allerseits
Ich habe einen AT89C55WD.
ich habe ein kleines Assemblerprogramm draufgeflasht, das im Grunde
nichts anderes macht als die Bitfolge 00000001b an Port 0 auszugeben,
die Bitfolge dann mit RR schiebt und wieder an P0 ausgibt. Dazwischen
habe ich eine Warteschleife (mit DJNZ). Die soll genau eine Sekunde
warten. Das tut sie auch ungefähr. Doch das Programm läuft nicht
richtg.
Die Hex-Anzeigen, die ich an P0 angeschlossen habe, zeigen
abwechslungsweise 55 und AA.
Das kann nicht stimmen oder? Ein Schrittmotor, der über einen ULN 2803
A angeschlossen wird, dreht sich nicht.
Was läuft da verkehrt?
Wie muss ich die Pins beschalten? Braucht es etwa eine spezielle
Resetschaltung? Oder kanns am Quarz liegen (9.6 MHz) ?
Allgemein braucht der MC lange, bis er mal "aufgestartet" ist. Wenn
ich Spannung anlege, zieht die Schaltung ca. 11 mA, aber passieren tut
nicht viel.

Meine Frage:

kann dieser Programmfehler an einem ungeeigneten assembler liegen?
an falscher beschaltung der pins?
an fehlenden initialisierungen im programm?

wer kann mir weiterhelfen?

vielen dank schon im voraus!!!

grüsse tobias

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

nen kleiner Schaltplan incl. Sourcecode wäre sehr hilfreich !!!

Wie sieht denn deine RESET Beschaltung aus ? EA=1 ? usw, usw ....

Gruß

Joe

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo joe,
schaltplan habe ich leider grad nicht zur hand. der source sieht
allerdings so aus:

**************************
MOV A,b'00000001
MOV R1,00FF
MOV R2,00FF

start:
MOV P0,A
DJNZ R1,start
DJNZ R2,start

MOV R1,00FF
MOV R2,00FF

LJMP start
********************************

als assembler verwende ich den 8051-assembler A51, der auf der
Atmel-seite zum downloaden angeboten wird.
hoffe du kannst mir weiterhelfen,
grüsse

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also das hier etwas mir rr an der Ausgabe geändert wird kann ich nicht
erkennen.

P0 benötigt externe Pullups (hoffe die haste dran).

Der Assembler hat ja ne eigenartige Syntax, naja man kann sich daran
gewöhnen.

Joe

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uhps, ja stimmt. rr hatte ich vergessen.

sieht dann so aus:

**************************
MOV A,b'00000001
MOV R1,00FF
MOV R2,00FF

start:
MOV P0,A
DJNZ R1,start
DJNZ R2,start

MOV R1,00FF
MOV R2,00FF

RR A

LJMP start
********************************

also, ich muss extern pullups anschliessen?
an jeden einzelnen portpin?
okee, dann liegt da der fehler... wenn da keine pullups dran sind, kann
dann der oben beschriebene fehler auftreten?

und:
der assembler, das ist doch richtig wenn ich einen 8051 assembler
einsetze oder? wenn der chip 89C55 heisst?

danke jedenfalls für den tipp mit den pullups. probier ich morgen aus.
werd mich dann wieder melden ;)

grüsse & schönen abend

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, die Pullups sind ein muss, der Assembler sieht ok aus, kenne diesen
aber nicht.

Der Fehler wäre durch fehlende Pullups erklärbar.

Üblicherweise beginnt ein Assembler Programm mit einer org Anweisung.
Beispiel:
org 0000H

Diese Anweisung gibt an das dass Programm nach dem RESET an
Speicherstelle 0000H beginnt.

Naja, probier es mal und frag wieder.

Joe

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird mit
MOV P0,A
nicht Port0 in den Akku geladen...also im Prinzip ein Input?

Ist schon 10 Jahre her dass ich mit 80551 zu tun hatte.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du lädst immer nur den Inhalt direkter Adressen in die Register.

mov a, 1 lädt A also mit dem Inhalt von R1 von Bank 0.

Um Werte zu laden ist die Syntax folgende:

mov a, #1
mov r1, #0FFh
mov r2, #0FFh

usw.


Peter

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten abend miteinander,
danke für eure hilfe.
ich habs an einem anderen port versucht dort gehts :) port 0 kann man
(mit pullups versehen) als eingang nutzen.
vielen dank auch!!!

noch eine andere frage:
kann man die ersten vier pins des port 1 (z.b.) als ausgang, und die
nächsten vier pins als eingangn nutzen? darf man das?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

es gibt beim 8051 keine unterscheidung zwischen Ein/Ausgang, alle
I/O's beim 8051 sind quasi bidirectional.

Die Antwort lautet ja.

Joe

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach so.
das freut mich :) vielen dank für die auskunft.
ich will meinen microcontroller nämlich noch mit dem DS1245 Ram
ausrüsten.
das hat 17 (komische zahl) adressleitungen und 8 datenleitungen. d.h.,
ich muss einen port noch "so halb" anbrauchen", um das ram
anzusteuern.
noch eine weitere frage, nach deren antwort ich schon lange suche:
wenn ich später den mc noch mit einer dallas DS12887 RTC ausrüsten
will, wie steuer ich das ding an? die adress-/datenleitungen sind dort
zusammengefasst.
weiss jemand dazu auch noch wies geht??

entschuldigt meine blöden fragen (also ja, blöde fragen gibts ja
keine,, nur blöde antworten ;) aber euch müssen meine fragen
warscheinlich blöd erscheinen, wenn ihr mit derart blutigen anfängern
wie mir zu tun habt... ;)

grüsse & schönen abend!

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

aller Anfang ist schwer, bei deinem Vorhaben hast du aus meiner Sicht
auch den falschen Baustein gewählt. Der AT89C55 stellt an P0 einen AD
Wandler zur Verfügung. Der DS1245 wird wie ein klassisches RAM
angeschlossen. Hier würde sich ebenso eine typische 8x51 Busarchitektur
anbieten.

Ich würde dir daher empfehlen mit einem AT89S8252 zu verwenden, es sei
denn der ADC soll auch noch eine spezielle Aufgabe erfüllen.

Du beraubst dich der Möglichkeit movx Befehle für dein RAM zu
verwenden. Du kannst auch bei deiner Wahl bleiben, musst dann aber in
kauf nehmen das dass einen bischen mehr Programmieraufwand wird.

Joe

Autor: Joe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier ist die Beschreibung für die RTC, würde in das BUS Konzept passen.
Es wird im Prinzip ähnlich wie das RAM gehandhabt nur das sich
Adressen/Daten den BUS teilen.

Ein Beispielcode findest du mit Freund Google.

Joe

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@joe:
im datenblatt hab ich zwar nichts von einem ad wandler gelesen, aber
vorerst hab ich dafür sowiso keine verwendung.
ich möchte nur ein bisschen rumexperimentieren, drum hab ich auf meinem
bastelprint alle komponenten angeschlossen, die mich interessieren. dazu
gehört eben auch ds12887. damit kann man vielleicht was tolles
anstellen....
ich will den baustein sowiso nicht als ram verwenden, sondern mich
interessiert nur die uhr.

für was sind denn deine movx befehle genau gut? entschuldige die blöde
frage... aber ich kenn den befehlssatz halt noch nicht so gut.
ich habe ja schliesslich erst vor ein paar tagen angefangen, mich mit
assembler zu beschäftigen...

also im datenblatt des at89c55 steht was über den anschluss von
externem ram. ich kann ich jetzt mein ds12887 anschliessen oder nicht?
irgendwie muss es ja möglich sein, im prinzip sind die anschlüsse des
ram ja nur ein-/ausgänge, auf die man daten legen kann und die man dann
abfragen kann. oder?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh, sorry hast recht. Naja ist noch zu früh ;-)

ds1245 ist aber nen NV-RAM ;-)

movx Befehle sind u.a. transferbefehle für die Verwendung von ext. RAM.
Diese steuern automatisch die RD/WR signale für dich, macht die ganze
Sache recht einfach.

http://www.8052.com/links.phtml

hier findest du die 8051 bible, les dich ein und dann frage noch mal.

Joe

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ganze in deutsch, vielleicht ist dir das lieber.

http://www.batronix.com/elektronik/know-how/mikroc...

Joe

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo joe,
danke für den link zur 8051 bible.

was meinst du damit:

>>DS1245 ist aber ein NV-RAM?

grüsse
 tobias

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na ja, ich dachte du möchtest nen ds1245 verwenden.

... ich will meinen microcontroller nämlich noch mit dem DS1245 Ram
ausrüsten...

das ist ein NV RAM, will meinen nicht flüchtiger Speicher, das Ding hat
ne integrierte Backup Batterie und behält die Daten auch nach abschalten
der Versorgungsspannung.

Wie siehts aus, hast du dich eingelesen ? kommste klar ?

Joe

Autor: Tobias Plüss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo joe,
ja du hast richtig gelesen, den ds 1245 würd ich gern verwenden. das
ist nämlich das einzige ram, das ich auf lager hab :)
warum sollte ich kein nv ram verwenden?
ich kann ja die daten, die ich nicht mehr benötige, überschreiben.

und:
zu der 8051 bible:
ja, hab mich einlesen können :) klar komme ich auch einigermassen. nur
die interrupts hab ich noch net verstanden, aber wird schon.

gruss

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.