Ayuda PIC16f628a XC Compiler

Proyectos con Microcontroladores de Microchip de las series PIC12/PIC16/PIC18/PIC24/dsPIC/PIC32
brianriani
Mensajes: 1
Registrado: Vie, 29 Mar 2019, 5:46 pm

Ayuda PIC16f628a XC Compiler

Mensajepor brianriani » Vie, 29 Mar 2019, 6:28 pm

Muy buenas a todos, soy nuevo en el mundo de la programación de microcontoladores y estoy teniendo un problema que creo que es super básico pero no logro entenderlo.

Tengo el siguiente programa:

Código: Seleccionar todo

#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = OFF      // Brown-out Detect Enable bit (BOD disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

#include <xc.h>
#include <pic16f628a.h>

#define _XTAL_FREQ 4000000

void main(void) 
{
    TRISA=0b11111111;   //Configurado como entrada
    TRISB=0b00000000;   //Configurado como salida
    
    CMCON=0b00000111;   //Apaga comparadores: Entradas digitales
    
    PORTB=0b00000000;
    
    while(1)
    {
        if(RA0==1)
        {
            PORTB=0b11111111;
            __delay_ms(300);
            PORTB=0b00000000;
            __delay_ms(300);
        }
        else
        {
            PORTB=0b00000000;
        }
    }

    return;
}
el problema es el siguiente.. si el pic lo grabo tal como escribí arriba, al accionar la entrada RA0 los led quedan encendido sin parpadear

pero si cambio el orden de que primero apaguen y despues prendan, el programa funciona correctamente y no entiendo el por que..

Código:

Código: Seleccionar todo

if(RA0==1)
        {
            PORTB=0b00000000;
            __delay_ms(300);
            PORTB=0b11111111;
            __delay_ms(300);
        }
        
Espero haberme explicado bien, tengo un pulsador conectado a RA0 y 8 LED conectado al PORTB (es decir RB7 RB6 .... RB0)

PD: al simular ambos programa en proteus funciona perfectamente los 2.

Avatar de Usuario
MikroIngenieria
Administrador del Sitio
Mensajes: 20
Registrado: Jue, 10 Nov 2016, 10:20 pm
Ubicación: Perú
Contactar:

Re: Ayuda PIC16f628a XC Compiler

Mensajepor MikroIngenieria » Sab, 20 Jul 2019, 9:54 am

Estimado referente a tu consulta estas declarando al inicio los bits del puerto B en BAJO, se encuentra antes del programa principal, te recomiendo cambiar también esa sentencia a ALTO todo el puerto para que te funcione correctamente.

TRISA=0b11111111; //Configurado como entrada
TRISB=0b00000000; //Configurado como salida

CMCON=0b00000111; //Apaga comparadores: Entradas digitales

PORTB=0b00000000; // Cambiar a ALTO todo el puerto B es decir PORTB=0b11111111

Espero haberte ayudado

Saludos


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado