mikrocontroller.net

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


Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: harryup (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bascom anfänger (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
welcher befehl sollte da stehen? loop oder einfach goto main?

Autor: bascom anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs einfach mal getestet:
loop funktioniert nicht, aber goto main.

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.