NickD
23.05.2006, 14:39
hallo ihr lieben coder,
ich möchte gerne ein signal, des dcf77 empfängers, verarbeiten.
soweit ich weiß, wird der anfang durch 2 sekunden stille gekenntzeichnet.
sekundenweise kommen signale (low(100ms) und high(200ms)), welche das zeit/datums-format übermitteln. diese daten später tzu verarbeiten stellt auch mein ziel dar!
momentan schiebe ich den ausgang (dcf77) in den carry und prüfe auf eine 1. ist das der fall, prüfe ich auf die nächste, um wirklich am anfang zu stehen. dann lasse ich ein 50ms timer laufen und befinde mich dann eigentlich in der mitte. nach einem 1 sekunde-timer müsste ich mich dann entweder auf dem nächsten high/low-bit befinden oder auf einer null (das stellt dann den start dar). in diesem fall, setze ich eine led (p4.0)
ich benutze den assembler 8051......und das ist mein code:
Code:
$IC(sfr.def)
ORG 4000H
start:
clr c ;inhalt vom carry loeschen
MOV P4,#0 ;alle Lampen aus
MOV R0,#20 ;R0 <- 20
MOV c,P1.0 ;Signal vom DCF77 -> Carry
JC start ;wenn != 1 -> spring wieder zu start
new:
MOV c,P1.0 ;Signal vom DCF77 -> Carry
JNC new ;wenn != 1 -> spring wieder zu new
call timer
pruef: ;Label "pruef" Anfang
call timer ;1 sekunde warten
DJNZ R0,pruef
MOV c,P1.0 ;Signal vom DCF77 -> Carry
JC pruef ;Carry != 0 -> spring zum Label pruef
setb P4.0 ;erste Lampe anschalten
jmp $
$IC(timer.def)
END
das ist mein timmerprogram (timer.def)
Code:
timer:
ANL TMOD,#00000001B
ORL TMOD,#00000001B
MOV TH0,#high 15535
MOV TL0,#low 15535
setb TR0
JNB TF0,$
clr tr0
clr tf0
ret;
bis jetzt ist mein status folgender:
die lampe geht nie an
ich würde mich tierisch über eine antwort freuen!!!!
ich bedanke mich schon einmal im vorraus.....
lg, nick[/code]
ich möchte gerne ein signal, des dcf77 empfängers, verarbeiten.
soweit ich weiß, wird der anfang durch 2 sekunden stille gekenntzeichnet.
sekundenweise kommen signale (low(100ms) und high(200ms)), welche das zeit/datums-format übermitteln. diese daten später tzu verarbeiten stellt auch mein ziel dar!
momentan schiebe ich den ausgang (dcf77) in den carry und prüfe auf eine 1. ist das der fall, prüfe ich auf die nächste, um wirklich am anfang zu stehen. dann lasse ich ein 50ms timer laufen und befinde mich dann eigentlich in der mitte. nach einem 1 sekunde-timer müsste ich mich dann entweder auf dem nächsten high/low-bit befinden oder auf einer null (das stellt dann den start dar). in diesem fall, setze ich eine led (p4.0)
ich benutze den assembler 8051......und das ist mein code:
Code:
$IC(sfr.def)
ORG 4000H
start:
clr c ;inhalt vom carry loeschen
MOV P4,#0 ;alle Lampen aus
MOV R0,#20 ;R0 <- 20
MOV c,P1.0 ;Signal vom DCF77 -> Carry
JC start ;wenn != 1 -> spring wieder zu start
new:
MOV c,P1.0 ;Signal vom DCF77 -> Carry
JNC new ;wenn != 1 -> spring wieder zu new
call timer
pruef: ;Label "pruef" Anfang
call timer ;1 sekunde warten
DJNZ R0,pruef
MOV c,P1.0 ;Signal vom DCF77 -> Carry
JC pruef ;Carry != 0 -> spring zum Label pruef
setb P4.0 ;erste Lampe anschalten
jmp $
$IC(timer.def)
END
das ist mein timmerprogram (timer.def)
Code:
timer:
ANL TMOD,#00000001B
ORL TMOD,#00000001B
MOV TH0,#high 15535
MOV TL0,#low 15535
setb TR0
JNB TF0,$
clr tr0
clr tf0
ret;
bis jetzt ist mein status folgender:
die lampe geht nie an
ich würde mich tierisch über eine antwort freuen!!!!
ich bedanke mich schon einmal im vorraus.....
lg, nick[/code]