Autor Tema: bug xc8  (Leído 1620 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fitson

  • PIC10
  • *
  • Mensajes: 38
bug xc8
« en: 09 de Agosto de 2017, 18:29:30 »
hola,

Tengo un problema con el compilador XC8, tengo el siguiente código:

Código: [Seleccionar]
*
 * File:   main.c
 *
 * Created on August 16, 2010, 12:09 PM
 */


// PIC16F877A Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#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)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#define _XTAL_FREQ 20000000

int main(void) {
 
   
    TRISAbits.TRISA0 = 0;
    TRISBbits.TRISB7 = 1;
    OPTION_REGbits.nRBPU = 0;
    PORTB = 0;
    PORTA = 0;
   
    while(1){
       
        if(PORTBbits.RB7 == 0){
            __delay_ms(300);
            if(PORTAbits.RA0 == 1)
                PORTAbits.RA0 = 0;
            if(PORTAbits.RA0 == 0)
                PORTAbits.RA0 = 1;
           
        }
       
        //PORTAbits.RA0 = PORTAbits.RA0 + 1;
    }
    return 0;
}




cuando pulso por primera vez entra en la conidición if y tmb entra en la segunda condicion PORTAbits.RA0==0 y enciende el LED.
Pero al  pulsar el boton por segunda vez no se apaga.


Otro problema que he encontrado:
Código: [Seleccionar]
PORTA = 0;

while(1){
PORTAbits.RA0 = PORTAbits.RA0 - 1;
__delay_ms(1000);
}
Aquí el LED en el estado incial esta apagado, cuando efectúa la resta, el LED se enciende , pero de allí ya no vuelve ha apagarse

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:bug xc8
« Respuesta #1 en: 09 de Agosto de 2017, 18:58:10 »
Proba asi:

Código: C
  1. if(PORTBbits.RB7 == 0){
  2.             __delay_ms(300);
  3.             PORTAbits.RA0  ^= 1
  4.         }

Desconectado fitson

  • PIC10
  • *
  • Mensajes: 38
Re:bug xc8
« Respuesta #2 en: 09 de Agosto de 2017, 19:01:21 »
tampoco me ha funcionado, enciende por primera vez el LED  y ya no se apaga

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:bug xc8
« Respuesta #3 en: 09 de Agosto de 2017, 19:03:50 »
No se mucho de C, pero no creo que sea un BUG. El detalle esta en como lo planteas, no abres las llaves despues de cada if.

if(PORTAbits.RA0==1)
{

}
Cuando omites las llaves lo toma como instrucción.

Saludos

Desconectado fitson

  • PIC10
  • *
  • Mensajes: 38
Re:bug xc8
« Respuesta #4 en: 09 de Agosto de 2017, 19:08:24 »
si escribes una sentencia no hacen falta las llaves

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:bug xc8
« Respuesta #5 en: 09 de Agosto de 2017, 21:56:26 »
Te falta poner el ADCON1 en 0x07 para que sean digitales el puerto A tambien, y ya deberia funcionar si o si.

Desconectado fitson

  • PIC10
  • *
  • Mensajes: 38
Re:bug xc8
« Respuesta #6 en: 09 de Agosto de 2017, 22:25:09 »
gracias KILLERJC funciono,
en ccs no me pasaba esto sera que los tiene en digital por defecto. Por eso al igualar a 1 el pin no hacia caso.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:bug xc8
« Respuesta #7 en: 09 de Agosto de 2017, 22:49:15 »
gracias KILLERJC funciono,
en ccs no me pasaba esto sera que los tiene en digital por defecto. Por eso al igualar a 1 el pin no hacia caso.

En CCS tenias que poner NO_ANALOG si no mal recuerdo.