Hey zusammen, ich habe mein lauflicht so weit Programmiert das die Led nach der Reihe an gehen und bleiben ann ,jetzt komm ich nur nicht mehr aus der schleife raus .So das alle led´s wieder ausgehen und von vorne das Lauflicht loslegt. Vill hat jemand von euch eine ansatz lösung oder so
Hallo, mach dir um die Befehle call schleife ; Wartezeit rlf PORTB,f ; laufen zur nächsten LED eine Schleife, ähnlich wie in den Wartezeiten, also neue Variable mit Wert laden, deinen Port bedienen, danach die Variable erniedrigen und wenn nicht 0 dann wieder deinen Port bedienen. Ist die Schleife 0 dann kannst du so ähnlich die LED in einer weiteren Schleife wieder zurücklaufen lassen. Ganz am Ende springst du wieder nach m1 und der Ablauf geht von vor los. Das wäre zumindest erstmal der einfachste Ansatz. Später dann mit Statemachine und Timer... Holger
Hey habe versucht deine Idee um zu setzten habe es leidern icht hin bekommen, stehe immer noch vor dem Problem das Lauflicht von vorne Starten zu lassen. Vill kurz schreiben un mir zeigen wie es aussehen soll oder so danke gruß denis
Hallo, also ein Listing als PDF dranzuhängen ist keine gute Idee, das kann man nicht richtig rauskopieren. Da ich nur noch mit 18F programmiere hoffe ich die Befehle vom 16F stimmen noch. Das unten ist ungetestet, sollte aber zumindest das Prinzip erklären. Was du mit der LED machst, vorher setzen, löschen usw. musst du dir selbst ausdenken und testen. DECFSZ zieht von counter1 immer 1 ab und wenn das 0 ergibt (Zero gesetzt) wird der nächste Befehl übersprungen, ansonsten springt er immer wieder zu m1 bzw. m2 zurück. RLF und RCF rotieren immer durchs Carry, du kannst also das was reingeschoben wird (0 oder 1, vorn oder hinten, LOL) durch setzen und rücksetzen des Carry Flag bestimmen. Da das Carry von der vorhergehenden Operation beeinflusst werden kann, solltest du es im Code direkt immer setzen oder löschen. Also versuch mal selbst das einzufügen, wenn es nicht klappt dann als Textfile anhängen - neue variable z.b. counter1 im cblock einfügen
1 | mainloop: |
2 | |
3 | bcf PORTB,0 ; LED an RB0 einschalten |
4 | |
5 | movlw 0x08 ; 8 x durchlaufen lassen |
6 | movwf counter1 |
7 | |
8 | m1: call schleife ; Wartezeit |
9 | bsf STATUS,C ; immer eine log. 1 nachschieben |
10 | rlf PORTB,f ; laufen zur nächsten LED |
11 | decfsz counter1 ; counter1 - 1 und übergehe nächst. befehl, wenn 0 |
12 | goto m1 |
13 | |
14 | |
15 | bcf PORTB,7 ; LED an RB0 einschalten (sicherheitshalber) |
16 | |
17 | movlw 0x08 ; 8 x durchlaufen lassen |
18 | movwf counter1 |
19 | |
20 | m2: call schleife ; Wartezeit |
21 | bsf STATUS,C ; immer eine log. 1 nachschieben |
22 | rrf PORTB,f ; zurückrotieren |
23 | decfsz counter1 ; counter1 - 1 und übergehe nächst. Befehl, wenn 0 |
24 | goto m2 |
25 | |
26 | ; weitere spielereien..... |
27 | |
28 | goto mainloop |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.