Betr.: 89C2051 für einfache Schaltaufgabe, kann jemand bei Software helfen? Hallo, ich will einen "Uralt"-AT89C2051 zu Steuerzwecken umprogrammieren. Bin dafür auch Hardware-mässig ausgerüstet, alleine die Software fehlt. Der Chip soll für Experimentierzwecke eine Drumbox mit Takt versorgen, d.h. -alle acht Bits sollen wie bei einem Lauflicht in einem Zyklus nacheinander ein mal auf hi geschaltet werden, bevor alles wieder von vorne beginnt. -ausserdem soll die Taktfrequenz mit zwei Druckschaltern an den Eingängen hoch- und runtergeregelt werden können. Die Grundfrequenz soll bei ca. 4 Sekunden pro Durchlauf liegen. Das Programm kann ganz einfach gehalten sein, also keine Tempobegrenzungen, Speicherung des Ist-Wertes o.ä. erforderlich. Weiß jemand, wie man so ein Programm mit Bascom-8051 realisiert? Wie es für den PC mit Basic geht, weiß ich, aber Bascom ist doch schon was anderes... Schönen Sonntag!!!
Keiner antwortet, na so was ;-) Also, bin jetzt mittlerweile auf folgendes Einfach-Programm gekommen (kann man natürlich mit DIM noch kürzer gestalten): $regfile = "89c2051.dat" $crystal = 8643600 $baud = 1200 Los: Waitms 250 P1.0 = &B00000001 Waitms 250 P1.0 = &B00000010 Waitms 250 P1.0 = &B00000100 Waitms 250 P1.0 = &B00001000 Waitms 250 P1.0 = &B00010000 Waitms 250 P1.0 = &B00100000 Waitms 250 P1.0 = &B01000000 Waitms 250 P1.0 = &B10000000 Goto Los Wenn ich das richtig sehe, fehlt nur noch ein Befehl, der die Port-Bits als Ausgänge definiert. Habe in der Richtung leider im Bascom-Handbuch bis jetzt nichts gefunden. Weiß jemand etwas darüber??? Wäre sehr dankbar, wenn das hier klappt,bräuchte ich keinen diskreten Taktgeber aufzubauen... VG
ich glaube so: Config Portc = Output Otto
beim 8051 gibt es keine Datenrichtungsregister - dafür aber auch nur einen sehr mickrigen H-Strom. Der Aus/Eingang besteht nur aus einem Transistor und einem Pullup. Dein Programm ist irgendwie sehr gewöhnungsbedürftig :-) Auf jeden Fall dürfte es nicht so funktionieren, wie du erwartest, da du immer nur P1.0 beschreibst (ich kann aber kein Basic, vielleicht tut es sogar, was du willst). Als Zeitbasis solltest du einen Timerinterrupt verwenden statt delay.
Bertram W. wrote: > Keiner antwortet, na so was ;-) Nö. Ohne etwas eigene Überlegungen fertig aufm Silbertablett liefern, ist hier unüblich. > bin jetzt mittlerweile auf folgendes Einfach-Programm gekommen (kann man > natürlich mit DIM noch kürzer gestalten): crazy horse hat recht, Du mußt den ganzen Port P1 beschreiben, nicht nur einen Pin. Ich würde das Delay aber über nen Timer machen. > Wenn ich das richtig sehe, fehlt nur noch ein Befehl, der die Port-Bits > als Ausgänge definiert. Nö. Der 8051 hat doch Open-Drain-Ausgänge mit internen Pullups. Eine Richtungsumschaltung ist daher unnötig. Die neuen AT89LP4052 können aber auch auf Gegentaktausgang umgeschaltet werden. Peter
Hallo, Danke für die Antworten! Hatte es nach dem Posten auch gemerkt, die Ports sind noch nicht richtig durchnummeriert, hier die "bereinigte" Version: $regfile = "89c2051.dat" $crystal = 8643600 $baud = 1200 Los: Waitms 250 P1.0 = &B00000001 Waitms 250 P1.1= &B10000000 Waitms 250 P1.2 = &B00000010 Waitms 250 P1.3= &B00000100 Waitms 250 P1.4= &B00001000 Waitms 250 P1.5 = &B00010000 Waitms 250 P1.6 = &B00100000 Waitms 250 P1.7 = &B01000000 Goto Los Echt, funktioniert ohne Definierung von Ein/Ausgängen, kratz-am-kopf, na gut! Die Sache mit Timer-Interrupt statt Delay ist möglicherweise für einen dauerhaft sauberen Takt gar nicht so verkehrt, jetzt soll aber erst mal das hier ans Laufen gebracht werden...
auch das funktioniert nicht.
P1.x ist ein bit grosser Wert. Also nur mit 0 oder 1 beschreiben. Den Rest macht der Compiler/Interpreter selbst. Was du machst ist allen P1 Pins Werte zuzuschreiben. Aber dann auch ohne ".x". Und dann sind die Bitmuster ab P1.1 falsch (bzw versetzt). JL
Year Leute, es funzt!!! Mein erstes selbstgeschriebenes uC-Programm auf selbstgerösteter Hardware!!!!!! :O) Also, nach anfänglichem Fehlversuch (jepp jl, das hab ich auch schon gemerkt ;O)) hier noch mal das Programm in der funktionstüchtigen Form: (besonders beeindruckt hat mich übrigens, dass Bascom einen 89C51er direkt unter Win98 per BlowIT am Parallelport beschreiben kann) $regfile = "89c2051.dat" $crystal = 8643600 $baud = 1200 P1.0 = 1 P1.1 = 1 P1.2 = 1 P1.3 = 1 P1.4 = 1 P1.5 = 1 P1.6 = 1 P1.7 = 1 Los: P1.0 = 0 Waitms 175 P1.0 = 1 P1.1 = 0 Waitms 175 P1.1 = 1 P1.2 = 0 Waitms 175 P1.2 = 1 P1.3 = 0 Waitms 175 P1.3 = 1 P1.4 = 0 Waitms 175 P1.4 = 1 P1.5 = 0 Waitms 175 P1.5 = 1 P1.6 = 0 Waitms 175 P1.6 = 1 P1.7 = 0 Waitms 175 P1.7 = 1 Goto Los
Beim AT89C2051 gibt es nur die ursprünglichen Modes der Portpins als Ausgang oder Eingang (Px.y=1). Deshalb mußt du an den Pins auch nichts konfigurieren. Neuere 8051 Derivate dagegen besitzen diverse Modes wie Open-Collector oder andere, welche man für seinen jeweiligen Fall richtig konfigurieren muß.
Dann gibts bei dem Controller wohl auch nicht die Möglichkeit, den ganzen Port auf einmal anzusteuern wie z.B. Portx=255, um alle acht Bits von Portx gleichzeitig auf hi zu setzen?!
Bertram W. wrote: > Dann gibts bei dem Controller wohl auch nicht die Möglichkeit, den > ganzen Port auf einmal anzusteuern wie z.B. Portx=255, um alle acht Bits > von Portx gleichzeitig auf hi zu setzen?! Du bist doch derjenige, der bisher darauf beharrt, immer nur einzelne Bits anzusprechen. Den ganzen Port auf ein Bitmuster zu setzen, wurde schon mehrfach erwähnt. Es geht natürlich beides. P1 = 255 Peter
Ja, das hast du wahr ;O) ! Gut, dann kann ich ja das Programm jetzt schon mal ein bisschen verkleinern...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.