El post que buscas se encuentra eliminado, pero este también te puede interesar

Comunicacion UART 18f4550

HOLA, EN ESTA OCASION LES TRAIGO ESTE VIDEO EN EL CUAL LES MUESTRO COMO REALIZAR UNA COMUNICACION "UART" O RS232 ENTRE EL PIC Y LA TERMINAL VIRTUAL DE PROTEUS


link: https://www.youtube.com/watch?v=00iPa4986yw&feature=youtu.be


¿PARA QUE SIRVE?

EL SABER ESTO LES SERA DE UTILIDAD PARA REALIZAR CONEXIONES ENTRE EL PIC Y ELEMENTOS QUE TENGA ESTE TIPO DE COMUNICACION UART. POR EJEMPLO:

*SENSORES ULTRASONICOS
*COMPUTADORA PERSONAL (CON CONVERTIDORES RS232 A USB)
*LCD 16X2 (CON ESTE PROTOCOLO DE COMUNICACION)
*BLUETOOTH HC05-HC06


EN EL PROGRAMA SE TIENE...

#INCLUDE <18F4550.h>
#fuses INTRC_IO,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

char recibido;

#int_rda
void rd_isr(void)
{
recibido = getc();
}



void main()
{

enable_interrupts(global);
enable_interrupts(int_rda);

while(1)
{

if(input(pin_A0))
{
printf("HOLA";
delay_ms(500);
}

if(recibido=='1')
{
output_high(pin_A1);
delay_ms(500);
output_low(pin_A1);
}

}
}


DONDE LA PARTE IMPORTANTE ES:

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#use rs232 = establece es tipo de comunicacion a utilizar

baud = velocidad del dispositivo a utilizar "baud" es baudios, que significa el numero de simbolos (caracteres) por segundo de transmision

parity = N "NO" bits de paridad, esto dependera del dispositivo al cual nos conectaremos, la mayoria no utiliza

xmit = pin de transmision de datos conocido como TX (en este pic es el C6)

rcv = pin de recepcion de datos conocido como RX (en este pic es el C7)

bits = numero de bits a trabajar en este caso 8


Se declara una variable de tipo "char" caracter, ya que recordemos que trabajaremos con caracteres (simbolos, letras, numeros... investiguen codigo ASCII), noten la posicion de donde se declara la variable

char recibido;

no esta dentro del "void main()" ya que es un variable globlal, esto significa que se utilizara en todas las funciones del programa y no solo en la funcion principal esto debido a...


#int_rda
void rd_isr(void)
{
recibido = getc();
}

que es una funcion de interrupcion que se ejecuta cada vez que se recibe un dato por el pin C6 (rcv) lo que realiza esta funcion es obtener el valor del dato recibido mediante getc(); y lo guarda en la variable recibido.



enable_interrupts(global);
enable_interrupts(int_rda);


habilitamos interrupciones globales y tambien interrupciones por recepcion de datos UART


while(1)
{

if(input(pin_A0)) //si hay entrada en el pin A0
{
printf("HOLA "; // imprimira HOLA en el puerto UART
delay_ms(500); //retardo de 500 ms
}

if(recibido=='1') //si el dato recibido es la tecla 1
{
output_high(pin_A1); //pone alto pin A1
delay_ms(500); //reatardo de medio segundo
output_low(pin_A1); //apaga led
}

}



LA TERMINAL VIRTUAL ENSEÑARA LOS DATOS... SE CONECTA
RX (DEL PIC) CON TX (DE TERMINAL)
TX (DEL PIC) CON RX (DE TERMINAL)

ESTO SERA PARA LA MAYORIA DE LOS DISPOSITIVOS QUE TRABAJEN CON UART

RX PIC --> TX DISPOSITIVO
TX PIC --> RX DISPOSITIVO


NOTEN QUE CUANDO PULSO "ESPACIO" TAMBIEN SE APAGA EL LED, ESTO SE DEBE A QUE LA TERMINAL VIRTUAL LEE TODO EL TECLADO COMO UNA ENTRADA DE "CARACTER" (POR ESO CHEQUEN EL CODIGO ASCII). CADA CARACTER TIENE UN VALOR, INCLUSO LA TECLA "ENTER" Y "BORRAR" (BACKSPACE)



ESPERO QUE LES HAYA GUSTADO ESTE VIDEO SALUDOS. DUDAS O COMENTARIOS POR FAVOR HÁGANLOS SABER POR ESTE MEDIO O A MI CORREO ELECTRÓNICO.


SALUDOS

Anuncios

0 comentarios - Comunicacion UART 18f4550