Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recepcionusart 3
Recepcionusart 3
* GccApplication2.c
*
* Created: 10/04/2019 7:17:30 p. m.
* Author : Julian HDz
*/
#include <avr/io.h>
//#define F_CPU 1000000UL //Defino frecuencia CPU
int main(void)
{
//--------------------------LED ----------------------------//
DDRC = 0b00000001; //Pin PC0=1
PORTC = 0b00000000; //Iniciar led apagado
//--------------------------USART ----------------------------//
UCSR0A = 0b00000000; //RX 1 cuando se completa la recepcion de un dato, TX 1
cuando se completa la trasmicion de un dato,
//UDRE0 1 El registro UDR0 está vacío, FEO
1 error de recepcion, DORn 1 error de sobreescritura,
//UPEn 1 error de paridad, U2Xn 0
velocidad normal , MPCMn 0 se usa para modo sincrono
UCSR0B = 0b00000000; //RX 1 interrupcion por recepcion, TX 1 interrupcion por
trasmicion, UDRIEn 1 interrupcion por q UDRO esta vacio
//RXENn 1 habilita RXD, TXENn 1 habilita
TXD, UCSZn2 Numero de bits a trasmitir,
//RXB8n 1 comunicacion de 9 bits, TXB8n 1
comunicacion de 9 bits
UCSR0C = 0b00000110; //UMSELn1, UMSELn0 Escojo el modo de trasmicion 00
asincrono, UPMn1, UPMn0 Escojo si uso y como el bit de paridad
//USBSn 0 1 bits de parada 1 2 bits de
parada, UCSZn0, UCSZn1 Numero de bits a trasmitir 011 8 bits, UCPOLn 0 en el modo
sincrono
UBRR0 = 6; //BAUD=9600, UBRR0=6 Ecuación, 9600 por que se aproxima
a 10k.
//-----------------------Timer - Prescaler-------------------------//
TCCR0B = (1 << CS02)|(1 << CS00); // Prescalizador en 1024
TCCR2B = (1<<CS22)|(1<<CS21)|(1<<CS20); //Prescalizador en 1024
TCNT0 = 252; //cuenta a 3 ms PD0 A PB6
//----------------------------------------------------------------//
while (1)
{
while (TCNT0 != 255);
cont7SEG++;
Enviar ++;
Recivir ++;
TCNT0 = 254; //Cada 2 milisegundos
switch(estado){
case 0:
//RECEPCION
////////////////////////////////////////////////////////////////////////////////////
/////
if (Recivir >= 10)
{
aux2++;
if (aux2 == 1)
{
UCSR0B=0b00010000;// Trans & Recep (8Bits)
while(!(UCSR0A & (1<<RXC0)));
Datos = UDR0;
Recibido = UDR0 & 011110000; // Saco
los 4 primeros digitos de codigo
if (Recibido == 10100000) //
Reviso mi codigo
{
u = Datos & 00001111;
//estado = 1;
// Si si es mi codigo paso a estado 1
//PORTC = 0b00000001;
}
//PORTC = 0b00000001;
Recivir = 0;
//aux2++;
}
if (aux2 == 2)
{
UCSR0B=0b00010000;// Trans & Recep (8Bits)
while(!(UCSR0A & (1<<RXC0)));
Datos = UDR0;
Recibido = UDR0 & 011110000; // Saco
los 4 primeros digitos de codigo
if (Recibido == 10100000) //
Reviso mi codigo
{
d = Datos & 00001111;
//estado = 1;
// Si si es mi codigo paso a estado 1
//PORTC = 0b00000001;
}
//PORTC = 0b00000001;
Recivir = 0;
//aux2++;
}
if (aux2 == 3)
{
UCSR0B=0b00010000;// Trans & Recep (8Bits)
while(!(UCSR0A & (1<<RXC0)));
Datos = UDR0;
Recibido = UDR0 & 011110000; // Saco
los 4 primeros digitos de codigo
if (Recibido == 10100000) //
Reviso mi codigo
{
u = Datos & 00001111;
//estado = 1;
// Si si es mi codigo paso a estado 1
//PORTC = 0b00000001;
}
//PORTC = 0b00000001;
Recivir = 0;
aux2 = 0;
}
}
UCSR0B = 0b00000000;
////////////////////////////////////////////////////////////////////////////////////
///////////////////////
estado = 1;
break; //1
default:
estado = 0;
break;
}
}
}