Paso 2: Desarrollar el código para ATMEGA128
Esta es la función para la comunicación con el ordenador portátil:
void usart_init (unsigned int ubrr)
{
/ * Velocidad conjunto * /
UBRR0H = (unsigned char) (ubrr >> 8);
UBRR0L = (unsigned char) ubrr;
/ * Habilitar transmisor y receptor * /
UCSR0B = (1 << RXEN) | (1 << TXEN);
/ * Formato del conjunto del marco: 8data, 2stop bit * /
UCSR0C = (1 << USB) | (3 << UCSZ0);
}
void usart_transmit (datos char sin signo)
{
/ * Esperar para buffer de transmisión vacío * /
mientras (! () UCSR0A & (1 << UDRE)))
;
/ * Pone datos en búfer, envía los datos * /
UDR0 = datos;
}
void usart_pstr (unsigned char * s) {}
bucle a través de toda cadena
mientras que (* s) {}
usart_transmit(*s);
s + +;
}
}
unsigned char usart_receive (void)
{
/ * Esperar datos a ser recibidos * /
mientras (! () UCSR0A & (1 << RXC)))
;
/ * Obtener y devolver los datos recibidos del buffer * /
volver UDR0;
}
.
.
.
.
en main()
por favor agregar:
hacer
{
c_byte = usart_receive();
usart_transmit(c_byte);
}
mientras que (c_byte ==' ');
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
lcd_data(c_byte);
lcd_cmd (0xC0); //goto segunda fila
lcd_string("Selected");
_delay_ms(1000);
{Switch(c_byte)}
caso 'a':
_delay_ms (10);
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_cmd (0xC0); //goto segunda fila
_delay_ms (10);
lcd_cmd(0x01); Visualización clara
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("Relay A");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("Activated..");
_delay_ms(1000);
siguiente pantalla
activar relé 1
relé 1 = 1;
relé 2 = 0;
rotura; / * opcional * /
caso 'b':
_delay_ms (10);
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_cmd (0xC0); //goto segunda fila
_delay_ms (10);
lcd_cmd(0x01); Visualización clara
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("relé B");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("ACTIVATED");
_delay_ms(1000);
siguiente pantalla
activar relé 2
relé 1 = 0;
relé 2 = 1;
rotura;
caso 'c':
usart_pstr ("Hola desde ATMEGA128\n");
printf ("Hola RIKO");
_delay_ms(50000);
_delay_ms (10);
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_cmd (0xC0); //goto segunda fila
_delay_ms (10);
lcd_cmd(0x01); Visualización clara
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string("message");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("Flasher");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("con ATMEGA128");
lcd_cmd (0xC0); //goto segunda fila
lcd_string ("por arick");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("publicada");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("instructable.com");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string ("Made in");
lcd_cmd (0xC0); //goto segunda fila
lcd_string("Australia");
_delay_ms(1000);
siguiente pantalla
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
_delay_ms (10);
lcd_string("Disable");
lcd_cmd (0xC0); //goto segunda fila
lcd_string ("todos los relés");
_delay_ms(1000);
desactivar todos los relevadores de
relé 1 = 0;
relé 2 = 0;
rotura;
} //end caso