PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Port ansprechen (einzeln)



Alter Knacker
26.03.2005, 13:17
Hi,
als einfachste verständnisfrage habe ich doch erstmal nicht rn-motor angesteuert (nicht, dass ich da in meiner dummheit was schrotte),
sondern mal was einfaches getestet:



$regfile = "m16def.dat"
Config Portb = Output
Do
Portb = $ff
Wait 1
Portb = $00
wait 1
Loop


an porta hängen 8 leds, die blinken auch wie erhofft.
erklärt mir bitte jemand für dumme, wie man die jetzt einzeln anspricht?

zB. led 4 und led 6 sollen genau obiges ausführen, die anderen nicht.

wenn man hier nach leds und blinken sucht, kommt einfach zuviel info, die damit gar nix zu tun hat :-(
wäre nett, danke

uwegw
26.03.2005, 13:43
einen einzelnen portpin sprichst du zb mit
Portb.1 = 1
an.



$regfile = "m16def.dat"
Config Portb = Output
Do
Portb.4 = 1
Portb.6 = 1
Wait 1
Portb.4 = 0
Portb.6 = 0
wait 1
Loop


zu beachten: die einzelnen portpins werden immer von null bis sieben durchgezählt!

PS: mit
config pinb.4 = output
stellst du nur PB4 als ausgang ein. die restlichen portpins kannst du dann als eingänge nutzen:
config pinb.3 = input
config pinb.7 = input
usw

Marco78
26.03.2005, 13:46
FF ist der Hex-Code für Dez 255 und Binär 11111111.
Ich finde, die binäre Ansicht verdeutlich schon besser was passiert.

Portb = &B11111111 'B0 bis B7 werden auf 1 gesetzt.
Portb = &B00010100 'Die 4. LED (an B3) und die 6. LED (an B5) werden leuchten

Einfacher ist aber:

Portb.3 = 1 'Die 4. LED (an B3) einschalten
Portb.3 = 0 'selbige ausschalten.

Geh mal auf http://www.rowalt.de/mc/index.htm und da Links im Menü auf Einführung 1. Am besten Einführung 1 bis 11 aufdrucken und alles mal in ruhe durchlesen.

EDIT: Da war schon jemand schneller ;)

Alter Knacker
26.03.2005, 13:46
aha, danke wiedermal!

hab mich oben eh vertippt, die hängen an port a ;-)
klingt aber eh recht einleuchtend, gleichmal versuchen....
thx knacki

Alter Knacker
26.03.2005, 14:03
danke @marco78, aber die einfache variante sagt mir im moment besser zu ;-)

mit waitms siehts dann noch besser aus.

wenn man jetzt ein lauflicht machen will, muss man das ganze dann vermutlich mit dem taschenrechner durchrechnen und die befehle einzeln setzen, oder gibts da tricks dafür?
thx knacki

Alter Knacker
26.03.2005, 14:32
Kuul, knight rider effekt *grins*

zum einarbeiten sind solche spielereien wirklich net schlecht!

bloss ist der code jetzt ziemlich lang und sieht dämlich aus:


$crystal = 4000000

Config Porta = Output
Do
Porta.0 = 1
Waitms 35
Porta.0 = 0
Porta.1 = 1
Waitms 35
Porta.1 = 0
Porta.2 = 1
Waitms 35
Porta.2 = 0
Porta.3 = 1
Waitms 35
Porta.3 = 0
Porta.4 = 1
Waitms 35
Porta.4 = 0
Porta.5 = 1
Waitms 35
Porta.5 = 0
Porta.6 = 1
Waitms 35
Porta.6 = 0
Porta.7 = 1
Waitms 35
Porta.7 = 0
Porta.6 = 1
Waitms 35
Porta.6 = 0
Porta.5 = 1
Waitms 35
Porta.5 = 0
Porta.4 = 1
Waitms 35
Porta.4 = 0
Porta.3 = 1
Waitms 35
Porta.3 = 0
Porta.2 = 1
Waitms 35
Porta.2 = 0
Porta.1 = 1
Waitms 35
Porta.1 = 0

