TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: Doctorg en 11 de Mayo de 2005, 13:31:00
-
Tengo un problema: Necesito hacer una funcion para ahorrar espacio en una plaqueta con un microcontrolador en c pero no cazo una goma
La funcion es esta:
____________________________
_________________________
Z=p1.1 + p1.2 *(p1.3 (+) p1.1 + p1.4)
Tengo que guardar el valor de z en una posicion de memoria y sacar el resultado por el p1.5 del microcontrolador
-
Lo primero que tienes que hacer es pasar las sumas a multiplicaciones con operaciones logicas mediante la simplificacion de la doble negacion:
si no me equivoco queda asi (espero haberlo copiado exactamente):
Z = !p1.1 && !p1.2 && !(!(p1.3^p1.1) && !p1.4)
|| OR lógico
&& AND lógico
! NOT lógico
^ XOR lógico
Creo que la funcion te queda entonces asi, Te devuelve el valor de Z y la pones donde quieras. Te recuerdo que es un bit solamente.
bit funcion(void)
{
bit Z;
Z = (!p1.1) && (!p1.2) && (!(!(p1.3^p1.1) && !p1.4)); // Realizamos operacion
p1.5=Z; // asignamos el valor de Z y lo sacamos por p1.5
return (Z); // retornamos el valor de Z a la variable de tipo bit que quieras
}
Revisa la simplificacion y ya esta te deberia funcionar. Un saludo.
-
me he dado cuenta que tambien podemos utilizar la funcion OR pero bueno cuestion de gustos. la funcion sigue siendo la misma.
-
Eso mismo que me pusiste lo tengo que poner en el keil y deberia funcionar?
Desde ya te agradezco infinitamente
-
si debe funcionar en keil? pues si, si los puertos se llaman asi y pones correctamente la funcion...
De todas formas me parece una mala gestion del micro si solo vas ha hacer un circuito conbinacional, prueba con logica programable que es mas sencillo y economico que un micro y es para lo que tu quieres, dibujas el esquema o lo programas en VHDL (similar a C) y lo pasas a una FPGA chiquitita y no tienes que aprender a programar los atmel ni ningun microcontrolador. Un saludo.