configurar entradas y salidas de atmega16

Hola que tal mucho gusto, estoy en una encrucijada de mi U y necesito hacer un ensayo con un ATMEGA16 entonces necesito configurar una salida como invesora de una entrada es decir tengo que utilizarlo como una leve compuerta logica en mi ensayo... tengo un código asi:
IF(PINA.1) //si el pin 1 del puerto A está en 1...
{
//PORTB.3 = 0;
}

IF(!PINA.1) //si el pin 1 del puerto A está en 0...
{
//PORTB.1 = 1;
}
utilizé un ejemplo que tenían aquí mismo pero no se si estoy en lo correcto con este código.
 
Yo uso el Avr studio 5/6 y para manejar los puertos hago esto:

Defino 3 funciones:

1-
Código:
void configura_puertos(u8 puertoa,u8 puertob,u8 puertoc,u8 puertod) // Configuro los puertos como Entrada/Salida
{
	DDRA=puertoa;
        DDRB=puertob;
	DDRC=puertoc;
	DDRD=puertod;
}

2-
Código:
void set_bits (volatile u8 *port, u8 mask) // Mando a 1 un puerto determinado
{
	*port |= mask;
}

3-
Código:
void clear_bits (volatile u8 *port, u8 mask) // Mando a 0 un puerto determinado
{
	*port &= ~mask;
}

Ej. si quisiera que el puerto 0 y 2 del C tengan una salida 0 y 1 respectivamente (el resto de los puertos que funcionen como entradas).

Código:
...
configura_puertos(0,0,(1<<PC2)|(1<<PC0),0); // Puerto C 0 y 2 como salidas
clear_bits (&PORTC,(1<<PC0));
set_bits (&PORTC,(1<<PC2));
...

Donde:

(1<<PC0) = 1<<0 = Desplaza 0 veces un 1 = 00000001 b (binario)
(1<<PC2) = 1<<2 = Desplaza 2 veces un 1 = 00000100 b (binario)

Luego para hacer esa negación simplemente haría esto:

Código:
....

int main(){
   configura_puertos(0,(1<<PB3),0,0);// Configuro los puertos que voy a usar
   
   while(1)
   {
    if(PINA&(1<<PA1))
         clear_bits (&PORTB,(1<<PB3)); //Borro el puerto
    else
         set_bits (&PORTB,(1<<PB3)); // Seteo 1 en el puerto
   }

}

Eso sería todo.
 
Intentaste descomentando los codigos??


PHP:
IF(PINA.1) //si el pin 1 del puerto A está en 1...
{
PORTB.3 = 0;
}

IF(!PINA.1) //si el pin 1 del puerto A está en 0...
{
PORTB.1 = 1;
}
 
correcto, entonces si por ejemplo quiero que A0 sea entrada y A1 una salida negada de A0? solo quiero usar este puerto.. puede hacerse asi? es decir que se cumpliera una operacion lógica asi A0=A1` (A0=A1 negada) que la salida de A0 sea lo opuesto...



muchas gracias por el tiempo que prestan para responder estas interrogantes quizas un poco ignorantes por el simple hecho de no saber nada de atmega16
 
Última edición:
Atrás
Arriba