Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comunicación Serial Asincrónica
Comunicación Serial Asincrónica
PROFESOR
Fiestas Ugas, Antonio Esteban
CURSO
Microcontroladores
ALUMNOS:
Castillo Zavaleta, Santiago Evaristo
Fernández Campos, Piero Frank
Rivas Huamanñahui, Misael Mateo
Villamizar Morales, Patrick Michael
Lima – Perú
2022-02
1. Problema
El presente reto consistía que a partir de la letra que se mande por el monitor serial se
prenda el color correspondiente de la letra mandada.
2. Código solución
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
void serial_config(){
UCSR0A&=0xFC; //tiene las banderas
UCSR0C|=0x06;
UCSR0B|=0x18;
UCSR0B&=0xFA;
UBRR0=103;//velocidad del microcontrolador
DDRD=0x02;
DDRD&=0b11111110;
DDRD|=0b00000010;
}
void send_char( char dato){
while(!(UCSR0A&0x20));
UDR0=dato;
}
void send_frase( char *str){
while(*str){
send_char(*str++);
}
}
char read_char(void){
char dato;
if(UCSR0A&0x80){
return UDR0;
}
else {
return 0;
}
}
int main(void)
{
serial_config();
DDRB=0xFF;
while (1)
{
char dato=read_char();
if (dato == 'r')
{
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000001;
_delay_ms(500);
}
if(dato== 'g'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000010;
_delay_ms(500);
}
if(dato=='b'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000100;
_delay_ms(500);
}
if(dato=='m'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000101;
_delay_ms(500);
}
if(dato=='c'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000110 ;
_delay_ms(500);
}
if(dato=='y'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000011;
_delay_ms(500);
}
if(dato=='w'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000111;
_delay_ms(500);
}
}
}
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
void serial_config(){
UCSR0A&=0xFC; //tiene las banderas
UCSR0C|=0x06;
UCSR0B|=0x18;
UCSR0B&=0xFA;
UBRR0=103;//velocidad del microcontrolador
DDRD=0x02;
DDRD&=0b11111110;
DDRD|=0b00000010;
En estas líneas se construye una función que ayuda a leer una cadena de caracteres que se
denomina una variable str ,pues esto ayuda a mostrar un frase en el monitor serial.
int main(void)
{
serial_config();
DDRB=0xFF;
while (1)
{
char dato=read_char();
if (dato == 'r')
{
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000001;
_delay_ms(500);
}
if(dato== 'g'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000010;
_delay_ms(500);
}
if(dato=='b'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000100;
_delay_ms(500);
}
if(dato=='m'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000101;
_delay_ms(500);
}
if(dato=='c'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000110 ;
_delay_ms(500);
}
if(dato=='y'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000011;
_delay_ms(500);
}
if(dato=='w'){
PORTB&=0x00;
_delay_ms(500);
PORTB|=0b00000111;
_delay_ms(500);
}
}
}
4. Comentario de lo aprendido
- En esta sección hemos aprendido sobre como configurar el microcontrolador para
trabajar con comunicación serial.
- Se aprendió que existe puertos de salida especializadas para la comunicación serial
que son los pine RX y TX.
- Se aprendió como hacer que el microcontrolador reciba y a la vez transmita un
carácter y una cadena de caracteres (frase).
5. Conclusiones
- La comunicación serial permite la transmisión- recepción bit a bit de un byte
completo, este método de comunicación puede alcanzar mayores distancias.
- Se puede mandar caracteres a partir de un monitor serial y se puede hacer un
acción con el Arduino como prender un led.
- Existe configuraciones determinadas para los registros para el uso de la
comunicación serial.