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.
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:
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?
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:
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
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.