Professional Documents
Culture Documents
Figura 1
Funcionamiento del dispositivo:
Dispone de dos pulsadores (S0 y S1): al presionar sobre el pulsador S0, el uC enva al PC el
mensaje de texto Alarma pulsador 1; mientras que si se presiona sobre S1, el mensaje que se
enva al PC es Alarma Pulsador 2. En la Figura 2, se puede apreciar el texto recibido por el Pc
Figura 2
Desde el terminal se puede controlar el encendido/apagado de los leds que se conectan a los pines
PD4, PD5, PD6, y PD7 del uC. Se controla digitando en el terminal los caracteres indicados en la
Tabla 1:
Tabla 1
Caracter
Comportamiento de Leds en uC
digitado en
Terminal de PC
'1'
D4 encendido
'2'
D4 apagado
'3'
D5 encendido
'4'
D5 apagado
'5'
D6 encendido
'6'
D6 apagado
'7'
D7 encendido
'8'
D7 apagado
'a'
// Listado 1
/* UNIVERSIDAD DE LAS FUERZAS ARMADAS -ESPE
DEPARTAMENTO DE ELCTRICA Y ELECTRNICA
Asignatura: Tecnologas de Software para Electrnica
Docente: Ing. Jaime Andrango
Fecha : Mayo/2015
*/
#include <avr/io.h>
#include <util/delay.h>
#define clear_bit(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define set_bit(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define toogle_bit(sfr, bit) (_SFR_BYTE(sfr) ^= _BV(bit))
#define USART_BAUDRATE 4800
#define BAUD_PRESCALE (F_CPU / 16 / USART_BAUDRATE - 1)
int main(void)
{
clear_bit(DDRD, DD2); //PD2 como entrada
set_bit(PORTD, PD2); //PD2 (activa pull-up)
clear_bit(DDRD, DD3); //PD3 como entrada
set_bit(PORTD, PD3); //PD3 (activa pull-up)
set_bit(DDRD, DD4); //PD4 (como salida, led D4)
clear_bit(PORTD, PD4); //led D4 apagado
set_bit(DDRD, DD5); //PD4 (como salida, led D5)
clear_bit(PORTD, PD5); //led D5 apagado
set_bit(DDRD, DD6); //PD4 (como salida, led D6)
clear_bit(PORTD, PD6); //led D6 apagado
set_bit(DDRD, DD7); //PD4 (como salida, led D7)
clear_bit(PORTD, PD7); //led D7 apagado
UCSRB |= (1 << RXEN) | (1 << TXEN); // Inicializa la USART para envio y recepcin.
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Asincrnica, 8,N,1
UBRRH = (BAUD_PRESCALE >> 8);
UBRRL = BAUD_PRESCALE;
char mensaje1[] = "Alarma Pulsador 1\r\n";
char mensaje2[] = "Alarma Pulsador 2\r\n";
for (;;)
{
if (bit_is_clear(PIND, PD2)) // Detecta presin sobre pulsador S0
{
_delay_ms(20);
if (bit_is_clear(PIND, PD2))
{
char *s = mensaje1;
while (*s != 0)
{
while (( UCSRA & (1 << UDRE ) ) == 0) {};
UDR = *s++;
}
loop_until_bit_is_set(PIND, PD2);
}
}
if (bit_is_clear(PIND, PD3)) // Detecta presin sobre pulsador S1
{
_delay_ms(20);
if (bit_is_clear(PIND, PD3))
{
char *s = mensaje2;
while (*s != 0)
{
while (( UCSRA & (1 << UDRE ) ) == 0) {};
UDR = *s++;
}
loop_until_bit_is_set(PIND, PD3);
}
}
if ( UCSRA & (1 << RXC ))
{
switch (UDR)
{ case '1': set_bit(PORTD, PD4);break; // Caracter '1' enciende Led D4
case '2': clear_bit(PORTD, PD4);break;// Caracter '2' apaga Led D4
case '3': set_bit(PORTD, PD5);break; // Caracter '3' enciende Led D5
case '4': clear_bit(PORTD, PD5);break;// Caracter '4' apaga Led D5
case '5': set_bit(PORTD, PD6);break; // Caracter '5' enciende Led D6
case '6': clear_bit(PORTD, PD6);break;// Caracter '6' apaga Led D6
case '7': set_bit(PORTD, PD7);break; // Caracter '7' enciende Led D7
case '8': clear_bit(PORTD, PD7);break;// Caracter '8' apaga Led D7
case 'a': clear_bit(PORTD, PD4);
// Caracter 'a' apaga los Leds: D4, D5, D6 y D7
clear_bit(PORTD, PD5);
clear_bit(PORTD, PD6);
clear_bit(PORTD, PD7);break;
}
}
}
}