Bueno logre que funcione, ajustando las demoras de antirrebote, y agregandolas anticipadamente. El problema que tenia era que en algunas pulsaciones me contaba al apretar y soltar, por lo tanto, me contaba (a veses, doble pulso al apretar el pulsador), como me di cuenta?, agregue una salida mas con otro led para que se prendiera y apagara cada vez que pulsaba el pulsador e inmeditamente antes de que se produzca la cuenta y es justo cuando lo veia parpadear erraticamente .
Quisa le sirba a alguien y tal vez quiera postear otra alternativa reduciendo el codigo o agreganodo alguna linea que nos permita abanzar a los novatos al menos.
El codigo cuenta hasta 10 (un pulso una cuenta) prende el led en PTBDD_PTBDD0=1 y cuando la cuenta llega a 12 el led se apaga y el contador se resetea a cero.
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
void delay_100us(void) { //Retardo de aprox. 100ms
char cont;
cont=25;
asm {
loop: nop //1 ciclo
nop
nop
nop
nop
dbnz cont,loop //7 ciclos
}
}
void main(void) {
int i, cuenta;
cuenta=0;
SOPT1 = 0x02; //Deshabilito watchdog
ICSC1=0x014; //Reloj interno, divido por 4 (CLK=8Mhz,BUS_CLK=2Mhz)
PTBDD_PTBDD1=1; //Configuro el bit 1 del puerto B como salida, en este pin conecte el led testigo
PTBDD_PTBDD0=1; //Configuro el bit 0 del puerto B como salida
PTADD_PTADD0=0; //Configuro el bit 0 del puerto A como entrada
PTAPE_PTAPE0=1; //Configuro la resistencia pull-up de PTAD0
EnableInterrupts;
for(;;) {
for(i=100;i;i--){
delay_100us();
}
if (!PTAD_PTAD0) {
PTBD_PTBD1=1;
delay_100us();
PTBD_PTBD1=0;
cuenta+=1;
if (cuenta==10)
PTBD_PTBD0=1;
for(i=100;i;i--){
delay_100us();
}
if (cuenta==12){
PTBD_PTBD0=0;
cuenta=0 ;
}
while (!PTAD_PTAD0);
}
}
}
Saludos y gracias
