Basic ganzen PORT A als Ausgang bzw Eingang

Gast #1217585
hi all, wollte mal ganz schnell wissen ob das hier so geht.
Wollte eigentlich in Basic, den ganzen Port A und C als Eingang 
definiert haben mit aktivierten Pullups an jedem Pin. und Die Ports B 
und D sollten einfach als Ausgänge definiert sein.
Jedoch spuckt Bascom nen Fehler aus und will nicht compilieren.
Kann man mit Basic alle Pins am Port direkt definieren oder muss ich 
ales einzen machen?

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portb = Output
Config Portd = Output
Config Pina = Input
Porta = 1
Config Pinc = Input
Portc = 1


Do
  If Pina.0 = 1 Then
    Portb.0 = 1
  End If
    If Pina.1 = 1 Then
    Portb.1 = 1
  End If
    If Pina.2 = 1 Then
    Portb.2 = 1
  End If
    If Pina.3 = 1 Then
    Portb.3 = 1
  End If
    If Pina.4 = 1 Then
    Portb.4 = 1
  End If
    If Pina.5 = 1 Then
    Portb.5 = 1
  End If
    If Pina.6 = 1 Then
    Portb.6 = 1
  End If
    If Pina.7 = 1 Then
    Portb.7 = 1
  End If
    If Pina. = 1 Then
    Portb. = 1
  End If
    If Pinc.7 = 1 Then
    Portd.0 = 1
  End If
      If Pinc.6 = 1 Then
    Portd.1 = 1
  End If
      If Pinc.5 = 1 Then
    Portd.2 = 1
  End If
      If Pinc.4 = 1 Then
    Portd.3 = 1
  End If
      If Pinc.3 = 1 Then
    Portd.4 = 1
  End If
      If Pinc.2 = 1 Then
    Portd.5 = 1
  End If
      If Pinc.1 = 1 Then
    Portd.6 = 1
  End If
      If Pinc.0 = 1 Then
    Portd.7 = 1
  End If

Loop


End
#1217611
Schreib es mal so:

Config Portb = Output
Config Portd = Output
Config Porta = Input
Porta = 255
Config Portc = Input
Portc = 255

Und lass das hier weg

Du kannst auch schreiben:

PORTB=PINA

    If Pina. = 1 Then
    Portb. = 1
  End If

Gruß

Rolf
Gast #1217646
hi danke, eine frage noch.
was macht

"Portc = 255"

und wird hiermit:
PORTB=PINA

    If Pina. = 1 Then
    Portb. = 1
  End If
auch jeweils der gegenüberliegende Pin angesprochen?

Also das auch nur Pina.1 high bekommt und somit dann auch NUR Pinb.1 zum 
beispiel?
Gast #1217678
sorry das ich dich jetzt angepisst habe wegen 2 kleinen fragen. ich 
verkriech mich jetzt auch sofort in mein loch. trotzdem danke ich rolf 
und nicht dir du nichthelfer. und falls du mal jemals fragen hast dann 
schreib ein buch darüber und ein buch über die antworten.

solche leute wie dich verschmutzen nur thread wo ein anfänger fragen 
stellt.

sowas wie "benutz die SuFu, google, guck ins handbuch.." bla nervt.

es gibt schon gründe warum ich hier schreibe und nicht 10min irgendwo 
anders was lesen will.
#1217686
lies doch einfach statt 10 Minuten zu schreiben ;-), dann hast Du mehr 
Zeit ins Handbuch zu schauen.
Es bringt Dich wirklich viel schneller weiter.
Und wenn Du dann mal wirkliche Probleme hast, hilft Dir hier gern jeder 
weiter; sofern er nicht gerade selber in Bücher schaut und lernt...
Gast #1217722
> sowas wie "benutz die SuFu, google, guck ins handbuch.." bla nervt.

Die Tips sind aber gut gemeint und auch berechtigt.

> es gibt schon gründe warum ich hier schreibe und nicht 10min irgendwo
> anders was lesen will.

Nunja, wenn Du an der richtigen Stelle liest, erreicht Du mehr, als wenn 
Du andere Leute für Dich arbeiten lässt.

