Básicamente, estoy buscando programar un PIC16F917, de modo que un int en particular se incremente en uno cada vez que presiono un botón.
Ahora tengo el ADC en funcionamiento, tengo que contar los bucles, pero parece que carezco del conocimiento y la experiencia para ponerlo por completo, y vuelvo a bloquear la entrada antes de que el int aumente en un número mayor que uno .
El siguiente código es lo que he escrito hasta ahora. El problema con esto es que se incrementa varias veces por pulsación (la cantidad de ciclos de demora para los que se mantuvo el botón), y me encantaría hacer que solo cuente en uno. Estaba pensando en crear una nueva función e int, pero parece que no puedo armarlo, se necesita mucha ayuda.
Gracias por ayudar, Ezra
#include <xc.h>
#include "config-bits.h"
#define _XTAL_FREQ 4000000
int result;
int output;
void delay()
{
int i;
for(i=0; i<100; i++)
{
/*Timer Stuff*/
}
}
int main()
{
TRISA=1; //Set all pins to input
TRISB=1;
TRISC=1;
TRISD=1;
TRISE=1;
TRISDbits.TRISD0 = 0; //LED output
ANSELbits.ANS0 = 1; //Select ADC input
ADCON0bits.ADFM = 1; //ADC result is right justified
ADCON0bits.VCFG = 0; //Vdd is the +ve reference
ADCON1bits.ADCS = 0b001; //Fosc/8 is the conversion clock
//This is selected because the conversion
//clock period (Tad) must be greater than 1.5us.
//With a Fosc of 4MHz, Fosc/8 results in a Tad
//of 2us.
ADCON0bits.CHS = 0; //select analog input, AN2
ADCON0bits.ADON = 1; //Turn on the ADC
while(1)
{
delay(); //Wait the acquisition time (about 5us).
ADCON0bits.GO = 1; //start the conversion
while(ADCON0bits.GO==1){}; //wait for the conversion to end
result = (ADRESH<<8)+ADRESL; //combine the 10 bits of the conversion
if(result > 512)
{
PORTD=output++;
delay();
}
else
{
NOP();
}
}
}