Hola comunidad! Queria hacerles una consulta y espero puedan ayudarme,
Estoy iniciando en la comunicacion serial, utilizo dos Atmega8 y AtmelStudio.
Lo que intento hacer es que el uC que esta programado como TX, maneje dos pulsadores(encendido y apagado) para controlar el parpadeo de los leds conectados al uC que esta programado como RX. El problema en el cual me encuentro es que al hacer parpadear los leds no puedo apagarlos, los mismos no lo hacen debido a que no puede salir del bucle y siguen parpadeando infinitamente. Les dejo el codigo y adjunto la libreria de USART que utilizo para que puedan simularlo y agradezco si puedieran ayudarme u orientarme en el error que estoy cometiendo, desde ya muchas gracias!
Saludos!
Codigo fuente: TX
Codigo fuente: RX
Estoy iniciando en la comunicacion serial, utilizo dos Atmega8 y AtmelStudio.
Lo que intento hacer es que el uC que esta programado como TX, maneje dos pulsadores(encendido y apagado) para controlar el parpadeo de los leds conectados al uC que esta programado como RX. El problema en el cual me encuentro es que al hacer parpadear los leds no puedo apagarlos, los mismos no lo hacen debido a que no puede salir del bucle y siguen parpadeando infinitamente. Les dejo el codigo y adjunto la libreria de USART que utilizo para que puedan simularlo y agradezco si puedieran ayudarme u orientarme en el error que estoy cometiendo, desde ya muchas gracias!
Saludos!
Codigo fuente: TX
Código:
[COLOR="YellowGreen"]/*
Nombre: TX.c
*/ [/COLOR]
[COLOR="yellowgreen"]/* Configuraciones Generales */[/COLOR]
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "usart.h"
[COLOR="yellowgreen"]/* Variables a Utilizar */[/COLOR]
unsigned char encender = 'a';
unsigned char apagar = 'b';
int main(void)
{
[COLOR="yellowgreen"]// Comunicacion serial a 4800 baudios[/COLOR]
SerialBegin(103);
[COLOR="yellowgreen"]// PC0 y PC1 como entrada[/COLOR]
DDRC = (0<<PC1) | (0<<PC0);
[COLOR="yellowgreen"]// Limpiamos PORTC[/COLOR]
PORTC = 0x00;
while(1)
{
[COLOR="yellowgreen"]// Testeo estado de PC0[/COLOR]
if (bit_is_clear(PINC,PC0) == 0)
{
[COLOR="yellowgreen"]// Retardo para verificar la pulsacion[/COLOR]
_delay_ms(50);
[COLOR="yellowgreen"]// Testeo nuevamente PC0[/COLOR]
if (bit_is_clear(PINC,PC0) == 0)
{
[COLOR="yellowgreen"]// Envio el dato "encender"[/COLOR]
SerialWrite(encender);
}
}
[COLOR="yellowgreen"]// Testeo estado de PC1[/COLOR]
if (bit_is_clear(PINC,PC1) == 0)
{
[COLOR="yellowgreen"]// Retardo para verificar la pulsacion[/COLOR]
_delay_ms(50);
[COLOR="yellowgreen"]// Testeo nuevamente PC1[/COLOR]
if (bit_is_clear(PINC,PC1) == 0)
{
[COLOR="yellowgreen"]// Envio el dato "apagar"[/COLOR]
SerialWrite(apagar);
}
}
}
}
Codigo fuente: RX
Código:
[COLOR="YellowGreen"]/*
Nombre: RX.c
*/ [/COLOR]
[COLOR="yellowgreen"]/* Configuraciones Generales */[/COLOR]
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "usart.h"
[COLOR="yellowgreen"]/* Variables a utilizar */[/COLOR]
unsigned char dato_serial;
unsigned char encender = 'a';
unsigned char apagar = 'b';
int main(void)
{
[COLOR="yellowgreen"]// Comunicacion serial a 4800 baudios[/COLOR]
SerialBegin(103);
[COLOR="yellowgreen"]// Puerto C como salida[/COLOR]
DDRC = 0xFF;
[COLOR="yellowgreen"]// Limpio PORTC[/COLOR]
PORTC = 0x00;
while(1)
{
[COLOR="yellowgreen"]// Almaceno el dato recibido en "dato_serial" [/COLOR]
dato_serial = SerialRead();
[COLOR="yellowgreen"]// Es igual a "encender"?[/COLOR]
if (dato_serial == encender)
{
while(true)
{
[COLOR="YellowGreen"]// Parpadeo...[/COLOR]
PORTC = 0b11111111;
_delay_ms(500);
PORTC = 0b00000000;
_delay_ms(500);
[COLOR="yellowgreen"]// Almaceno dato recibido en "dato_serial"[/COLOR]
dato_serial = SerialRead();
[COLOR="yellowgreen"]// Es igual a "apagar"?[/COLOR]
if(dato_serial == apagar)
{
PORTC = 0b00000000;
[COLOR="YellowGreen"]// Salgo...[/COLOR]
break;
}
}
}
}
}