Search code examples
cpicmicrochipmplab

An error on a code using PIC on C language


Good night! To everyone seeing this, Im an student and I have a problem here, hope someone can help me out. Thanks

So Im using a micro PIC16F877A to make a digital counter that shows on a display, so my goal in this code is to make this counter count to 36 and then restart from 0. So I did an If statement at the bottom where if tens(de) reach 3 and units(un) reach 6, it starts from 0 again.

More data: Currently working on MPLAB-X and Proteus, using C language, the Bit config of the pic will be attach here and the proteus proyect as well. I suppose there is better ways to make this on a PIC, but all this is really new to me, so I'll be glad to learn about it.

Here is the code:

#include <xc.h>
#define _XTAL_FREQ 4000000

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


int ar = 0;
int de = 0, un = 0, A = 0;
int Display[10] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X98};
void visualizacion(void);
void incremento(void);

void main(void)
{
    TRISC = 0X00;         // PUERTO C COMO SALIDA
    TRISB = 0X00;         // PUERTO B SALIDA
    TRISDbits.TRISD0 = 1; // PUERTO D0 COMO ENTRADA
    
    while (1)
    {
        if (PORTDbits.RD0 == 1)
        {
            ar = 1;
        }
        if (PORTDbits.RD0 == 0 && ar == 1)
        {
            un = un+1;
            ar = 0;
        }
        visualizacion();
        incremento();
    }
}

void visualizacion(void)
{
    PORTC = 0X01;
    PORTB = Display[un];
    __delay_us (500);
    
    PORTC = 0X02;
    PORTB = Display[de];
    __delay_us (500);
    
}

void incremento(void)
{
    if (un >= 10)
    {
        un = 0;
        de = de+1;
    }
    if(de >= 3 && un >= 6)
    {
        de = 0;
    }
}

This is the bit config

And this is the error: output error image

Thanks!


Solution

  • The question is answered in the comments to the question (by mlwn & stark):

    replace if(de>=3) && (un>=6){ with : if (de >= 3 && un >= 6) {

    Also change de=0; to de=0; un=0; otherwise you rest to 6.