PIC MCU: uso de punteros para modificar la salida

0

por lo que he estado tratando de crear un circuito con un PIC16F917, un botón y tres LED, donde al presionar un botón, la salida del LED cambia, al igual que cuando se presiona el botón, se alterna en diferentes modos. He estado tratando de hacer esto utilizando punteros, de manera similar a un multiplexor, donde el valor de un número entero representa el modo de salida determinado (interpretado por outputconfig() ), y la pulsación de un botón incrementa ese número entero en 1; pero realmente no sé qué está mal.

También, ¿por qué XC8 dice en la compilación que el uso de "delay ()" y "outputconfig ()" dentro de main () es una "función declarada como int implícita"? ¿Y por qué sigue funcionando?

Cualquier ayuda y / o guía sería muy apreciada. A continuación se muestra el código con el que estoy trabajando. ¡Gracias!

#include <xc.h>
#include <pic16f917.h>
#include "configbits.h"
#include "definitions.h"

int value;
int *output;
int result;

int main()
{
    TRISEbits.TRISE0=1;

    TRISDbits.TRISD5=0;
    TRISDbits.TRISD6=0;
    TRISDbits.TRISD7=0;

    while(1)
    {
        if(1==IN1)
        {
            delay();
            if(1==IN1)
            {
                output=&value+1;
                result=*output;
                outputconfig();
            }
        }
    }
}

int delay()
{
    int i;
    for(i=0;i<1000;i++){}
}

int outputconfig()
{
    if(0==value)
    {
        OUT1=1;
        OUT2=0;
        OUT3=0;
    }
    if(1==value)
    {
        OUT1=0;
        OUT2=1;
        OUT3=0;
    }
    if(2==value)
    {
        OUT1=0;
        OUT2=0;
        OUT3=1;
    }
    else
    {
        NOP();
    }
}
    
pregunta ezra_vdj

1 respuesta

0

No está inicializando el valor o el resultado, de hecho, aunque está asignando un valor al resultado con: * result = output; nunca más usa el resultado, por lo que esta línea es completamente redundante. esta línea: output = & value + 1; dice tomar la dirección del valor, agregarle 1 (la ubicación del lugar después del valor ???) y luego hacer que los puntos de salida sean

Creo que lo que querías hacer era:

output = &value;    // do this once before the loop to make output point at value
   // or you could initialise it when you declare it like this:
int *output = &value ;

*output = *output+1 // in the loop. increase 'value'

los comentarios de otros son correctos con respecto a las declaraciones de funciones

    
respondido por el Icy

Lea otras preguntas en las etiquetas