Forum: Mikrocontroller und Digitale Elektronik Flashboard mit Bascom, wer hat erfahrung?


von bascom anfänger (Gast)


Lesenswert?

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

von harryup (Gast)


Lesenswert?

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

von bascom anfänger (Gast)


Lesenswert?

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

von HansHans (Gast)


Lesenswert?

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

von bascom anfänger (Gast)


Lesenswert?

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

von Benedikt (Gast)


Lesenswert?

Ich kenne mich mit Bascom nicht aus, aber funktioniert
P1.0=P1.2
nicht ?
Das wäre zumindest die einfachste Lösung...

von Peter D. (peda)


Lesenswert?

@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

von bascom anfänger (Gast)


Lesenswert?

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

von bascom anfänger (Gast)


Lesenswert?

hallo Benedikt,
ja wäre die einfachste lösung,
habs mal probiert. macht der aber nicht.
trotzdem danke,
Micha

von Peter D. (peda)


Lesenswert?

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

von bascom anfänger (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von bascom anfänger (Gast)


Lesenswert?

welcher befehl sollte da stehen? loop oder einfach goto main?

von bascom anfänger (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.