Stap 13: Loop-the-Loop
Een ander ding dat computers zijn goed in doet dingen over en voorbij. Een computer doet niet vervelen, noch wordt het moe uit (tenzij de lading van de batterij begint steeds laag, maar dat is een andere kwestie.) In deze stap, zullen we zien een manier om de ' 2313 zich herhalen.
Sla uw programma vanaf de laatste stap, een nieuw programma starten door te klikken op bestand en vervolgens opslaan als... Geef uw nieuwe programma een nieuwe naam ("LED Test Flash", misschien.) Nu onmiddellijk na de Main routine opmerkingsregel, voeg toe:
doen ' invoering van de-lus
Voeg nu een andere lijn na het lichaam van uw programma:
lus
Zodat de hoofdmacht van uw programma er zo uitzien zal:
' Hoofdprogramma
Doen
set PortB.0
waitms 500
Reset PortB.0
Loop
Dit wordt een lus genoemd omdat de lijnen tussen de Do en de lusinstructie over en ouder, worden uitgevoerd in een lus-mode. Door traditie, we laten inspringen, of lege plaatsen spaties voor, de lijnen binnen de lus. Dit maakt het makkelijker voor ons om te zien in één oogopslag welke lijnen worden wordt herhaald. De compiler BASCOM geeft niet unidirectioneel of andere; het compileert deze regel hetzelfde met of zonder het streepje (spaties aan het begin van de regel.)
Zoals u zien kunt, zal het programma de Tiny2313 chip poort B.0 hoog, de LED verlichting instellen, en dan weer laag maken. De het programma zal raken van de lusinstructie en gaat terug tot aan de verklaring van de opnieuw uit te voeren door de lus. Hierdoor moet de controller zet het licht aan, en uit, herhaaldelijk, toch?
Compileren en downloaden, dit nieuwe programma om uw ' 2313. Het programma zal onmiddellijk beginnen lopen. Dit werkte zoals verwacht? Umm, geen? Nou, tijd om eruit te komen van je denken hoed - dit heet debuggen, of op zoek naar de fouten in een programma.
Eens terugdenken aan toen u eerst uw ATtiny2313 de LED inschakelen en vervolgens terug naar rechts af. Vergeet niet dat de microcontroller draait een extreem snelle programma (althans in vergelijking met onze menselijke snelheden.) U vergeet niet dat je nodig hebt om het invoegen van een verklaring van de wachttijd tussen het aanzetten van de LED, en vervolgens terug af, zodat u genoeg tijd gehad om te zien het licht? Nou, is de zelfde bug (of moeite) teistert ons hier. Volg mee als we het programma hierboven onderzoeken. De eerste regel, in de lus, schakelt de LED; Naast het programma wordt onderbroken voor de helft van een tweede zodat wij dat de LED oplichten zien kunnen. Vervolgens wordt de LED terug uitgeschakeld en keert vervolgens terug naar de bovenkant van de lijn om te herbeginnen. Merken, dat, terwijl het programma wordt onderbroken om te laten zien dat de LED is afgestemd op, het nooit onderbroken om te laten zien dat de LED heeft uitgeschakeld terug - het gewoon doorgaat en schakelt de LED opnieuw, binnen een paar miljoenste van een seconde. Oeps, moeten we toevoegen een ander pauze (wachten, of waitms, verklaring) na het aanzetten van de LED af, en vóór de lus herhalen.
Voeg de tweede instructie van het wachten in, zodat uw programma ziet er als volgt:
' Hoofdprogramma
Doen
set PortB.0
waitms 500
Reset PortB.0
waitms 500
Loop
Nu, compileren en het programma opnieuw downloaden. Alles ziet er goed uit deze tijd, nietwaar?
De manier waarop dit programma is geschreven, zal uw systeem experimentator knippert de LED op, en vervolgens uit, ongeveer een keer per seconde. Spelen met de tijd-waarden in de verklaringen van de waitms om het knipperen sneller en langzamer. Zie als u uw LED knipperen met dezelfde snelheid als het turn-signaal licht op uw auto kunt krijgen. Merk op dat de twee waarden voor de verklaringen van de waitms precies hetzelfde zijn. Dit zorgt ervoor dat de LED aan te zetten, en vervolgens uitgeschakeld voor precies de zelfde hoeveelheid tijd, in elke lus. Wat gebeurt er als u de tijden wijzigen, met behulp van verschillende waarden voor de twee verschillende waitms verklaringen?
Zorg ervoor dat uw programma opslaan voordat u met de volgende stap verdergaat.