CX SERIAL CON MICROCONTROLADOR ATMEGA164PA CODEVISION Y PROTEUS
WE UNIT TALENT THEY CREATE THE FUTURE
|
Continuando con el estudio del ATMEGA164PA vamos a conocer como funciona la cx serial en este microcontrolador, pero primero debemos preguntarnos....
¿QUÉ ES CX SERIAL?
La comunicación serial consiste en el envío de un bit de información de manera secuencial, esto es, un bit a la vez y en una frecuencia acordada entre el emisor y el receptor. La cx serial se utiliza para transmitir datos en formato ASCII.
¿QUÉ ES CX SERIAL?
La comunicación serial consiste en el envío de un bit de información de manera secuencial, esto es, un bit a la vez y en una frecuencia acordada entre el emisor y el receptor. La cx serial se utiliza para transmitir datos en formato ASCII.
La
parte física encargada de la comunición es la UART (Universal Asynchronous
Receiver and Transmitter). Los microcontroladores Atmega
8/168/328, disponen de un dispositivo
compatible
llamado USART (Universal Synchronous and Asynchronous serial
Receiver and Transmitter) que
permite tanto la comunicación asincrónica como sincrónica. -----------------------------------------------------------------------
El momento de programar debemos tener en cuenta las siguientes funciones para cx serial.
x=getchar( );
getchar( ); recibe un caracter en valor ASCII .+
putchar('*'); se envía el código ASCII del asterisco. En la pantalla observaremos un
asterisco.
printf("_",_); imprime un mensaje mediante comunicación serial
scanf("_",_); lee un
mensaje desde otro dispositivo haciendo uso de
la comunicación serial.
Los registros que se configuran el momento de habilitar la cx serial en CODEVISION son los siguientes:
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
Estos registros indican que se ha habilitado tanto el transmisor como el receptor del microcontrolador.
No olvides que el momento de simular tu programa debes escoger la opción de VIRTUAL TERMINAL(barra de herramientas, Virtual Instruments Mode) esta herramienta te permitirá visualizar la información tanto del TX como del RX.
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;
Estos registros indican que se ha habilitado tanto el transmisor como el receptor del microcontrolador.
No olvides que el momento de simular tu programa debes escoger la opción de VIRTUAL TERMINAL(barra de herramientas, Virtual Instruments Mode) esta herramienta te permitirá visualizar la información tanto del TX como del RX.
A continuación les dejo un ejemplo de un proyecto con cx serial para que lo puedan compilar y simular:
#include <mega164a.h>
#include <delay.h>
#include <stdio.h>
int i, n;
char dato;
#include <delay.h>
#include <stdio.h>
int i, n;
char dato;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
i=1-i;
delay_ms(20);
if(i==1)
{
printf("\r SISTEMA ENCENDIDO");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
}
if(i==0)
{
printf("\r SISTEMA APAGADO");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
}
}
void main(void)
{
// Declare your local variables here
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
while (1)
{
if(i==1)
{
printf("\r PRESIONE A, B, C, D PARA INICIAR UN NUEVO JUEGO DE LUCES");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
dato=getchar();//LEE UN CARACTER DESDE UN DISPOSITIVO
switch (dato)
{
case 'A':
printf("\r JUEGO DE LUCES #1 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
PORTA=0xFF;
delay_ms(500);
PORTA=0x00;
delay_ms(500);
break;
dato=getchar();//LEE UN CARACTER DESDE UN DISPOSITIVO
switch (dato)
{
case 'A':
printf("\r JUEGO DE LUCES #1 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
PORTA=0xFF;
delay_ms(500);
PORTA=0x00;
delay_ms(500);
break;
case 'B':
printf("\r JUEGO DE LUCES #2 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
PORTA=0X01;
for(n=1;n<8;n++)
{
PORTA=PORTA*2;
delay_ms(100);
}
PORTA=0b10000000;
for(;n>1;n--)
{
PORTA=PORTA/2;
delay_ms(100);
}
break;
case 'C':
printf("\r JUEGO DE LUCES #3 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
PORTA=0x01;
for(n=0;n<8;n++)
{
PORTA=PORTA*2;
delay_ms(100);
}
for(;n>1;n--)
{
PORTA.0=1;
delay_ms (50);
PORTA=PORTA*2;
delay_ms(100);
}
break;
case 'D':
printf("\r JUEGO DE LUCES #4 ON");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
PORTA=0X01;
delay_ms(100);
for(n=1;n<128;n++)
{
PORTA=PORTA+1;
delay_ms(50);
}
for(;n>122;n--)
{
PORTA=PORTA/2;
delay_ms(50);
}
break;
default:
printf("\r LETRA ERRONEA");//IMPRIME UN MENSAJE O CADENA DE CARACTERES
};
}
else
{
PORTA=0x00;
}
}
}
/*******************************************************************************************************************/
Este programa es una pequeña aplicación de lo que podemos obtener con cx serial, nos permite tanto enviar como recibir datos los cuales se visualizarán en el VIRTUAL TERMINAL de PROTEUS controlando asi nuestra interacción con el usuario.
--------------------------------------------------------------------------------------------------------------------
No hay comentarios:
Publicar un comentario