Nimm das Datenblatt Deines Controllers und schau Dir die 
Registerbeschreibung von PORTA, PINA_ und _DDRA genau an. Dann 
interessiere Dich mal für den Zusammenhang von Bits und Byte.

...
#1217751
Hab mich beim Einfügen etwas vertan. Sollte eigentlich so heißen:

Und lass das hier weg

    If Pina. = 1 Then
    Portb. = 1
  End If

Du kannst auch schreiben:

PORTB=PINA

Wobei dass nicht gleich deinen If-Blöcken ist, aber wohl so wie du es 
willst.

  If Pina.0 = 1 Then
    Portb.0 = 1
  End If

Falls der Pina.0 einmal 1 ist, geht der Portb.0 nie wieder auf 0. Bei

PORTB=PINA

geht jeder PORTB.x sofort wieder auf 0, wenn der PINA.x auf 0 geht.
Das entsprechende für PINC und PORTD wäre dann
PORTD.0=PINC.7
PORTD.1=PINC.6
usw.
Das kannst du auch über eine Schleife erledigen.
Ein direktes Überkreuz-Setzen gibt es leider nicht.

Gruß

Rolf
Gast #1218237
So hab es mal so versucht:
Bauplan laut Bild, wo ich Testweise nur eine LED angeschlossen habe. 
Anstatt einen Taster habe ich einen Fotosensor drangebaut, der wenn es 
dunkel ist einen sehr hohen Widerstand hat (ca. 5MOhm) und wenn man ihrn 
bestrahlt ca. 500 Ohm.

Ich habe im dunkeln den Fotosensor mit einer Taschenlampe bestrahlt 
jedoch hat dieser keine 1 geliefert und meine LED ging nicht an. Weis 
jemand wo der Fehler liegt?

So hoffe habe alles klar genug erklärt und hoffe das das mal keine 
anfänger frage ist.

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portb = Output
Config Portd = Output
Config Pina.0 = Input
Config Pina.1 = Input
Config Pina.2 = Input
Config Pina.3 = Input
Config Pina.4 = Input
Config Pina.5 = Input
Config Pina.6 = Input
Config Pina.7 = Input
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
Porta.3 = 1
Porta.4 = 1
Porta.5 = 1
Porta.6 = 1
Porta.7 = 1
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Portc.6 = 1
Portc.7 = 1

Do
  If Pina.0 = 1 Then
    Portb.0 = 1
  End If
    If Pina.1 = 1 Then
    Portb.1 = 1
  End If
    If Pina.2 = 1 Then
    Portb.2 = 1
  End If
    If Pina.3 = 1 Then
    Portb.3 = 1
  End If
    If Pina.4 = 1 Then
    Portb.4 = 1
  End If
    If Pina.5 = 1 Then
    Portb.5 = 1
  End If
    If Pina.6 = 1 Then
    Portb.6 = 1
  End If
    If Pina.7 = 1 Then
    Portb.7 = 1
  End If
    If Pina. = 1 Then
    Portb. = 1
  End If
    If Pinc.7 = 1 Then
    Portd.0 = 1
  End If
      If Pinc.6 = 1 Then
    Portd.1 = 1
  End If
      If Pinc.5 = 1 Then
    Portd.2 = 1
  End If
      If Pinc.4 = 1 Then
    Portd.3 = 1
  End If
      If Pinc.3 = 1 Then
    Portd.4 = 1
  End If
      If Pinc.2 = 1 Then
    Portd.5 = 1
  End If
      If Pinc.1 = 1 Then
    Portd.6 = 1
  End If
      If Pinc.0 = 1 Then
    Portd.7 = 1
  End If

Loop


End
Angehängte Dateien:
Gast #1218425
Die Config-Anweisungen machen das Programm ziemlich unübersichtlich, 
aber es geht auch anders:

Du kannst die Register auch direkt beschreiben:
DDRA=&B00000000
PORTA=&B11111111
Das bedeutet: Im DDR-Register stellt eine Null den Port auf Eingang und
im Port-Register schaltet eine Eins den Ziehwiderstand (Neudeutsch:
Pull-up) ein.
Diese beiden Zeilen haben jetzt also den gesamten Port A als Eingang
konfiguriert und alle Pull-up-Widerstände zugeschaltet.

MfG Paul

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.