Hallo, ik heb een vraagje om een 'lus' in mijn programa maar een keer te laten zien. heb al een paar dingen geprobeert maar ik kom er niet uit.
Bij gebuikshandleiding en installatie moet maar een keer gebruikt worden. aan het einde van mijn porgramma staat, als IF S2 = 0 THEN BREAK WHILE, dan pakt hij ook weer mee wat ik niet wil. Weet iemand mischien wat ik hier aan kan doen?
DEVICE 16F877A ;Gebruik een 16F877A type
CONFIG HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF
XTAL 20
SYMBOL Snelheid = 200 ;Snelheid loop effect
SYMBOL Snelheid2 = 500
SYMBOL S1 = PORTB.0 ;Poort B.0 heeft nu de naam S1
SYMBOL S2 = PORTB.1
SYMBOL Lengte = 16 ;Dit getal bepaalt de lengte van de lijn (display breedte)
DIM Teller AS BYTE ;Deze Teller kan tot max.255 tellen (BYTE = 255)
DELAYMS 500 ;LCD stabilisering
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
;gebuikshandleiding
CLS ;Wis scherm en zet cursor links bovenaan
PRINT AT 1, 1, "druk op S1 om"
PRINT AT 2, 1, "naar volg. te "
DELAYMS 4000
CLS
PRINT AT 1, 1, "gaan, of S2 als"
PRINT AT 2, 1, "word aangegeven"
DELAYMS 4000
CLS
;instalatie
CLS ;Scherm wissen
CLEAR ;Wis alle RAM geheugen
PRINT AT 2, 1, REP "_"\Lengte ;Teken een lijn van underscore (lage) streepjes
PRINT AT 1, 1, "installeren"
REPEAT
DELAYMS 400
INC Teller
PRINT AT 2, 1, REP 255\Teller ;Aantal blokjes afhankelijk van 'Teller'
UNTIL Teller = Lengte ;Blokjes tekenen totdat het aantal gelijk is aan 'Lengte'
CLS ;wis scherm
CLEAR
;hoofprogramma mannelijke
WHILE 1 = 1
WHILE 1 = 1
DELAYMS Snelheid2
;papa
;Letter p
PRINT $FE,$40,$00,$07,$0F,$0F,$0E,$0E,$0E,$0E,_
$00,$1C,$1E,$0E,$06,$06,$06,$06,_
$0F,$0F,$0F,$0E,$0E,$0E,$0E,$0E,_
$06,$1E,$1C,$00,$00,$00,$00,$00
PRINT AT 1, 1, " ", 0, 1 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 1, " ", 2, 3 ;Regel 2, positie 4, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 4, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 4, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;Letter p
PRINT $FE,$40,$00,$07,$0F,$0F,$0E,$0E,$0E,$0E,_
$00,$1C,$1E,$0E,$06,$06,$06,$06,_
$0F,$0F,$0F,$0E,$0E,$0E,$0E,$0E,_
$06,$1E,$1C,$00,$00,$00,$00,$00
PRINT AT 1, 7, " ", 0, 1 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 7, " ", 2, 3 ;Regel 2, positie 4, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 10, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 10, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
CLS ;wis scherm
IF S1 = 0 THEN BREAK WHILE
WEND
WHILE 1 = 1
;pa
DELAYMS Snelheid2
;Letter p
PRINT $FE,$40,$00,$07,$0F,$0F,$0E,$0E,$0E,$0E,_
$00,$1C,$1E,$0E,$06,$06,$06,$06,_
$0F,$0F,$0F,$0E,$0E,$0E,$0E,$0E,_
$06,$1E,$1C,$00,$00,$00,$00,$00
PRINT AT 1, 1, " ", 0, 1 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 1, " ", 2, 3 ;Regel 2, positie 4, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 4, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 4, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
CLS ;wis scherm
IF S1 = 0 THEN BREAK WHILE
WEND
WHILE 1 = 1
CLS
DELAYMS Snelheid2
; opa
;Letter O
PRINT $FE,$40,$03,$07,$0C,$18,$18,$18,$18,$18,_
$18,$1C,$06,$03,$03,$03,$03,$03,_
$18,$18,$18,$18,$18,$0C,$07,$03,_
$03,$03,$03,$03,$03,$06,$1C,$18
PRINT AT 1, 1, " ", 0, 1 ;Regel 1, positie 1, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 1, " ", 2, 3 ;Regel 2, positie 1, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;Letter p
PRINT $FE,$40,$00,$07,$0F,$0F,$0E,$0E,$0E,$0E,_
$00,$1C,$1E,$0E,$06,$06,$06,$06,_
$0F,$0F,$0F,$0E,$0E,$0E,$0E,$0E,_
$06,$1E,$1C,$00,$00,$00,$00,$00
PRINT AT 1, 4, " ", 0, 1 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 4, " ", 2, 3 ;Regel 2, positie 4, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 7, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 7, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
CLS ;wis scherm
IF S1 = 0 THEN BREAK WEND
WEND
CLS
PRINT AT 1, 1, "Druk op S2 om"
PRINT AT 2, 1, "door te gaan"
DELAYMS 3500
CLS
IF S2 = 0 THEN BREAK WHILE
WEND
;hoofdprogramma vrouwelijk
WHILE 1 = 1
WHILE 1 = 1
;mama
DELAYMS Snelheid2
;letter m
PRINT $FE,$40,$00,$06,$0F,$0F,$0F,$0F,$0F,$0E,_
$00,$00,$00,$00,$00,$11,$11,$1B,_
$00,$0C,$1E,$1E,$1E,$1E,$1E,$0E,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,_
$1B,$1F,$1F,$0E,$04,$00,$00,$00,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E
PRINT AT 1, 1, " ", 0, 1, 2 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1 en 2
PRINT AT 2, 1, " ", 3, 4, 5 ;Regel 2, positie 4, spaties wist oude letter, karakter 3 en 4 en 5
DELAYMS Snelheid
DELAYMS Snelheid2
CLS
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 5, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 5, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
CLS ;wis scherm
;letter m
PRINT $FE,$40,$00,$06,$0F,$0F,$0F,$0F,$0F,$0E,_
$00,$00,$00,$00,$00,$11,$11,$1B,_
$00,$0C,$1E,$1E,$1E,$1E,$1E,$0E,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,_
$1B,$1F,$1F,$0E,$04,$00,$00,$00,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E
PRINT AT 1, 7, " ", 0, 1, 2 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1 en 2
PRINT AT 2, 7, " ", 3, 4, 5 ;Regel 2, positie 4, spaties wist oude letter, karakter 3 en 4 en 5
DELAYMS Snelheid
DELAYMS Snelheid2
CLS
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 11, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 11, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
CLS ;wis scherm
IF S1 = 0 THEN BREAK WHILE
WEND
WHILE 1 = 1
;ma
DELAYMS Snelheid2
;letter m
PRINT $FE,$40,$00,$06,$0F,$0F,$0F,$0F,$0F,$0E,_
$00,$00,$00,$00,$00,$11,$11,$1B,_
$00,$0C,$1E,$1E,$1E,$1E,$1E,$0E,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,_
$1B,$1F,$1F,$0E,$04,$00,$00,$00,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E
PRINT AT 1, 1, " ", 0, 1, 2 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1 en 2
PRINT AT 2, 1, " ", 3, 4, 5 ;Regel 2, positie 4, spaties wist oude letter, karakter 3 en 4 en 5
DELAYMS Snelheid
DELAYMS Snelheid2
CLS
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 5, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 5, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
CLS ;wis scherm
IF S1 = 0 THEN BREAK WHILE
WEND
WHILE 1 = 1
;oma
DELAYMS Snelheid2
;letter o
PRINT $FE,$40,$03,$07,$0C,$18,$18,$18,$18,$18,_
$18,$1C,$06,$03,$03,$03,$03,$03,_
$18,$18,$18,$18,$18,$0C,$07,$03,_
$03,$03,$03,$03,$03,$06,$1C,$18
PRINT AT 1, 1, " ", 0, 1 ;Regel 1, positie 1, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 1, " ", 2, 3 ;Regel 2, positie 1, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
;letter m
PRINT $FE,$40,$00,$06,$0F,$0F,$0F,$0F,$0F,$0E,_
$00,$00,$00,$00,$00,$11,$11,$1B,_
$00,$0C,$1E,$1E,$1E,$1E,$1E,$0E,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,_
$1B,$1F,$1F,$0E,$04,$00,$00,$00,_
$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E
PRINT AT 1, 4, " ", 0, 1, 2 ;Regel 1, positie 4, spaties wist oude letter, karakter 0 en 1 en 2
PRINT AT 2, 4, " ", 3, 4, 5 ;Regel 2, positie 4, spaties wist oude letter, karakter 3 en 4 en 5
DELAYMS Snelheid
DELAYMS Snelheid2
CLS
;Letter A
PRINT $FE,$40,$03,$07,$0E,$0C,$1C,$1C,$1C,$1C,_
$18,$1C,$0E,$07,$07,$07,$07,$07,_
$1F,$1F,$1F,$1C,$1C,$1C,$1C,$1C,_
$1F,$1F,$1F,$07,$07,$07,$07,$07
PRINT AT 1, 8, " ", 0, 1 ;Regel 1, positie 7, spaties wist oude letter, karakter 0 en 1
PRINT AT 2, 8, " ", 2, 3 ;Regel 2, positie 7, spaties wist oude letter, karakter 2 en 3
DELAYMS Snelheid
DELAYMS Snelheid2
CLS ;wis scherm
IF S1 = 0 THEN BREAK WHILE
WEND
CLS
PRINT AT 1, 1, "Druk op S2 om"
PRINT AT 2, 1, "door te gaan"
DELAYMS 3500
CLS
IF S2 = 0 THEN BREAK WHILE
WEND
jazeker met een for...next loopje kun net zovaak uit laten voeren als je wilt dus ook maar 1 keer. kijk eens in curcusdeel 6 van http://www.picbasic.nl/ daar staat het mooi beschreven
groetjes gerben
Ik vraag me ook af waarom je een "oneindige" While lus maakt en er dan vervolgens met een conditie "uitbreekt". Waarom deze conditie niet gewoon op de lus zetten.
Dit is het zelfde als een steen op je gaspedaal leggen en in geval van "gevaar" uit de auto springen. Op dat moment t gaspedaal loslaten is een stuk eleganter.
Groeten, Bram
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Veel onnodige code en onnodige fouten.
Zelfs te veel om op te noemen (sorry).
Ik moet je adviseren de cursus nog eens goed door te nemen.
benleentje
Golden Member
Ik ben het met frits eens dat je erg veel fouten maakt. Die toch goed beschreven zijn in zijn cursus. Het is echt beter om daar nog eens goed aandacht aan te besteden. Hoop dat je dan niuewe ideeen opdoet.
Even een voorbeeldje.
PRINT AT 1, 1, "Druk op S2 om"
PRINT AT 2, 1, "door te gaan"
DELAYMS 3500
CLS
IF S2 = 0 THEN BREAK WHILE
Waarschijnlijk denk je dat je nu 3,5 sec de tijd hebt om op S2 te drukken. Maar de melding verschijnt nu enkel voor 3,5 sec op het beeld en je hebt maar 1µS de tijd om op s2 te drukken. Nee dat zeg ik verkeert. De controller heeft maar 1µS (dit is 1 instructie) de tijd om te kijken of s2 is ingedrukt. Heb je toevallig de knop al die tijd ingedrukt dan gaat het goed.
Kijk in de cursus van frits hoe hij dat oplost.
Kuijl
Al doende leer ik.
Als je iets maar één keer wil laten gebeuren, waarom zou je dan zonder voorwaarde een lus in gaan.
Wat het programma eigenlijk zou moeten doen is ook niet duidelijk alles wordt nu van A tot Z afgehandeld.
Je programma blokje voor blokje opnieuw opbouwen en dan bij alles wat er moet gaan gebeuren je afvragen onder welke voorwaarde en hoe vaak het moet gaan gebeuren.
De toevoeging While achter Break is overigens niet nodig.
Dit stukje mis ik ook.
ALL_DIGITAL TRUE ; Alle poorten digitaal
Symbol On = 1 ; on is hoog
Symbol off = 0 ; off is laag
benleentje
Golden Member
Op 22 oktober 2009 19:46:35 schreef Kuijl:
Je programma blokje voor blokje opnieuw opbouwen en dan bij alles wat er moet gaan gebeuren je afvragen onder welke voorwaarde en hoe vaak het moet gaan gebeuren.
Nee. Is ook niet goed. Je eerst afvragen wat er wanneer gaat gebeuren. Dit schrijf je dan in op een stuk papier. Daar ga je stoeien met het verloop van het programma. En dan pas gaan programmeren.
Kuijl
Al doende leer ik.
plantrekker
True story bro!
En voor de grotere programma's maak je van dat papier eerst nog een flowchart voordat je begint te programmeren.
Zo iets 
benleentje
Golden Member
Ja zoiets. Dan zie je al gelijk wat er wanneer gaat gebeuren. Je programma wordt regel voor regel uitgevoert. Als je zegt dat hij 4 seconden moet wachten dan gebeurt dat ook. In die 4 seconden gebeurt er ook helemaal niets en ook verder niets meer in je programma.
Ik ga binnenkort even deze progamma aanpassen en dan zet ik er achter wat ik wil en probeer de fouten er uit te halen. De oneindige lus was eingelijk wel mijn bedoeling, Je moet nu eerst op een knop drukken om dan naar de volgende lus te gaan.
benleentje;
Dat stukje wat u bedoelt laat eerst; druk op s2 om door te gaan. en dat duurt 3.5 sec (tijd om het te lezen). Dan kun je op S2 drukken. als je dat niet doet begint hij weer overnieuw met de lus
PRINT AT 1, 1, "Druk op S2 om"
PRINT AT 2, 1, "door te gaan"
DELAYMS 3500
CLS
IF S2 = 0 THEN BREAK WHILE
U bedoelt zeker dit stukje
DELAYMS AntiDender
WHILE Toets = AAN : WEND
DELAYMS AntiDender
WHILE Toets = UIT : WEND
CLS