Loop


kann man das vereinfachen in bascom?
thx knacki

Alter Knacker
26.03.2005, 15:02
hm, auf diese art und weise lässt sich der "nachschmiereffekt" des lauflichts ja nicht umsetzen.

ein ansatz wäre, für jede led eine eigene schleife zu setzen, allerdings müsste es dann eine funktion sein, die man aufruft, und wärend die eine abläuft, fängt die nächste funktion an.
ist der denkansatz richtig?
mfg knacki

teslanikola
26.03.2005, 15:21
The shortest Knightrider Quellcode all over the World!!!!!!!!!

$regfile = "2313def.dat"
$crystal = 10000000
Dim A As Byte

Config Portb = Output
A = 1
Do
Do
Portb = A
Waitms 10
Rotate A , Left , 1
Loop Until A = 128
Do
Portb = A
Waitms 10
Rotate A , Right , 1
Loop Until A = 1
Loop

Alter Knacker
26.03.2005, 15:57
mit waitms 50 siehts besser aus.
danke für den code, muss ich aber erstmal durchsteigen :-(
mfg knacki

teslanikola
26.03.2005, 16:05
hab 10ms für Simulator genommen ( der is immer nen bissle langsamer ) in realität läufts bei mir mit 100ms.

Klaus_0168
26.03.2005, 16:15
Hi Andy,

statt die Bits einzeln zu setzen kannst Du auch das ganze Byte ausgeben.

Byte * 2 -> entspricht einem Shift left;
Byte / 2 -> entspricht einem Shift right.

Das macht, meiner Meinung nach, den Code übersichtlicher und man braucht sich nicht um den Reset einzelner Bits zu kümmern.

Vorsicht mit dem Rotate-Befehl. Das Carry-Bit wird mit in die Bytefolge eingeschleust. Wenn man es will ist es ja OK, ansonsten könnte es stören.

@teslanicola :
die Zeitangaben im Simulator werden entweder gestreckt oder mit der $sim-Direktive ausgeschaltet und entsprechen in keinem Fall der Realität.

Gruß Klaus

Alter Knacker
26.03.2005, 16:20
jetzt wirds wieder verwirrend, willkommen wiedermal in der realität :-)

nur, diesmal will ichs wirklich kapieren, also nicht entmutigen lassen, knacki!

@klaus: danke nochmal für die übersetzung, ist schade, viel arbeit deinerseits für nix :-(
irgendwo musses da eine wackler geben, wenn ich den finde, werden sich viele leute freuen, schätze ich.

mfg knacki

teslanikola
26.03.2005, 16:24
@teslanicola :
die Zeitangaben im Simulator werden entweder gestreckt oder mit der $sim-Direktive ausgeschaltet und entsprechen in keinem Fall der Realität.

Mit realität meinte ich das Programm im Flash, in der Schaltung, micht im Sim

Klaus_0168
26.03.2005, 16:46
Hi all,

@teslanikola :
erst mal sorry, das ich Deinen Namen falsch geschrieben habe.
Mit den 100ms im Flash, müßten die 8 Bit in etwa 850ms (edit : etwas über 800ms) durchlaufen sein. Das ist mir schon klar. Wir posten anscheinend ein wenig aneinander vorbei, sind uns aber im Prinzip einig.

@Knacki :
Mit der Übersetzung habe ich wieder mal mein Englisch aufgefrischt. Der im Thread verwendete Slang war sehr interessant.
Und - was ist verwirrend ?

Frei nach dem ältesten Buch der Welt :
Frage und so wird Dir geantwortet werden.

Klaus

Alter Knacker
26.03.2005, 18:59
Und - was ist verwirrend ?

Frei nach dem ältesten Buch der Welt :
Frage und so wird Dir geantwortet werden.

Klaus

tja, das mit dem do-loop und wait und waitms hab ich ja begriffen.
der code von teslanikola ist schon nicht mehr zu begreifen für den anfänger, weil nicht kommentiert.

und


statt die Bits einzeln zu setzen kannst Du auch das ganze Byte ausgeben.

Byte * 2 -> entspricht einem Shift left;
Byte / 2 -> entspricht einem Shift right.

Das macht, meiner Meinung nach, den Code übersichtlicher und man braucht sich nicht um den Reset einzelner Bits zu kümmern.

Vorsicht mit dem Rotate-Befehl. Das Carry-Bit wird mit in die Bytefolge eingeschleust. Wenn man es will ist es ja OK, ansonsten könnte es stören.


verwirrt eben noch mehr.

ich schmeisse in meinem job auch mit fachausdrücken rum und merke zu spät, dass ich schnupperlehrlinge damit überfordere ;-)

