Ich hoffe, dass ihr mir helfen könnt, ich versuche ein Zeitschleife zu programmieren, aber kann dies leider nicht so richtig schreiben. Da so wie ich es bisher mir angesehen habe muss ich eine mehrfach verschachtelte Zeitschleife schreiben, komm aber mit dem richtigen aufbaue der Verschachtelung nicht klar. Ich hoffe, dass mir jemand hier im Forum dabei helfen kann. Vielen Dank im Vorraus.
Gast
#3894160
Hi Probiers mal hiermit: http://electronics-lab.com/downloads/mcu/003/index.html MfG Spess
In Assembler? Das ist einfach. Ich geh schon mal die Glaskugel polieren. ;)
Sven Radola schrieb: > aufbaue der Verschachtelung nicht klar. Ich hoffe, dass mir jemand hier > im Forum dabei helfen kann. > Vielen Dank im Vorraus. Probiere es mal hiermit:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
Für 16MHz eingestellt. Es werden Register r15-r19 benutzt. Natürlich kannst du die Routine Waitms unabhängig von der Routine WaitSec benutzen. Beim Eintritt wird nicht auf Null geprüft, also ist r16 == 0 gleichbedeutend mit 256 mSec bzw. 256 Sec.
Ich habe so wie es aussieht leider vergessen, dass ich mit einen PIC18 Microcontroller arbeite. Ich gehe doch richtig in der Annahme, dass der Code für AVR ist, oder kann ich den so auch für den PIC übernehmen? Wahrscheinlich rollen manche von euch bei solchen Fragen mit den Augen, aber so ist es leider wenn mann sowas gerade Anföng. Ich Bedanke mich schonmal im Vorfeld für eure Gedult.
Sven Radola schrieb: > oder kann ich den so auch für den PIC übernehmen? Nein. Habe ich es richtig verstanden, dass du eine Warteschleife Programmieren willst? Wie genau müssen die 10s sein?
Sie muss nicht auf die ms genau sein, es sollte nach Möglichkeit nicht 9, oder 11 Ssek. sein.
Gast
#3894545
Wie wäre es mit Timer? Die wurden dafür erfunden.
Sven Radola schrieb: > Ich habe so wie es aussieht leider vergessen, dass ich mit einen PIC18 > Microcontroller arbeite. Ich gehe doch richtig in der Annahme, dass der > Code für AVR ist, oder kann ich den so auch für den PIC übernehmen? Natürlich nicht, aber:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
Wie wäre es wenn du jetzt selbst probierst ?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
10.000250s @ 16MHz
Ich habe den Programmteil von Max H. als Unterprogramm einebunden, es funktioniert aber nicht so, wie ich es mir gedacht habe. Ich will in meinem Programm meine LED's an PORTD 10 sek. an und aus schalten, ich werde hier meinen Quellode posten, hoffe ihr könnt mir sagen, wo mein Fehler liegt. Die Konfigzeile habe ich rausgenommen, für bessere Übersicht ------------------------------------------------------------------------ --- list p=18lf46k22 ; List definiert den Controller #include <p18lf46k22.inc>; Headerdatei mit Registernamen ;--------------------------------- ; VARIABLE DEFINITIONS ;--------------------------------- CBLOCK 0x20 ; BLOCK abb 0x10(RAM) delay_cnt: 3 ENDC ;--------------------------------- ORG 0x000 ; Anfangsadresse 0x000 ResetVector movlw high(main) movwf PCLATH goto main ;--------------------------------- ; Hauptprogramm: main ;--------------------------------- main Banksel ANSELD clrf ANSELD ; Digital I/O clrf TRISD ; Ausgang clrf PORTD ; Ausgänge auf 0 setzen ;-------------------------------- LED movlw 0xff movwf PORTD ; Alle LED's an call delay ; delay Unterroutine aufrufen clrf PORTD call delay goto LED delay movlw .250 movwf delay_cnt+2 delay_2: movlw .200 movwf delay_cnt+1 delay_1: movlw .199 ; 200µs movwf delay_cnt+0 nop decfsz delay_cnt+0 bra $-4 decfsz delay_cnt+1 bra delay_1 decfsz delay_cnt+2 bra delay_2 return End
Sven Radola schrieb: > es funktioniert aber nicht so, wie ich es mir gedacht habe. Was funktioniert nicht?
Es findet kein Wechsel statt, die LED's bleiben angeschaltet. Es wir der PortD also nicht geköscht.
Wenn Ich deinen Code auf meinen PIC18F45k22 flashe (mit meinen Configs) blinken die LEDs. Stimmt vllt. mit den Configs was nicht? BTW: Beim PIC18 würde ich zum Ausgeben das LATx register verwenden, > movlw high(main) > movwf PCLATH Das ist auch nicht nötig, da der PIC18 mit einen GOTO 20bit adressiert.
Gast
#3894719
Hier gibt es einen Delay-Codegernerator für PICs http://www.piclist.com/techref/piclist/codegen/delay.htm Das ist der generierte Code für 10 Sekunden bei 16MHz:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
Gruß John
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.