Waarom is het zo dat de delayms invloed heeft op het high maken v/d led???

SYMBOL LED1 = PORTA.2 ;Poort A.0 heeft nu de naam LED1
SYMBOL S1 = PORTB.0 ;Poort B.0 heeft nu de naam S1
SYMBOL S2 = PORTB.1 ;Poort B.1 heeft nu de naam S2

SYMBOL uit = 1
SYMBOL aan = 0
SYMBOL tijd = 3000

PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
CLEAR ;Wis alle RAM geheugen

WHILE 1 = 1
IF S1 = aan THEN HIGH LED1

DELAYMS tijd

IF S2 = aan THEN LOW LED1
WEND

Je zult altijd moeten wachten tot die tijd is afgelopen voor je LED1 kunt inschakelen. En dan nog lukt dat alleen als je de vinger op de knop houd. Meestentijds zal het programma namelijk aan het wachten zijn op die tijd, dan vliegensvlug kijken of LED2 uitmoet, kijken of LED1 aan moet en weer gaan zitten wachten op die tijd.

en gebruik trisa en trisb eens. een led = 1 ipv high led

spaart coderuimte.

WHILE 1 = 1
while s1<>aan
wend
HIGH LED1
DELAYMS tijd
while s2<>aan
wend
LOW LED1
WEND

probeer dat eens.

Ja inderdaad dit werkt wel..
Wat ik wil bereiken is dat met s1 een uitgang geset wordt en met s2 deze uitgang gereset wordt.
Bij aanvang van de cyclus is de reset ingang (s2) hoog (schakelnokje) terwijl s1 (deurtje wat gesloten wordt) gemaakt wordt en gedurende cyclus ook blijft.
Nu dacht ik om gewoon de eerste 2 sec na de start niet naar s2 te kijken zodat de schakelnok vrij komt, waarna als deze weer gemaakt wordt de cyclus stopt. S1 blijft alleen tijdens de cyclus gemaakt.
Dit werkt dus niet zo. Weet iemand misschien wel hoe??

Ik kan het prog wel met logische blokken maken maar krijg het maar niet in basic.
Kan iemand helpen?

iets dergelijk als:

[edit]bij nalezen toch niet werkent volgens psecificatie...zal vanmiddag nog een wat bedenken[edit]

[Bericht gewijzigd door Jan klaasen op ]

je moet wel ff vertalen naar basic want anders moet ik gaan op zoeken hoe dat allemaal zit

x = 0
while 1=1
inc x
if x > tijd then
IF S2 = aan THEN LOW LED1
endif
IF S1 = aan THEN HIGH LED1
wend

de vraag wat doe je met x? wanneer reset je hem? hoe gaat de cyclus verder

x mag zichzelf na 5 sec resetten denk ik. dit is tijdens de mech. cyclus van zo'n 10 sec.
Ik ga het vanm. effe proberen.

Thanks

Volgens mij werkt het niet...

tijd is nu niet in ms of seconden of wat maar gewoon het aantal keer dat ie langs raast. hoeveel instructies hij nodgi heeft in asm, en hoevel clockcycly die instructie duren, en hoe snel je uc is bepaalt nu de tijd. tijd moet dus veel zijn

Op 30 juli 2006 19:24:47 schreef free_electron:
WHILE 1 = 1
while s1<>aan
wend
HIGH LED1
DELAYMS tijd
while s2<>aan
wend
LOW LED1
WEND

probeer dat eens.

Het is bijna gelukt.. het enige wat niet wil is het low maken van led1 wanneer s1 uit is. Dit ten aller tijde???

Toch vreemd... Ik heb een analoge spanningsbewaking + LCD + STroombewaking v/d aandrijving en dit stukje logika krijg ik nie zo voorelkaar???

Met onderstaand proggie probeer ik de cyclus. Het principe werkt maar nu is het zo dat wanner s1 laag wordt led 1 laag moet worden en weer hoog mag worden wanneer s1 weer hoog wordt???

WHILE 1 =1
IF S1 = 1 THEN PRINT AT 1,1 , "DEUR OPEN"
WHILE S1 <>0
WEND
HIGH LED1
CLS
PRINT AT 1,1 , "2sec wachten"
PRINT AT 2,1 , "alv.reset actief"
DELAYMS 2000
WHILE S2 <>0
WEND
LOW LED1
CLS
PRINT AT 2,2, "einde cyclus"
WHILE S1 = 0 AND S2 = 0
WEND

WEND
END

WHILE 1 = 1
while s1<>aan
wend
HIGH LED1
DELAYMS tijd
while s2<>aan
wend
LOW LED1
WEND

Wie weet hoe ik in bovenstaand prog led1 ten aller tijden uit krijg als s1 uit is???

Alvast bedankt

If sw1 = 1 then led1 = 1

[Bericht gewijzigd door Ibanez op ]

Werkt dit ook terwijl de delay bezig is...(2s)