als erklärung: rotate ist mir neu, ich hab ja keine ahnung, was das macht.
carry-bit erst recht.
deine angabe


Byte * 2 -> entspricht einem Shift left;
Byte / 2 -> entspricht einem Shift right.


erklärt mir ohne verständnis auch erstmal zero.

also, neue definition von verwirrend :B
mfg knacki

uwegw
26.03.2005, 19:59
wurum es bei der ganzen sache geht ist ja (hoffentlich) klar: es soll eine led nach der anderen leuchten, und für das bitmuster, das auf den port ausgegeben wird, heißt das, dass die position eines an/1/high-bits einmal quer über den port "geschoben" wird.

zur veranschaulichung mal was nun schrittweise passiert:

00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000

somit fängt das lauflicht an einer seite des ports an und läuft dann nach und nach rüber, indem halt das eine bit verschoben wird, also englisch "shift"

um das mit dem mal 2 und durch 2 zu verstehen muss man erst mal wissen, das nun im binärsystem gerechnet wird. die bitfolgen (siehe oben) werden als binäre zahlen aufgefasst. nimmt man nun die %00000001 (das perozentzeichen ist ein übliches kennzeichen für binärzahlen) , was dezimal 1 entspricht, und multipliziert dasd ganze mit dezimal 2, dann bekommt man als ergebnis %00000010 heraus, also das nächste element der folge. so gehr das dann immer weiter, und andersrum per division...

ich glaub so 100% verständlich ist das immer noch nicht, aber es ist ein anfang...

Alter Knacker
26.03.2005, 20:10
hehe, ich kann mich dunkel daran erinnern, htl (tgm @ die wiener) im jahre 1978.
kumpel von mir konnte mir nach der kurzerklärung des professors mit den finger aus dem stehgreif die zahlen sagen, ich habs nicht begriffen und auch gleich wieder vergessen - wer braucht das schon :-)

also das war schon gut erklärt jetz, zumindest das left und right und warum man das so ansprechen kann, aber muss ich mir das dualsystem jetzt im hohen alter wirklich noch antun???

oder würde es reichen, wenn ich das mit left/right und byte*2 einfach kapiere und abhake?

vor allem: wie sieht das codemässig aus?
A*2 oder wie?
thx knacki

uwegw
26.03.2005, 20:18
dualsystem und auch das hexadezimalsystem braucht man beim programmieren andauernd... es lohnt sich das mal eben zu lernen... ist eigentlich gar nicht sooo schwierig...


ach ja: A+2 stimmt...
A ist eine variable vom typ byte, hat also aucht bit. du setzt A zuerst auf dezimal1 bzw %00000001, und dann multiplizierst du das ganze 7mal mit dezimal 2...

also

dim A as byte
dim i as byte

A = &B00000001

For I = 1 To 7
Portb = A
A = A * 2
Wait 1
Next I


edit: hatte die ausgabe vergessen... und bascom will die binärzahlen mit "&B" statt % haben...

mx3
26.03.2005, 20:45
Hallo Knacki!

