AVR Assembler handledning 3 (7 / 9 steg)
Steg 7: dröjsmål
Nu när vi har sett att vår timer overflow avbryta handler "overflow_handler" rutin kommer att ställa variabeln "svämmar över" till noll en gång var kan det andra vi använda detta faktum för att utforma en "fördröjning" subrutin.
Ta en titt på följande kod från under vår försening: etikett
fördröjning:
CLR svämmar över
sec_count:
CPI översvämningar, 30
brne sec_count
ret
Vi kommer att kalla denna subrutin varje gång vi behöver en fördröjning i vårt program. Hur den fungerar är den först sätter den variabel "svämmar över" till noll. Då det kommer in ett område som heter "sec_count" och jämför svämmar över med 30, om de är inte lika det filialer till etikett sec_count och jämför igen, och igen, osv tills de slutligen lika (kom ihåg att hela tiden detta pågår vår timer avbrottshanterare fortsätter att öka de variabla svämmar över och så det förändras varje gång vi går runt här. När översvämningar slutligen motsvarar 30 det blir utanför systemet och återvänder till varhelst vi kallade dröjsmål: från. Resultatet är en fördröjning av 1/2 sekund
Övning 2: ändra rutinen overflow_handler till följande:
overflow_handler:
Inc svämmar över
Reti
och kör programmet. Är något annorlunda? Varför / varför inte?