Forum: Mikrocontroller und Digitale Elektronik Anschluss von AT89C55WD


von Tobias Plüss (Gast)


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

von Joe (Gast)


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

von Tobias Plüss (Gast)


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

von Joe (Gast)


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

von Tobias Plüss (Gast)


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

von Joe (Gast)


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

von Dieter W. (dds5)


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.

von peter dannegger (Gast)


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

von Tobias Plüss (Gast)


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?

von Joe (Gast)


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

von Tobias Plüss (Gast)


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!

von Joe (Gast)


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

von Joe (Gast)


Angehängte Dateien:

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

von Tobias Plüss (Gast)


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?

von Joe (Gast)


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

von Joe (Gast)


Lesenswert?

das ganze in deutsch, vielleicht ist dir das lieber.

http://www.batronix.com/elektronik/know-how/mikrocontroller-technik.shtml

Joe

von Tobias Plüss (Gast)


Lesenswert?

hallo joe,
danke für den link zur 8051 bible.

was meinst du damit:

>>DS1245 ist aber ein NV-RAM?

grüsse
 tobias

von Joe (Gast)


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

von Tobias Plüss (Gast)


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

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.