Hab mal dein Code genommen und mit
2 For Next Schleifen versehen.
Ist jetzt schlanker und ich glaub noch übersichtlich.



$regfile = "m16def.dat"
Config Porta = Output
Dim I As Byte

Do

For I = 0 To 7 Step 1 ' Schleifen-1-Anfang >>> Porta von 0 bis 7 hochzählen
Porta.i = 1 ' Schrittweite(Step) = 1
Waitms 35
Porta.i = 0
Next I ' Schleifen-1-Ende


For I = 6 To 1 Step -1 ' Schleifen-2-Anfang >>> Porta von 6 bis 1 herunterzählen
Porta.i = 1 ' Schrittweite(Step) = -1
Waitms 35
Porta.i = 0
Next I ' Schleifen-2-Ende



Loop


Vieleicht hilft dir das weiter.

mfg,MX3

Alter Knacker
26.03.2005, 20:54
jepp, das hilft weiter, und wie!
jetzt kann ich endlich mal rausfinden, wofür man das for i = blablabla braucht :-)
und es funzt, herzlichen dank, mx3!
mfg knacki

//edit: und natürlich auch danke an uwe, aber du hast editiert, habs also nicht gleich gesehen ;-)
thx knacki

PS: ihr seid aber wirklich geduldig mit den alten rössern!

Marco78
26.03.2005, 21:03
jetzt kann ich endlich mal rausfinden, wofür man das for i = blablabla braucht :-)
und es funzt, herzlichen dank, mx3!
mfg knacki
Hat Roland Walter das etwa nicht mit aufgeführt ;)

Schau dir den Link mal an, am besten alles ausdrucken und erstmal durchlesen und dann durcharbeiten. Hat mir auch geholfen.
Und gut zu verstehen ist der Text auch. Besonder da du ja kein blutiger Anfänger bist sondern auch schon wiesst, um was e sgeht.

Alter Knacker
26.03.2005, 21:22
naja, so einfach ist das gar nicht :-(

basic am C64 ging ganz gut, da war aber die hardware nicht so toll.
assembler-buch von data-becker damals durchgemacht und auch ziemlich gut kapiert, dann hab ichs weggelegt für fast 20 jahre.

dann html gelernt, ist zwar keine sprache in dem sinn, aber hat doch spass gemacht!

dann wieder ein wenig c durchprobiert, hat auch spass gemacht, aber eben bloss so kleine sachen wie taschenrechner in kommandozeilenform unter dos.

unter vb (4 bis 6) hab ich shop-software gemacht, mehr recht und schlecht, für meine damalige freundin, die hatte eine boutique und wollte bloss ein/ausgang im überblick haben, lässt sich mit DAO leicht realisieren.

aber schleifen habe ich nie kapiert, da bin ich immer ausgestiegen, zB for I = ......

habe bücher über c++, php, perl etc. hier rumliegen, aber mehr als zusammenkopiert habe ich nie, geschweige denn verstanden!

und so gesehen hilft mir dummie auch kein roland walter weiter, ich hoffe, das kann jemand verstehen.
alleine schon die frage: wieso immer "I"?
dazu kommt noch, dass ich ganz gut englisch kann, aber kein technisches, und es gibt eben keine deutsche programmiersprache, leider.
lange rede, kurzer sinn: ich bin ein schwieriger fall ;-)
aber sollte ich diese hürde nehmen, bin ich euch eine party schuldig!
:-) knacki

pebisoft
26.03.2005, 22:17
sag mal, was für ein jahrgang bist du. was für jungs bildest du aus und worin.
mfg pebisoft

Alter Knacker
26.03.2005, 22:23
hehe, jahrgang ´62 und ausbildung ab und zu, aber ich arbeite als kameramann und cutter beim privat-tv in oberösterreich.
früher ewig DJ, dann tontechniker, dann hat mich 3d-studio (dos) gefesselt und dann war das erlernen des premiere 1.0 der nächste logische schritt, dann irgendwann after effects von adobe, die ersten jingles und dann auch schon kamera.
fast zwei jahre beim orf zwischendurch und jetzt wieder bei den privaten.

