TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: alexispovedag en 26 de Mayo de 2014, 22:40:58
-
Operar en pic c
-
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:
...
PD=input_d();
n1=PD&0b00001111;
n2=(PD>>4)&0b00001111;
...
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
...
if(input(pin_b0))
{
res=n1-n2
}
else if(input(pin_b1))
{
res=n1*n2
}
.....
y al final, para sacar tu resultado por el puerto C, haces
espero te sirva
Saludos
-
Todo me queda mas claro ahora gracias.
-
algunos comentarios extra:
esta parte no es necesario que la pongas dentro del while, como es la configuración, solo se hace una vez
SET_TRIS_B(0xFF);
SET_TRIS_C(0x00);
SET_TRIS_D(0XFF);
signed int8 n1;
signed int8 n2;
signed int8 aux;
int8 PD;
esta parte ya no es necesaria
if(n1>9){
aux=input_D()-9;
switch(input_D()){
case 0:
n2=0;
break;
case 16:
n2=1;
break;
case 32:
n2=2;
break;
case 48:
n2=3;
break;
case 64:
n2=4;
break;
case 80:
n2=5;
break;
case 96:
n2=6;
break;
case 112:
n2=7;
break;
case 128:
n2=8;
break;
case 144:
n2=9;
break;
};
}
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
-
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.
-
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.
...
PD=input_d();
n1=PD&0b00001111;
n2=(PD>>4)&0b00001111;
...
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:
...
if(n1>n2)res=n1-n2;
else res=n2-n1;
...
-
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
-
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
-
Mil gracias amigo, Al fin funciono :-/ :mrgreen: Jejeje gracias por tu ayuda!! ((:-))
-
Mil gracias amigo, Al fin funciono :-/ :mrgreen: Jejeje gracias por tu ayuda!! ((:-))
que bueno que te sirvió la ayuda y que ya funcionó ((:-))
Saludos
-
??? 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?
-
??? 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.