¿Por qué no puedo usar una variable en una sentencia if?

0

Soy nuevo en los microcontroladores Pic y recién comencé a programarlos.

Ahora mi problema radica en este código:

unsigned char i;
unsigned char firstRun;
unsigned char secondRun;
unsigned char released;
void main() {

     unsigned char i;
     unsigned char firstRun;
     unsigned char secondRun;
     unsigned char released;

     i = 0;
     firstRun = 1;
     secondRun = 0;
     released = 0;

     TRISIO.B1 = 0x01;
     TRISIO.B2 = 0x00;

     CMCON0 = 0x07;
     ANSEL = 0;
     while(1){
              if(firstRun == 1){
                          GPIO.B2 = 1;
              }
     }
}

¿Por qué no obtengo ninguna salida en este puerto?

Quiero que el pin se encienda, pero no lo hace.

Sé que lo he conectado directamente a la placa de pruebas.

ACTUALIZACIÓN: Estoy usando el 12f683, el compilador MicroC Pro y el IDE, y estoy programando usando el MPLAB X IPE

Ha trabajado con la línea GPIO.B2 = GPIO.B1 dentro de thw mientras que 1 bloque GPIO.B1 es entrada

Este dosent work eighter:

char firstRun;

void main() {
     TRISIO.B1 = 0x01;
     TRISIO.B2 = 0x00;

     CMCON0 = 0x07;
     ANSEL = 0;

     firstRun = 1;
     while(1){
              GPIO.B2 = 1;
     }
}

CONFIG:

Asamblea:

_main:

;Forste test.c,3 ::                 void main() {
;Forste test.c,4 ::                 TRISIO.B1 = 0x01;
        BSF        TRISIO+0, 1
;Forste test.c,5 ::                 TRISIO.B2 = 0x00;
        BCF        TRISIO+0, 2
;Forste test.c,7 ::                 CMCON0 = 0x07;
        MOVLW      7
        MOVWF      CMCON0+0
;Forste test.c,8 ::                 ANSEL = 0;
        CLRF       ANSEL+0
;Forste test.c,10 ::                 firstRun = 1;
        MOVLW      1
        MOVWF      _firstRun+0
;Forste test.c,11 ::                 while(1){
L_main0:
;Forste test.c,12 ::                 GPIO.B2 = 1;
        BSF        GPIO+0, 2
;Forste test.c,13 ::                 }
        GOTO       L_main0
;Forste test.c,14 ::                 }
L_end_main:
        GOTO       $+0
    
pregunta

2 respuestas

1

@NickAlexeev parece haber encontrado el problema, este compilador no es compatible. Consulte esto

Si te deshaces de las declaraciones globales (fuera de main ), apuesto a que funciona.

También he visto problemas en el compilador con variables globales en Hitech C para los PIC de línea de base.

    
respondido por el Spehro Pefhany
0

Como regla general con los PIC, debe utilizar el registro LAT para configurar las salidas y el registro PORT para leer las entradas. Prueba LAT.B2 = 1; en lugar de GPIO.B2 = 1;

La sintaxis puede no ser exactamente LAT, no he usado una parte 12F en probablemente una década y nunca he usado el IPE, pero estará cerca de eso.

    
respondido por el markt

Lea otras preguntas en las etiquetas