Hallo, ich bin neu einsteiger und würde gerne ein wenig mit dem Flashboard von Elektor experimentieren. Als erstes wollte ich an dem atmel 89s8252 einfach mal mit dem Port 1.2 als eingang den Port 1.0 schalten, an dem hängt eine LED. Die LED leuchtet immer, auch wenn ich den Port 1.2 auf masse lege. wo liegt der fehler in dem programm? Do If P1.2 = 1 Then P1.0 = 0 Else P1.0 = 1 Loop End If
hi, wenn das dein komplettes programm ist geht's nicht. als erstes muss man den prozessor festlegen und die ein- und ausgänge definieren. als anweisung in bascom (ich kenn nur das bascom für die at's, tiny's und mega's, aber vllt. gilt das auch für die 89er's) muss man einen port so einlesen: if PinA.1 = 1 then... und so den port beschreiben: set PortA.2 oder reset PortA.2 es ist möglich, dass es in deinem bascom-compiler anders gehandhabt wird dann gilt das natürlich nicht, aber ich könnt mir gut vorstellen, bascom ist bascom, egal für welche controllers. gruss, harry
hab das programm umgeschrieben und nun bekomme ich von bascom einen fehler bei set p1.0 = 0 angezeigt. hab mal alle P´s gegen PIN getauscht, bascom kennt bei dem 89s8252 wohl leider kein PIN. Do If P1.1 = 1 Then Set P1.0 = 0 *fehler Else P1.0 = 1 Loop End If
Bascom AVR würde hier nicht meckern : Do If Pind.1 = 1 Then Reset Portb.1 Else Set Portb.1 End If Loop Was du machst : Set P1.0 = 0 ist klar das da ein Fehler kommt weil: entweder Set P1.0 oder P1.0 = 1 nicht beides in einer Zeile
hab es geschafft, hier das listing If P1.2 = 1 Then P1.0 = 1 End If If P1.2 = 0 Then P1.0 = 0 End If Return End und etwas einfacher If P1.2 = 1 Then P1.0 = 1 Else P1.0 = 0 End If Return End alles unter Bascom8051. Vielleicht meckert das programm deshalb bei eingabe vin PIN. ist echt klasse das Forum, danke für die hilfe, hab nun schon eine und verknüpfung erfolgreich eingefügt und übe nun ein flip-flop. klappt aber noch nich. Micha
Ich kenne mich mit Bascom nicht aus, aber funktioniert P1.0=P1.2 nicht ? Das wäre zumindest die einfachste Lösung...
@Anfänger, laß dich nicht beirren, der 8051 hat open-drain Ausgänge und damit eine Umschaltung zwischen Eingang und Ausgang nicht nötig (ist deshalb auch nicht möglich). Peter
hat noch einer ne idee zu einem flip flop.
habe mal das hier versucht, aber die diode am ausgang 1.0 leuchtet nur
solange wie der eingang 1.2 auf masse liegt.
>
Goto Main
Main:
If P1.2 = 1 Then Goto Setzen
If P1.3 = 1 Then Goto Rsetzen
Setzen:
P1.0 = 1
Goto Main
Rsetzen:
P1.0 = 0
Goto Main
Return
End
hallo Benedikt, ja wäre die einfachste lösung, habs mal probiert. macht der aber nicht. trotzdem danke, Micha
So kanns nicht gehen, nach den Tests läufst Du in Setzen rein. Außerdem sind die Tasten doch gegen GND geschaltet, d.h. Du must auf 0 testen. Peter
danke Peter, hab das ganze umgeschrieben, und siehe da es klappt. ist ja echt interessant mit controlern zu experimentieren. ich muß aber noch viel lernen. hier das neue listing Goto Main Main: If P1.2 = 0 Then Goto Setzen If P1.3 = 0 Then Goto Rsetzen Return Setzen: P1.0 = 1 Goto Main Rsetzen: P1.0 = 0 Goto Main Return End
Das Return ist falsch ! Ein Return darf nur am Ende eines Unterprogramms erfolgen. Dein Programm scheint also nur zu funktionieren, fängt aber in Wirklichkeit immer wieder bei 0 an (SRAM mit 0 vorinitialisiert). Peter
welcher befehl sollte da stehen? loop oder einfach goto main?
habs einfach mal getestet: loop funktioniert nicht, aber goto main.
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.