wenn dann junge leute kommen, schmeiss ich auch unterbewusst mit fachausdrücken rum und merke zu spät, dass ich es ja leichter hatte beim lernen, weil die technick noch nicht so weit war bzw ich mehr zeit hatte dafür ;-)

mfg knacki

teslanikola
26.03.2005, 23:33
der code von teslanikola ist schon nicht mehr zu begreifen für den anfänger, weil nicht kommentiert. Sorry aber bin no ned so lang im Forum, wenn ich Progs tippe lass ich für gewöhnlich die Koms weg.

Mein Prog ist eigentlich ganz einfach:

der Basic befehl shift schiebt die 1en und nullen einer Variablen nach rechts oder links und um x stellen ( shift Var., left/right, x)
So sieht das dann aus wenn man die Var um eine stelle nach links shifted:
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
und so wenn man die Var um eine stelle nach rechts shifted:
10000000
01000000
00100000
00010000
00001000
00000100
00000010
00000001
Aber wie schon von anderen gesagt wurde kann man es auch mit x*2 oder x/2 machen ist aber nicht so gut, weil eine Division oder Multiplikation enorm Rechenleistung beansprucht!

$regfile = "2313def.dat"
$crystal = 10000000
Dim A As Byte

Config Portb = Output
A = 1
Do
Do
Portb = A
Waitms 10
Shift A , Left , 1 ' Schiebe 1 um eine Stelle nach links und somit auch die LED
Loop Until A = 128 ' wenn eins am "ende" der Var. beende Schiebvorgang
Do
Portb = A
Waitms 10
Shift A , Right , 1 ' Schiebe 1 um eine Stelle nach rechts und somit auch die LED
Loop Until A = 1 ' wenn eins am "ende" der Var. beende Schiebvorgang
Loop
SO besser??

recycle
26.03.2005, 23:52
aber schleifen habe ich nie kapiert, da bin ich immer ausgestiegen, zB for I = ......

Verschiedenen Schleifen und IF-Abfragen machen aber doch gerade wenn man noch nicht so richtig gut programmieren kann das halbe Programm aus. Die würde ich mir schon mal genauer ansehen.



und so gesehen hilft mir dummie auch kein roland walter weiter, ich hoffe, das kann jemand verstehen.
alleine schon die frage: wieso immer "I"?

Das I hat sich als Zählervariable einfach so eingebürgert, genauso wie man im Koordinatensystem die Achsen meist mit X und Y bezeichnet.
Du kannst aber statt I auch jede andere Variable verwenden. Bei verschachtelten Schleifen macht man das ja auch oft, z.B.:

For I = 1 to 10
For J = 1 to 10
.......
Next J
Next I

Das I, bzw. J hinter dem Next kannst du in Bascom glaube ich auch weglassen.

Die Funktion der Schleife ist eigentlich ganz einfach. Die Schleife fängt bei For an und hört bei Next auf. In jedem Durchlauf wird I um 1 hochgezählt. D.h. bei For I = 1 to 10 wird die Schleife 10 mal durchlaufen.
Oft wird die Zählervariable dann auch noch innerhalb der Schleife verwendet. Z.B. sollte dir der folgende Code die Zahlen 1 bis 10 ausgeben:


For k = 1 to 10
Print k
Next k



oder würde es reichen, wenn ich das mit left/right und byte*2 einfach kapiere und abhake?
Irgendwas einfach kapieren ist eigentlich immer gut ;-)
Mir persönlich gelingt es nur leider oft nicht so einfach.

Aber das mit dem Left/Right ist eigentlich recht einleuchtend, wenn man sich die passenden Werte im Binärsystem mal als Tabelle aufschreibt:



