8051 Zeitschleife ?

Ich möchte gerne mit dem 8051 eine Sekunde lang den P1 auf 87h schalten und nach einer Sekunde wieder ins Hauptprogramm springen. Ich weiß fast alles , außer wie ich den Port eine Sekunde lang einschalten kann und dann wieder in das Hauptprogramm springen.

Ich kann einfach die Zeitschleife nicht so lang machen , wie soll ich es machen ?? So das es eine Sekunde dauert?

Hallo Christoph,

hier eine Routine um 1 bis 256 Sekunden zu erzeugen.

der Aufruf für 1Sekunde sieht so aus:

MOV A,#01
ACALL WT_SEKS

################################################
Routinen WT_SEKS
Zweck:
Wartet eine Anzahl von Sekunden (wieviele : Akku)
Inputs:
Akku : Anzahl der Sekunden
Outputs: keine Seiteneffekte: Akku ist nacher 0
Stackbedarf (ohne Rücksprungadresse) 7 Bytes

WT_SEKS
PUSH ACC ;
MOV A,#200 ; 200 mal 5 ms sind 1Sek.
WT_SEKS2
ACALL WT_2_5MS ; warte 5 ms
ACALL WT_2_5MS
DJNZ ACC,WT_SEKS2 ; und weiter

POP ACC ; Sekundenzähler zurück
DJNZ ACC,WT_SEKS ; und nochmal

RET

WT_5MS
ACALL WT_2_5MS
WT_2_5MS
PUSH ACC
MOV A,#25
WT_2_5_2
ACALL WT_100US
DEC A
JNZ WT_2_5_2

POP ACC
RET

WT_100US
PUSH ACC
MOV A,#27
WT_100_2
DEC A
JNZ WT_100_2
POP ACC
RET

Eine andere Möglichkeit ist es einen Timer im Autoreloadmodus zu betreiben und in der Interuptroutine den Port im Sekundentakt zu verändern.
Vorteil, das Hauptprogramm kann andere Sachen weitermachen.

Gruß Michael