mikrocontroller.net

Forum: PC-Programmierung RS-232 Ausgangserweiterung Software


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe die Schaltung von 
http://www.skilltronics.de/versuch/elektronik_pc/4094.html nachgebaut, 
und noch 3 mal das IC angehängt. Somit habe ich 4 Schieberegister. Die 
Software dazu ist recht einfach, reicht jedoch für meine Augaben aus. 
Ich kann leider kaum BASIC, daher nun meine Frage:

Wie muss ich das Programm ändern, dass ich statt 8 Ausgängen 32 schalten 
kann. Wichtig wäre mir dabei die Anzeige der Schaltzustände. Ich würde 
dabei die Eingabe der Kanalnummer per INPUT bevorzugen. (anstatt der 
Verwendung der Tasten 1-8)

Hier der Quellcode:
COLOR 15, 1
CLS

LOCATE 11, 1                      'ob man COM 1 oder 2 benutzen moechte
PRINT SPC(40);                    'Man wird solange zu einer Eingabe
LOCATE 11, 1                      'aufgefordert, bis man 1 oder 2
LINE INPUT "COM 1 oder 2: "; port$'eingibt.
IF VAL(port$) = 1 THEN ba = 1016
IF VAL(port$) = 2 THEN ba = 760
IF ba = 0 THEN GOTO auswahl
LOCATE 11, 1
PRINT "COM"; VAL(port$); SPC(20);
LOCATE 15, 1                      'auf dem Bildschirm angezeigt
PRINT "Ausgang Nr.:"
PRINT
PRINT "     Status:"
FOR ausgang = 0 TO 7
LOCATE 15, ausgang * 2 + 13
PRINT 8 - ausgang
NEXT
COLOR 14, 0

GOSUB ausgabe                     'Eine Ausgabe und Anzeige
GOSUB anzeige                     'zu Beginn

'----------------------------------------------------------------------------

DO                                'Anfang der Hauptschleife

DO                                'Wartet auf
taste$ = INKEY$                   'irgendeinen
LOOP WHILE taste$ = ""            'Tastendruck

wert = ASC(taste$)                'ASCII-Wert der Taste ermitteln
IF wert = 27 THEN GOTO ende       '27 ist der ASCII-Wert von ESC
IF wert = 48 THEN GOSUB allesaus  '48 ist der der 0-Taste
IF wert > 48 AND wert < 57 THEN   'Wurde eine Taste zw. 1 und 8 gedrueckt?
ausgang = wert - 48               'Taste 1 hat z.B. 49. Minus 48 macht 1
IF status(ausgang) = 0 THEN       'Ist der Ausgang gerade aus? Dann...
status(ausgang) = 1               '...schalte ihn ein
ELSE                              'sonst
status(ausgang) = 0               'schalte ihn aus
END IF                            'Ende der an/aus Auswahl
GOSUB ausgabe                     'zum Ausgabe-Unterprogramm
GOSUB anzeige                     'zum Anzeige-Unterprogramm
END IF                            'Ende der 1-8 Auswahl
LOOP                              'Ende der Hautptschleife

'----------------------------------------------------------------------------

ausgabe:                          'Ausgabe-Unterprogramm
FOR ausgang = 1 TO 8              'Schleife wird 8 mal durchlaufen
OUT ba + 3, status(ausgang) * 64  'TxD Leitung w. auf status(ausgang) gesetzt
OUT ba + 4, 1                     'DTR = Clock an
OUT ba + 4, 0                     'DTR = Clock aus
NEXT                              'Ende der Schleife
OUT ba + 3, 0                     'TxD aus falls status(8) = 1 war
OUT ba + 4, 2                     'CTS = Strobe an
OUT ba + 4, 0                     'CTS = Strobe aus
RETURN                            'zurueck

'----------------------------------------------------------------------------

anzeige:                          'Hier wird nur der status der Ausgaenge
FOR ausgang = 0 TO 7
LOCATE 17, 27 - ausgang * 2
PRINT status(ausgang + 1)
NEXT
RETURN                            'zurueck

'----------------------------------------------------------------------------

allesaus:                         'Hier werden alle Ausgaenge
FOR ausgang = 1 TO 8              'ausgeschaltet und dann
status(ausgang) = 0               'zur Ausgabe verzweigt
NEXT
GOSUB ausgabe
GOSUB anzeige
RETURN

'----------------------------------------------------------------------------

ende:                             'Programmabbruch. Zuvor werden alle
GOSUB allesaus                    'Ausgaenge ausgeschaltet
END                               'Ende

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir denn keiner helfen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Änderung von 8 auf 32 Ausgänge ist simpel.
Stöber das Programm durch und such nach 8.
Dann überlegst du, ob dieser 8er mit der Anzahl der Ausgänge 
zusammenhängt und wenn ja, änderst du die 8 auf 32.

Soweit dazu.
Die Änderung der Eingabemethode von einem Tastendruck auf INPUT hingegen 
ist nicht so einfach. Da muss man u.U. die Systematik ändern.
Es gibt aber genügend Tutorials im Web, die einem zeigen, wie man in 
BASIC mit INPUT eine Eingabe (Zahleneingabe?) macht. Sollte auch nicht 
allzu schwer sein, da INPUT die meiste Arbeit alleine erledigt und du in 
deinem Programm schon eine Referenz hast, wie man das im Groben macht

LINE INPUT "COM 1 oder 2: "; port$
IF VAL(port$) = 1 THEN ba = 1016
IF VAL(port$) = 2 THEN ba = 760


Nur wird dir hier keiner deine Arbeit abnehmen.

> Ich kann leider kaum BASIC
Dann wirds Zeit, dass du dich damit beschäftigst.
Wir helfen gerne. Aber viele von uns haben die Nase voll von angehenden 
Programmierern, die ihre Hausaufgaben nicht machen (wollen).

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ARTHUR:  Consult the Book of Armaments!
BROTHER MAYNARD:  Armaments, Chapter Two, verses Nine to Twenty-one.
SECOND BROTHER:  And Saint Attila raised the hand grenade up on high, 
saying, 'O Lord, bless this thy hand grenade that with it thou mayest 
blow thine enemies to tiny bits, in thy mercy.'  And the Lord did grin, 
and the people did feast upon the lambs and sloths and carp and 
anchovies and orangutans and breakfast cereals and fruit bats and large 
chu--
MAYNARD:  Skip a bit, Brother.
SECOND BROTHER:  And the Lord spake, saying, 'First shalt thou take out 
the Holy Pin.  Then, shalt thou count to three, no more, no less.  Three 
shalt be the number thou shalt count, and the number of the counting 
shall be three.  Four shalt thou not count, nor either count thou two, 
excepting that thou then proceed to three.  Five is right out.  Once the 
number three, being the third number, be reached, then lobbest thou thy 
Holy Hand Grenade of Antioch towards thy foe, who, being naughty in my 
sight, shall snuff it.'
MAYNARD:  Amen.
KNIGHTS:  Amen.
ARTHUR:  Right!  One... two... five!
GALAHAD:  Three, sir!
ARTHUR:  Three!
    [angels sing]
    [boom]

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.