&B00000000 = 0 = 0 = 0
&B00000001 = 2^0 = 1 = 1
&B00000010 = 2^1 = 2 = 2
&B00000100 = 2^2 = 4 = 2*2
&B00001000 = 2^3 = 8 = 2*2*2
&B00010000 = 2^4 = 16 = 2*2*2*2
&B00100000 = 2^5 = 32 = 2*2*2*2*2
&B01000000 = 2^6 = 64 = 2*2*2*2*2*2
&B10000000 = 2^7 = 128 = 2*2*2*2*2*2*2
-----------------------------------------------------------
&B11111111 = 255




Eine Multiplikation mit 2 bedeutet, dass das Bit im Binärsystem eins nach links geschoben wird, bzw. das verschieben eines Bits nach links bedeutet eine Multiplikation mit 2, das verschieben nach rechts eine Division durch 2.

Ich glaube allerdings dein Beispiel mit dem Lauflicht ist keine besonders typische Anwendung. Bei manchen Ports sind gar nicht alle 8 Pins verfügbar und viele Pins haben Sonderfunktionen, z.B. PWM, Interrupt, Counter usw.
Ausserdem brauchen die meisten Dinge die man anschliesst, z.B. Motoren, Sensoren, Taster, LEDs usw. nur einzelne Pins und das teilweise als Eingang, teilweise als Ausgang.

Einen kompletten Port auf einmal zu schalten mag zwar programmiertechnisch eleganter sein, aber übersichtlicher ist es bestimmt nicht, wenn man in einem Befehl mehrere eigentlich völlig unabhängige Dinge, z.B. verschiedene Motoren, Sensoren usw. schaltet.

Ich würde da lieber die Möglichkeit von Bascom nutzen verschiedene Routinen und Funktionen für Motoren, Sensoren, zu definieren und in diesen Routinen die Pins so wie du es gleich zu Anfang gemacht hast einzeln über Portx.x ansprechen.
Dann ist meiner Meinung nach die Gefahr, das z.B. nach einer Änderung an der Motorsteuerung plötzlich alle Sensoren die am selben Port hängen
verrückt spielen wesentlich geringer.

Ich würde den Quellcode einfach so schreiben, wie du ihn selber am besten verstehst. Irgendwelche trickreichen Konstrukte die den Quelltext abkürzen bringen wenig, wenn man sie ein paar Wochen später selber nicht mehr durchschaut.
Ausserdem bedeutet ein kürzerer Quelltext ja auch nicht unbedingt, dass der Code den Bascom daraus kompiliert kürzer ist.


lange rede, kurzer sinn: ich bin ein schwieriger fall
aber sollte ich diese hürde nehmen, bin ich euch eine party schuldig!
knacki

Wie darf man sich so eine Party denn vorstellen? Schellack Platten, Kamillentee, Weichgebäck und als
Stimmungsmacher nen Klosterfrau Melissengeist? ;-)
(dann komme ich - bin nämlich genauso ein alter Knacker wie du ;-) )

Alter Knacker
27.03.2005, 00:27
Wie darf man sich so eine Party denn vorstellen? Schellack Platten, Kamillentee, Weichgebäck und als
Stimmungsmacher nen Klosterfrau Melissengeist? ;-)
(dann komme ich - bin nämlich genauso ein alter Knacker wie du ;-) )

LOL
wenn, dann gehts da eher um live-musik, grillen, saufen und quasseln, also nur um den spass an und für sich, wie bei der selbstbefriedigung ;-)
keine angst, auch medls kommen zu solchen parties, wenn auch erst wenige.
ich hab sogar eine eigene seite eingerichtet, allerdings für ein anderes board, aber macht ja nix, es geht ja ums kennenlernen...
www.boardtreffen.de

