Forum: PC-Programmierung RS-232 Ausgangserweiterung Software


von Dirk (Gast)


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:
1
COLOR 15, 1
2
CLS
3
4
LOCATE 11, 1                      'ob man COM 1 oder 2 benutzen moechte
5
PRINT SPC(40);                    'Man wird solange zu einer Eingabe
6
LOCATE 11, 1                      'aufgefordert, bis man 1 oder 2
7
LINE INPUT "COM 1 oder 2: "; port$'eingibt.
8
IF VAL(port$) = 1 THEN ba = 1016
9
IF VAL(port$) = 2 THEN ba = 760
10
IF ba = 0 THEN GOTO auswahl
11
LOCATE 11, 1
12
PRINT "COM"; VAL(port$); SPC(20);
13
LOCATE 15, 1                      'auf dem Bildschirm angezeigt
14
PRINT "Ausgang Nr.:"
15
PRINT
16
PRINT "     Status:"
17
FOR ausgang = 0 TO 7
18
LOCATE 15, ausgang * 2 + 13
19
PRINT 8 - ausgang
20
NEXT
21
COLOR 14, 0
22
23
GOSUB ausgabe                     'Eine Ausgabe und Anzeige
24
GOSUB anzeige                     'zu Beginn
25
26
'----------------------------------------------------------------------------
27
28
DO                                'Anfang der Hauptschleife
29
30
DO                                'Wartet auf
31
taste$ = INKEY$                   'irgendeinen
32
LOOP WHILE taste$ = ""            'Tastendruck
33
34
wert = ASC(taste$)                'ASCII-Wert der Taste ermitteln
35
IF wert = 27 THEN GOTO ende       '27 ist der ASCII-Wert von ESC
36
IF wert = 48 THEN GOSUB allesaus  '48 ist der der 0-Taste
37
IF wert > 48 AND wert < 57 THEN   'Wurde eine Taste zw. 1 und 8 gedrueckt?
38
ausgang = wert - 48               'Taste 1 hat z.B. 49. Minus 48 macht 1
39
IF status(ausgang) = 0 THEN       'Ist der Ausgang gerade aus? Dann...
40
status(ausgang) = 1               '...schalte ihn ein
41
ELSE                              'sonst
42
status(ausgang) = 0               'schalte ihn aus
43
END IF                            'Ende der an/aus Auswahl
44
GOSUB ausgabe                     'zum Ausgabe-Unterprogramm
45
GOSUB anzeige                     'zum Anzeige-Unterprogramm
46
END IF                            'Ende der 1-8 Auswahl
47
LOOP                              'Ende der Hautptschleife
48
49
'----------------------------------------------------------------------------
50
51
ausgabe:                          'Ausgabe-Unterprogramm
52
FOR ausgang = 1 TO 8              'Schleife wird 8 mal durchlaufen
53
OUT ba + 3, status(ausgang) * 64  'TxD Leitung w. auf status(ausgang) gesetzt
54
OUT ba + 4, 1                     'DTR = Clock an
55
OUT ba + 4, 0                     'DTR = Clock aus
56
NEXT                              'Ende der Schleife
57
OUT ba + 3, 0                     'TxD aus falls status(8) = 1 war
58
OUT ba + 4, 2                     'CTS = Strobe an
59
OUT ba + 4, 0                     'CTS = Strobe aus
60
RETURN                            'zurueck
61
62
'----------------------------------------------------------------------------
63
64
anzeige:                          'Hier wird nur der status der Ausgaenge
65
FOR ausgang = 0 TO 7
66
LOCATE 17, 27 - ausgang * 2
67
PRINT status(ausgang + 1)
68
NEXT
69
RETURN                            'zurueck
70
71
'----------------------------------------------------------------------------
72
73
allesaus:                         'Hier werden alle Ausgaenge
74
FOR ausgang = 1 TO 8              'ausgeschaltet und dann
75
status(ausgang) = 0               'zur Ausgabe verzweigt
76
NEXT
77
GOSUB ausgabe
78
GOSUB anzeige
79
RETURN
80
81
'----------------------------------------------------------------------------
82
83
ende:                             'Programmabbruch. Zuvor werden alle
84
GOSUB allesaus                    'Ausgaenge ausgeschaltet
85
END                               'Ende

von Dirk (Gast)


Lesenswert?

Kann mir denn keiner helfen?

von Karl H. (kbuchegg)


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).

von zwieblum (Gast)


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]

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.