[ATmega128] [asm] Ideer til håndtering af knapper

W

wojtek999

Guest
Jeg bliver træt til at udføre den simpleste operation som afskaffelse af vibrationer i kontakter 5 knapper.Jeg gør det på denne måde:

1:aFor hver knap, jeg har tildelt tre flag og en variabel (lad os antage, at den knap kaldes "UP":
- F_UP_POM - Hjælpeansatte flag at fjerne vibrationer
- F_UP - flag relevante knap (F_UP = 1, hvis der trykkes på knappen)
- F_UP_HOLD - når = 1 betyder det, at knappen holdes nede eller allerede har været
- Licznik_UP - variable 1B

2:aLæsning tilstand af knapperne er bortfaldet Timer (på 32,768 ms):
- Hvis der trykkes på knappen:
- På det første stop, der er lige F_UP_POM
- Det andet sæt F_UP - at først nu er de oplysninger,
for programmet, at knappen trykkes (tak elimineret
er bevaret, fordi den vibration af kontakter min 32,768 ms)
- På det tredje stop F_UP_HOLD sæt hvilket betyder, at
knappen holdes nede
- På det fjerde og efterfølgende forstørre en Licznik_UP den førsteNår du når
Det formoder værdien på 10 (dvs. efter 327ms) er F_UP_HOLD og sletter
counter
- Hvis knappen slippes, rydder alle flag og Licznik_UP

3:eSom svar på det aktuelle knapper (eller flag) er gjort i de vigtigste loop af programmet:
- Hvis F_UP_HOLD = 1 reagerer ikke
- Ellers:
- Hvis F_UP = 1 for eksempel øge værdien af "noget der" af 1 og sæt
F_UP_HOLD flag til værdien af "noget der ikke er øget
igen og igen (hvis knappen holdes nede efter 327ms
F_UP_HOLD reset og igen værdien af "noget der"
stige med 1

Denne form for service virker fint, men en gang i lang tid på przytrzymywaniu nøgleværdi "noget der" vil stige med 1 og igen med en hurtig (men bør efter 327ms).Du kan dele dine metoder betjeningsknapperne eller justere den algoritme, hvis du har bemærket min fejl?
 
Skomplikowałeś simpel ting som jeg kunne ...Hvis du allerede vil fortrylle og knapperne ikke gør en matrix, er ...

To variabler ...under hver check du handler på en sådan måde, at (jeg formoder, at '1 'presset), at sammenligne værdier den indskrive værdi (logisk produkt - OG).Resultatet af denne operation er en tilstand af '1 'til knapperne trykkes i mindst tre kontroller, så 32,768 ms * 3 = 98,304 ms.Ved udgangen skrive resultatet af en variabel (ændringen).

Omrøring antal variable som du kan justere svartid.Et alternativ er at kontrollere for eksempel hvert tredje pause og sammenlignet kun én variabel fra de nuværende stater;)

Held og lykke;)
 
Faktisk kunne det være meget forenklet.Med hensyn til programmet, har "cool" makroer, såsom:
brfs Nazwa_Flagi, etiket, hoppe til at mærke, hvis flag
sæt
brfc Nazwa_Flagi, etiket, hoppe til at mærke, hvis flag
nulstilles
setf Nazwa_flagi; Set flag
clrf Nazwa_flagi; reset flag

.. Det bruge knapperne på flag (det forenkler mine vigtigste program).Nazwa_flagi 0-255 numre er allerede defineret af. EQU.

Hver knap har ét flag, og en meter.Som før, skal du kontrollere knapper i Timer stop cirka hver 32ms.

Timer:

Hvis du trykker på knappen, øges tælleren.
Hvis knappen slippes, nulstilles tælleren og et flag.
Derefter counter = 2 er hvis sat flag knappen.Hvis ikke lig med 2 for at nulstille flag.Hvis tælleren er en tæller = 15 = 0

reti

I hovedsagen loop kun tjekker flagene makroen knapper for nem og reagere hensigtsmæssigt.Det virker upåklageligt.
 
Skriv i ASM, og programmet er i forvejen kompliceret med normal knapper.Se hvor mange variabler bruger, se om afbryder service loading ...ASM er den hastighed - glem ikke det.At skrive fri software i dette sprog, glip af brugsstedet ...
 
Nu er der ikke allerede er kompliceret - kun ét flag og en variabel.Gennemføres hurtigt og vigtigst er klart - og det er også efter det (derfor, niveau sprog var høje introduceret senere ikke bliver filtret sammen).Helt ærligt, jeg savner, er nogle gode eksempler, kurser osv. til at gøre flere ting (som hvordan man laver et gennemsigtigt multi-niveau menu ASM) - overalt, kun den part, med en beskrivelse af "programmering fra bunden," og slutter med den begrundelse, og der er behov for at udvikle ...Hvordan kender du nogen anbefalelsesværdig bog, er muligvis administration.
Du kan præcist beskrive sin håndtering knapper med to variabler til slutningen, fordi jeg ikke forstår.Tak!

Jeg tjekkede hvor lang tid det tager test af alle fem knapper på tidspunktet Timer: 770cykli = mindre end 50US på 16MHz ur (i dette subrutine for at indstille / nulstille flag tager 127 cykler = 8us).Hvad jeg kan roligt bruge 32ms 50US endnu mere, fordi de vigtigste program, og så vil langt hovedparten af tiden svinger omkring planløst.Så jeg vil ikke have ændret noget, undtagen knapperne, for som jeg skrev for at bruge et flag for mig øger gennemsigtigheden af programmet.
 

Welcome to EDABoard.com

Sponsor

Back
Top