Autor Tema: Hmmm  (Leído 3510 veces)

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

Desconectado alexispovedag

  • PIC10
  • *
  • Mensajes: 14
Hmmm
« en: 26 de Mayo de 2014, 22:40:58 »
Operar en pic c
« Última modificación: 27 de Mayo de 2014, 18:03:24 por alexispovedag »

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Ayuda con este programa porfa!
« Respuesta #1 en: 27 de Mayo de 2014, 00:38:25 »
te falta un ciclo infinito dentro del main, ya que así como lo tienes solo ejecuta las instrucciones una vez.

para obtener los 2 números introdducidos por el puerto D podrias hacer algo asi:


Código: C
  1. ...
  2. PD=input_d();
  3. n1=PD&0b00001111;
  4. n2=(PD>>4)&0b00001111;
  5. ...

de esta forma separas los primeros 4 bits y los guardas en n1 y para obtener n2, primero recorres los 4 bits mas significativos hacia la derecha y luego le aplicas la máscara para obtener los valores del número 2

una vez que tienes tus números entonces puedes hacer

Código: C
  1. ...
  2. if(input(pin_b0))
  3. {
  4.    res=n1-n2
  5. }
  6. else if(input(pin_b1))
  7. {
  8.    res=n1*n2
  9. }
  10.  
  11. .....

y al final, para sacar tu resultado por el puerto C, haces

Código: C
  1. ...
  2. output_c(res);
  3. ...

espero te sirva

Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado alexispovedag

  • PIC10
  • *
  • Mensajes: 14
Re: Ayuda con este programa porfa!
« Respuesta #2 en: 27 de Mayo de 2014, 16:41:37 »
Todo me queda mas claro ahora gracias.
« Última modificación: 27 de Mayo de 2014, 17:51:49 por alexispovedag »

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Hmmm
« Respuesta #3 en: 27 de Mayo de 2014, 17:08:45 »
algunos comentarios extra:

esta parte no es necesario que la pongas dentro del while, como es la configuración, solo se hace una vez

Código: C
  1. SET_TRIS_B(0xFF);
  2.    SET_TRIS_C(0x00);
  3.    SET_TRIS_D(0XFF);
  4.  
  5.  
  6.    signed int8 n1;
  7.    signed int8 n2;
  8.    signed int8 aux;
  9.    int8 PD;

esta parte ya no es necesaria

Código: C
  1. if(n1>9){
  2.    aux=input_D()-9;
  3.    switch(input_D()){
  4.    case 0:
  5.         n2=0;
  6.         break;
  7.    case 16:
  8.         n2=1;
  9.         break;
  10.    case 32:
  11.         n2=2;
  12.         break;
  13.    case 48:
  14.          n2=3;
  15.          break;
  16.    case 64:
  17.          n2=4;
  18.          break;
  19.    case 80:
  20.          n2=5;
  21.          break;
  22.    case 96:
  23.          n2=6;
  24.          break;
  25.    case 112:
  26.          n2=7;
  27.          break;
  28.    case 128:
  29.          n2=8;
  30.          break;
  31.    case 144:
  32.          n2=9;
  33.          break;
  34.    };
  35.    
  36.    
  37.    }

para la multiplicación deberías verificar si tienes un número entero, ya que puede que por eso no te funcione, puede que siempre sea menor a 1, y no tienen ninguna salida en el puerto C
« Última modificación: 27 de Mayo de 2014, 18:09:25 por rivale »
"Nada es imposible, no si puedes imaginarlo"

Desconectado alexispovedag

  • PIC10
  • *
  • Mensajes: 14
Re: Hmmm
« Respuesta #4 en: 27 de Mayo de 2014, 17:15:13 »
Y para que tome en cuenta ambos pulsadores en la division? Me parece que no entra al ciclo if pero no se porque.... :shock:
el switch si se necesita porque tendria que convertir esos 4 bits que van desde 16 hasta 128 en valores de 1 a 9, no?


