Servus, ich habe ein Problem mit meiner Ampelsteuerung(s.u.) Es ist eine normale Kreuzung, an der einen Seite ist dabei ein Fußgängerüberweg der per Taster ausgelöst werden kann. Die Zeitschleife für die jeweiligen Phasen muss ich mit einem Timer umsetzen, das verlangt die Aufgabe. Den Taster muss ich mehr oder weniger mit einem Interrupt0 bearbeiten, da es sich nur um einen Drucktaster und keinen Schalter handelt(also wie real). Dabei liegt bei mir das Problem. Einen Timer0 arbeitet ebenso mit einem Interrupt und es scheint, als würden die sich nicht mögen. Man kann ja die Prioritäten verändern. Wenn ich nun die Priorität des Timers höher setze als die des Interrupts funktioniert nur noch der Timer, andersrum funktioniert nur noch der Interrupt, was kann ich da tun? Wo liegt bei mir da der Fehler? Also der Controller ist von Atmel, T89C51RD2 so weit ich weiß.
mfg
INCLUDE C51RD2.INC
code at 0
SJMP init
ORG 0003h
CLR TR0
SETB C
RETI
SJMP init
ORG 000Bh
INC A
RETI
init:
SETB EA
SETB EX0
SETB ET0
SETB TF0
MOV TMOD,#00000001b
SETB IE0
SETB IT0
MOV IPL0,#00000001b
MOV TL0,#0
MOV TH0,#0
MOV P2,#10110110b
haupt:
MOV P2,#10110110b
LCALL zeit1
MOV P2,#10100110b ;#Rot1Rot2Gelb2Rot3
LCALL zeit1
MOV P2,#10011110b ;#Rot1Grün2Rot3
LCALL zeit4
MOV P2,#10101110b ;#Rot1Gelb2Rot3
LCALL zeit2
MOV P2,#10110110b ;#Rot1Rot2Rot3
JC taster
LCALL zeit1
MOV P2,#10110100b ;#Rot1Gelb1Rot2Rot3
LCALL zeit2
MOV P2,#10110011b ;#Grün1Rot2Rot3
LCALL zeit4
MOV P2,#10110101b ;#Gelb1Rot2Rot3
LCALL zeit2
MOV P2,#10110110b ;#Rot1Rot2Rot3
JC taster
LCALL zeit1
LJMP haupt
taster:
LCALL zeit1
MOV P2,#10110110b ;#Rot1Rot2Rot3
LCALL zeit1
MOV P2,#01110110b ;#Rot1Rot2Grün3
LCALL zeit4
MOV P2,#10110110b ;#Rot1Rot2Rot3
CLR C
SJMP haupt
zeit1:
SETB TR0
CJNE A,#00000101b,zeit1
CLR A
CLR TR0
RET
zeit2:
SETB TR0
CJNE A,#00001000b,zeit2
CLR A
CLR TR0
RET
zeit4:
SETB TR0
CJNE A,#00010011b,zeit4
CLR A
CLR TR0
RET
END