Contador de número simple - PIC16F877A problema con el microcontrolador

0

Estoytratandodehaceruncontadorsimpleusandopic16f877a.Quierocontarcadavezquesepresionaunbotónpulsador,esdecir,presionarunavezcomounacuenta,independientementedecuántotiemposepresioneelbotón.

LossoftwaresqueestoyusandosonMPLABXIDEycompiladorXC8.yousopickit3.5.UtilizounindicadorLEDparaversielcódigoestáfuncionando.

Lacosaesqueapenashelogradoloquenecesitaba.Peroelcódigopareceinestable.Funcionaavecesperonoenotras.Porejemplo,digamosqueelcódigofuncionabaahorayelLEDparpadeabacorrectamentecuandosepresionabaunodelosdosbotonesconectados.luego,si"hago" y "descargo" el programa nuevamente sin ninguna modificación en el código en el ID de MPLAB X, el LED no parpadeará. Mientras escribía esto, lo probé varias veces simplemente haciendo y descargando usando MPLAB IDE, sin cambiar nada de hardware o código, y luego funcionó. Lo único que se cambió en esas situaciones fue el TIEMPO. así que sospecho que esto tiene algo que ver con el reinicio de la imagen, aunque no tengo idea. Nunca he trabajado en 2 "make and download" consecutivas.

Código:

#define _XTAL_FREQ 20000000
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <pic16f877a.h>
// CONFIG
#pragma config FOSC = HS    
#pragma config WDTE = OFF    
#pragma config PWRTE = OFF   
#pragma config BOREN = OFF   
#pragma config LVP = OFF    
#pragma config CPD = OFF  
#pragma config WRT = OFF        
#pragma config CP = OFF

void main(void) {
    TRISB=0;//LED connected to RB0
    TRISD=1;//two push buttons connected to RD0(buttonRight) and RD1(buttonLeft)

    while(1)
    {
        if (PORTDbits.RD0==0)//if buttonRight is pressed,
        {
            __delay_ms(5);//debouncing.
            if (PORTDbits.RD0==0)//if buttonRight is still pressed,
            {
                PORTBbits.RB0=1;
                __delay_ms(500);
                PORTBbits.RB0=0;
                __delay_ms(500);

                /*to take as one press no matter for how long it is pressed.*/
                while(PORTDbits.RD0==0);
            }
        }

        else if (PORTDbits.RD1==0)//if buttonLeft is pressed,
        {
            __delay_ms(5);//debouncing.
            if (PORTDbits.RD1==0)//if buttonLeft is still pressed,
            {
                PORTBbits.RB0=1;
                __delay_ms(100);
                PORTBbits.RB0=0;
                __delay_ms(100);

                /*to take as one press no matter for how long it is pressed.*/
                while(PORTDbits.RD1==0);
            }
        }
    }
}

Por favor ayuda. Muchas gracias.

    
pregunta stackUsr

0 respuestas

Lea otras preguntas en las etiquetas