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
|