AVR Assembler Övningsexempel 7 (10 / 12 steg)
Steg 10: Kod för version 2
Det enklaste sättet att bli av med knappen är bara att ta bort den helt och hållet, glömma indata till PB2 och bara byta ADC till "Gratis kör läge".
Med andra ord helt enkelt ändra ADCSRB registret så att ADTS2, ADTS1 och ADTS0 är bara nollor.
Sedan ange ADSC lite i ADCSRA 1 som startar första omvandlingen.
Nu ladda upp den till din microcontroller och hittar du att rätt nummer kommer upp på skärmen medan du trycker på knappen och bara medan du trycker på knappen. Detta är eftersom ADC ständigt provtagning den ADC0 porten och visar värdet. När du tar ditt finger från knappen, den "knapp Studsen" kommer att orsaka några slumpmässiga värden att ske mycket snabbt och sedan det kvittar tillbaka till 0V input. Vi har i vår kod här 0V visas som 0b11011011 (eftersom knapptryckning '0' använder redan 0b00000000 visningsvärdet)
Detta är inte den lösning som vi vill men för två skäl. Först vill vi inte behöva hålla in knappen. Vi vill trycka på den en gång och har numret på (eller används i vissa ny kod i en senare handledning). För det andra vill vi inte ständigt prov på ADC0. Vi vill att det ska ta en enda behandling, konvertera den, och sedan sova tills en ny tangenttryckning utlöser en ny konvertering. Lösspringande läge är bäst om det enda du vill göra mikrokontroller är ständigt läser någon analog ingång--som om du ville Visa realtid temperaturer eller något.
Så låt oss hitta ännu en lösning...