Lär dig mer om mikrokontroller (13 / 18 steg)
Steg 13: Loop-the-Loop
En annan sak som datorer är bra på göra saker om och om igen. En dator inte bli uttråkad, inte heller gör det trötta ut (om batteriet börjar bli låg, men det är en annan fråga.) Vi kommer att se ett sätt att göra den "2313 upprepa sig i det här steget.
Spara ditt program från det sista steget, och starta ett nytt program genom att klicka på filen och sedan spara som... Ge din nya program ett nytt namn ("LED Test Flash", kanske.) Nu omedelbart efter rutinmässig kommentar stambanan, lägga till:
göra "att införa en-slinga
Nu efter brödtexten i ditt program till en annan rad:
loop
Så att huvuddelen av ditt program kommer att se ut så här:
"Huvudprogrammet
Göra
ställa in PortB.0
waitms 500
återställa PortB.0
Loop
Detta kallas en loop, eftersom linjerna mellan Do och Loop-programsats utförs om och om igen, i en slinga mode. Av tradition vi indrag, eller placera tomma utrymmen framför raderna inuti loop. Detta gör det lättare för oss att se en överblick vilka rader som upprepas. BASCOM kompilatorn bryr sig inte ett sätt, eller den andra. Det sammanställer dessa linje samma med eller utan indrag (tomma utrymmen på framsidan av linjen.)
Som ni kan se, kommer att programmet göra Tiny2313 chip ange Port B.0 hög, belysning LED, och sedan låg igen. I programmet kommer att drabba Loop-programsats och gå tillbaka till Do-sats att köra genom öglan igen. Detta bör göra den registeransvarige sätta ljuset på och stänga, upprepade gånger, eller hur?
Kompilera och ladda ner, denna nya program till din "2313. Programmet kommer att omedelbart börja löpa. Fungerade det som förväntat? UM, nej? Tja, tid för att få ut din tänkande hatt - detta kallas felsökning, eller letar fel i ett program.
Tänk tillbaka på när du hade först din ATtiny2313 aktivera LED och sedan höger back off. Kom ihåg att mikrokontroller driver en extremt snabb program (åtminstone jämfört med våra mänskliga hastigheter.) Du minns att du behövs för att infoga ett vänta uttalande mellan tända lampan, och sedan tillbaka av, så att du hade tillräckligt med tid att se ljuset? Jo, är samma bugg (eller problem) plågar oss här. Följ med när vi granskar programmet ovan. Den första raden, i slingan, tänds lampan; Nästa pausar programmet en halv en sekund så att vi kan se lampan lyser upp. Nästa, programmet stängs LED tillbaka, och återgår sedan till toppen av öglan för att börja om igen. Observera, att medan programmet pausar för att låta oss se att LED är inställd på, det aldrig pausar för att låta oss se att lampan har inaktiverat tillbaka - det bara går framåt och tänds lampan igen, inom några miljondelar av en sekund. Oj, måste vi lägga till en annan paus (vänta, eller waitms, uttryck) efter svarvning LED av och innan du upprepar slingan.
Lägg till instruktionen andra vänta i, så att ditt program ser ut så här:
"Huvudprogrammet
Göra
ställa in PortB.0
waitms 500
återställa PortB.0
waitms 500
Loop
Nu kompilera och ladda ner ditt program igen. Allt ser bra ut nu, rätt?
Hur detta program är skrivet, försöksledaren systemet kommer flash LED på, och sedan iväg, ungefär en gång per sekund. Spela med tidsvärden i de waitms rapporterna att göra blinkande snabbare och långsammare. Se om du kan få din LED blinkar med samma hastighet som blinker light på din bil. Observera att de två värdena för waitms uttalanden är exakt samma. Detta orsakar LED att aktivera, och sedan iväg för exakt samma tid, i varje slinga. Vad händer om du ändrar gånger, med olika värden för de två olika waitms uttalanden?
Se till att spara dina program innan du går vidare till nästa steg.