sollte sich hier jemand mit php bzw phpbb2 sehr gut auskennen, würde meine idee von damals ja auch für dieses board platz bieten.
zur zeit kann man nämlich die treffen und den zugang der verschiedenen leute nicht trennen, und ich will nicht, dass die fotos "fremden" zugänglich sind.
wäre nicht schlecht, wenn jedes board und jedes treffen eigene zugangsberechtigungen und eigene mods hätte, dann wärs schon perfekt.

aber ihr seid natürlich auch beim treffen von www.w4fboard.de eingeladen, wieso nicht?
termin steht noch nicht fest, aber jeder kann an der abstimmung teilnehmen.....
mfg knacki

28.03.2005, 03:13
Danke, Jungs,
das war ganz informativ.
Bernd =D>

Roboter n00b
19.05.2005, 22:05
Hi
Ich greiffe nun diesen Thread aufgrund 2 Fragen meinserseits nochmal auf^^
*duck* O:)

Ich bin auch schon am Lauflichterprogramme durcharbeiten, bin aber bei einzelnen noch verwirrt :-s

Nr1:

$regfile = "m32def.dat"
$crystal = 16000000
Dim A As Byte

Config Portc = Output
A = 1
Do
Do
Portc = A
Waitms 200
Shift A , Left , 1 ' Schiebe 1 um eine Stelle nach links und somit auch die LED
Loop Until A = 128 ' wenn eins am "ende" der Var. beende Schiebvorgang
Do
Portc = A
Waitms 200
Shift A , Right , 1 ' Schiebe 1 um eine Stelle nach rechts und somit auch die LED
Loop Until A = 1 ' wenn eins am "ende" der Var. beende Schiebvorgang
Loop

Zu diesem Programm:
1.
Wenn es heisst:

Portc = A
Ist dann automatisch portc.0 als erster wert gedacht?

2.

Loop Until A = 128
Wieso 128? Er rackert sich doch von 1 bis 7 durch, wieso nicht:
Loop Until A = 7 ??


Und noch was:
wenn ich die Erste LED permanent ausschalten will, wie muss ich das machen?
Wieso gehts mit diesem Programm hier nicht?

$regfile = "m32def.dat"

$crystal = 16000000
$baud = 9600
Config Portc = Output
Do

Portc.1 = 0

Loop


^^
Das wars vorerst...

cu & danke
Serge

teslanikola
20.05.2005, 19:17
Ist dann automatisch portc.0 als erster wert gedacht
Also wenn man schreibt Portc = x da werden die Ausgänge nach dem binärsystem geschaltet
1 = portc.0 auf 1
2 = portc.1 auf 1
4 = portc.2 auf 1
8 = portc.3 auf 1
...
9 = Portc.0 und Portc.3 auf 1

deshalb auch Until A = 128, da 128 für Portc.7 steht.

wen du eine LED permanent aus haben willst heist das einfach Portx.y = 0

sie wird dann erst angeschaltet wenn du den portx.y auf hight setzs

wodka
01.01.2006, 16:29
Ist wohl schon ein wenig älter der Thread, aber ich habe noch mal ein Frage..


$regfile = "2313def.dat"
$crystal = 10000000
Dim A As Byte

Config Portb = Output
A = 1
Do
Do
Portb = A
Waitms 10
Rotate A , Left , 1
Loop Until A = 128
Do
Portb = A
Waitms 10
Rotate A , Right , 1
Loop Until A = 1
Loop


Der code funzt ja einwandfrei, nur wie und mit welchen befehl kann ich denn die Ausgänge inventieren. Nun leuchten ja immer alle LEDs und eine geht immer aus. Extern kann man es inventieren, nur es muss ja auch softwaretechnisch leicht inventiert werden können. Gibt es dort in Bascom einen schönen Befehl für?

Schönen Gruß

PicNick
01.01.2006, 17:31
Das ist eine Möglichkeit:
Portb = A XOR &HFF

wodka
01.01.2006, 19:04
Cool, soas habe ich gesucht.. Aber ich möchte das gerne auch verstehen. Heißt das Xor "Exklusiv Oder" ??