Y mi otra duda es como genero el complemento en la resta en caso de que el valor sea negativo, la multiplicacion se realiza bien creo.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Ayuda con este programa porfa!
« Respuesta #5 en: 27 de Mayo de 2014, 17:24:12 »
Y para que tome en cuenta ambos pulsadores en la division? Me parece que no entra al ciclo if pero no se porque.... :shock:
el switch si se necesita porque tendria que convertir esos 4 bits que van desde 16 hasta 128 en valores de 1 a 9, no?


Y mi otra duda es como genero el complemento en la resta en caso de que el valor sea negativo, la multiplicacion se realiza bien creo.

en esta parte del código ya obtienes los números de la parte alta y de la parte baja.

Código: C
  1. ...
  2. PD=input_d();
  3. n1=PD&0b00001111;
  4. n2=(PD>>4)&0b00001111;
  5. ...

la parte baja creo que esta clara, solo tomas los bits menos significativos y ahí directamente obtienes los valores del 0-9

en cuanto a los siguientes números, al hacer ">>4" estas haciendo un corrimiento a la derecha de 4 posiciones, por ejemplo, si tienes
0b01100000
en la parte alta tienes 0110 que es un 6 en decimal, al hacer el corrimiento lo que haces es recorrer los bits cuatro lugares a la derecha, entonces tu entrada del puerto D queda:
0b00000110
y así ya tienes directamente el número

para la resta puedes hacer:

Código: C
  1. ...
  2. if(n1>n2)res=n1-n2;
  3. else res=n2-n1;
  4. ...
"Nada es imposible, no si puedes imaginarlo"

Desconectado alexispovedag

  • PIC10
  • *
  • Mensajes: 14
Re: Ayuda con este programa porfa!
« Respuesta #6 en: 27 de Mayo de 2014, 17:35:29 »
Me ha sido de gran ayuda tus explicaciones gracias amigo, una ultima duda para dejar de molestar  :oops:

porque no hace el ultimo if ? el de
else  if(input(pin_B0) && input(pin_B1)){ 
       
        res=n1/n2;   
    }
Mil gracias por tus oportunas respuestas

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Hmmm
« Respuesta #7 en: 27 de Mayo de 2014, 17:39:11 »
de acuerdo a tu condición, deben estar presionados b0 y b1 al mismo tiempo, una opción es que si entre, pero que el resultado siempre sea 0, podrías verificar primero esto para asegurar si entra o no.

Otra opción es que alguno no este en estado lógico, podrías configurar el ADC y especificar que ningún puerto es analógico.


Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado alexispovedag

  • PIC10
  • *
  • Mensajes: 14
Re: Hmmm
« Respuesta #8 en: 27 de Mayo de 2014, 17:50:04 »
Mil gracias amigo, Al fin funciono  :-/ :mrgreen: Jejeje gracias por tu ayuda!! ((:-))

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Hmmm
« Respuesta #9 en: 27 de Mayo de 2014, 17:58:21 »
Mil gracias amigo, Al fin funciono  :-/ :mrgreen: Jejeje gracias por tu ayuda!! ((:-))

que bueno que te sirvió la ayuda y que ya funcionó  ((:-))

Saludos
"Nada es imposible, no si puedes imaginarlo"

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Hmmm
« Respuesta #10 en: 27 de Mayo de 2014, 18:00:40 »
??? Cual es el enunciado de este post?
Por que editas el post así alexispovedag? O acaso soy yo y mi móvil no va bien?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado alexispovedag

  • PIC10
  • *
  • Mensajes: 14
Re: Hmmm
« Respuesta #11 en: 27 de Mayo de 2014, 18:08:10 »
??? Cual es el enunciado de este post?
Por que editas el post así alexispovedag? O acaso soy yo y mi móvil no va bien?

Disculpame cometi un error modificandolo pero no volvera a ocurrir.