Programación Específica > Microcontroladores
Re: Comunicaciones seriales RS-232 con microcontroladores PI
tec_claudio_perez:
Hola a todos, quisiera abrir este tema para postear todo lo que hace falta para poder establecer enlaces RS-232 entre un PIC y una PC, tanto el hardware, firmware del pic y software en la PC.
Este es uno de los temas más frecuentes si queremos conectar un PIC a la PC.
La idea es postear técnicas y procedimientos para depurar, testear y diseñar comunicaciones seriales asíncronas usando Pics.:excl:
© Jonathan ©:
La idea es buena, pero se ve que pocos estan en el tema, o bien no tienen problemas con el rs-232.
Queria postear un programita que realice en C para comunicar el pic y recibir o enviarle la comunicacion desde la PC, solo que debo revizarlo.
Ni bien este listo lo coloco a disposicion de todos. Saludos :guitar:
GTow:
Hola, no tenía ni idea de que existiera este foro (aunque he participado un poco en otros de solocodigo). Me gusta mucho el tema de los PIC´s para hacer "chapucillas" de domótica en casa y ese tipo de cosas.
Con respecto a lo de establecer una conexión del PIC con el puerto serie, en efecto es lo que más se usa (al menos yo), en cuanto a hardware no necesitas más que el conector seria debidamente conectado al PIC (según su hoja de especificaciones) y para empezar usar el hyperterminal, yo siempre uso PIC de la familia 16F... y la configuración del hyperterminal es 9600 8-N-1. Una vez que consigas hacer lo que quieres desde aquí no tienes más que hacerte tus programas en C (o Visual Basic ofrece una interfaz sencillísima de uso del puerto serie) enviando lo mismo que enviabas con el hyperterminal.
No es un rollo muy concreto, pero si me planteais dudas concretas y puedo ayudaros en algo lo haré.
Un saludo
© Jonathan ©:
Aqui hay abundante informacion sobre el conector RS-232. Saludos :hola:
http://www.piclist.com/techref/io/serial/rs232.htm
http://www.epanorama.net/links/pc/interface.html
© Jonathan ©:
Ejemplo de comunicacion RS-232 en PIC 16F873. Saludos
--- Código: Text --- ;***********************************************************************;* adquisicion de datos a 10 bits - TX serial utilizando PIC 16F873 *;*********************************************************************** LIST P=16F873 #INCLUDE "p16f873.inc" ;***********************************************************************; DEFINICION DE BITS (ESTAN CASI TODOS EN EL INCLUDE ANTERIOR) STATUS EQU 03HPORT_A EQU 05HPORT_B EQU 06HPORT_C EQU 07HPCLATC EQU 0AHINTCON EQU 0BHPIR1 EQU 0CHRCSTA EQU 18HTXREG EQU 19HRCREG EQU 1AHADRESH EQU 1EHADCON0 EQU 1FHTRISA EQU 85HTRISB EQU 86HTRISC EQU 87HTXSTA EQU 98HSPBRG EQU 99HADRES1 EQU 9EHADCON1 EQU 9FHRP0 EQU 5RP1 EQU 6IRP EQU 7Z EQU 2C EQU 0TXIF EQU 4GO EQU 2LOOPS EQU 20HLOOPS2 EQU 21HNIBBLE1 EQU 22HNIBBLE2 EQU 23HNIBBLE3 EQU 24HBUFFER EQU 25H __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;CONFIGURO; PARA LA GRABACION, CODE PROTECT OFF, RESET DE ENCENDIDO ,ETC ;************************* COMIENZO DEL PROGRAMA ********************* ORG 00 GOTO INICIO;-----------------------------------------------------------------------RETARDO MOVWF LOOPS ;RUTINA DE RETARDO EN MILISEGUNDOSTOP2 MOVLW .110 ;EL NUMERO DE MILISEC LLEGA CARGADO MOVWF LOOPS2 ;EN EL REGISTRO LOOPSTOP NOP NOP NOP NOP NOP NOP DECFSZ LOOPS2,1 ;PREGUNTA SI TERMINO 1 mS. GOTO TOP DECFSZ LOOPS,1 ;PREGUNTA SI TERMINO RETARDO GOTO TOP2 RETLW 0;-----------------------------------------------------------------------;; RUTINA DE CONVERSION A/D A 10 BITS ;; DEVUELVE 3 DATOS EN HEXADECIMAL GUARDADOS ;; EN LOS REGISTROS NIBBLE1, NIBBLE2 Y NIBBLE3 ;;-----------------------------------------------------------------------;CONVER BSF STATUS,RP0 MOVLW B'10000010' ;SELECCIONA Vref INTERNO(+5 Y GND) MOVWF ADCON1 ;DATOS EN ADRESL Y 2 BITS EN ADRESH BCF STATUS,RP0 NOP NOP NOP NOP ;ESTAS INSTRUCCIONES NOP, DAN AL NOP ;MICRO, TIEMPO DE ADQUISICION NOP ;REQUERIDO, EN ESTE CASO 7 MICRO SEG. NOP NOP BSF ADCON0,GO ;INICIO DE CONVERSION NOP NOPCONSU BTFSC ADCON0,GO ;ESPERA QUE TERMINE DE CONVERTIR GOTO CONSU MOVF ADRESH,W MOVWF NIBBLE1 ;PASA TRES DIGITOS HEXADECIMALES MOVLW 30H ;A REGISTROS INDIVIDUALES ADDWF NIBBLE1,1 ;PARA SER TRANSMITIDO BSF STATUS,RP0 ;AL REGISTRO NIBBLE1 LE SUMA 30H MOVF ADRES1,W ;PARA CONVERTIRLO EN ASCII BCF STATUS,RP0 MOVWF BUFFER ANDLW 0FH MOVWF NIBBLE3 ;EL REGISTRO NIBBLE3 QUE CONTIENE MOVLW 37H ;EL DIGITO MENOS SIGNIFICATIVO DEBE SUBWF NIBBLE3,0 ;PROBARSE PARA VER SI ES UN NUMERO MOVLW 37H ;DE 0 A 9 O SI ES LA LETRA A HASTA F BTFSS STATUS,C ;PARA HACER LA CONVERSION A ASCII MOVLW 30H ADDWF NIBBLE3,1 SWAPF BUFFER,0 ANDLW 0FH MOVWF NIBBLE2 ;EL DIGITO NIBBLE2 TIENE EL MISMO MOVLW 0AH ;PROCEDIMIENTO QUE NIBBLE3 SUBWF NIBBLE2,0 MOVLW 37H BTFSS STATUS,C MOVLW 30H ADDWF NIBBLE2,1 RETLW 0;-----------------------------------------------------------------------;; ESTA RUTINA ENVIA SERIALMENTE LOS DATOS ;; OBTENIDOS EN CADA CONVERSION ;;-----------------------------------------------------------------------;ENVIAR MOVF NIBBLE1,0 ;TRANSMITE EL DIGITO HEXADECIMALESPER BTFSS PIR1,TXIF ;PDE MAYOR PESO GOTO ESPER MOVF TXREG,1 MOVF NIBBLE2,0 ;TX EL SEGUNDO DIGITO HEXAESPERA BTFSS PIR1,TXIF ;PERO DEBE ESPERAR QUE TERMINE DE GOTO ESPERA ;TX EL DATO ANTERIOR MOVWF TXREG MOVF NIBBLE3,0 ;TX TERCER DIGITOESPER2 BTFSS PIR1,TXIF GOTO ESPER2 MOVWF TXREG ;CHR$(44)="," MOVLW .44 ;TX EL CARACTER "COMA" PARA SEPARARESPER3 BTFSS PIR1,TXIF ;CADA DATO DE LOS DIFERENTES CANALES GOTO ESPER3 MOVWF TXREG RETLW 0 ;************************** PROGRAMA PRINCIPAL ************************** INICIO BSF STATUS,RP0 MOVLW 0FFH MOVWF TRISA MOVWF TRISB ;PUERTOS A Y B COMO ENTRADAS MOVLW B'10111111' MOVWF TRISC ;PUERTO C ENTRADAS Y PIN TX SALIDA MOVLW B'00100110' ;PROGRAMA USART ASINCRONO PARA TX MOVWF TXSTA ;ALTA RATA DE BAUDIOS MOVLW .103 ;CONFIGURA TEMPORIZADOR A 4MHZ MOVWF SPBRG ;2400 BPS (8,N,1) BCF STATUS,RP0 BSF PIR1,TXIF MOVLW B'10000001' ;SELECCIONA CANAL 0 Y RELOJ DE CONV MOVWF ADCON0 ;CONVERTIDOR ENCENDIDO CALL CONVER ;LLAMA RUTINA CONVERSION A/D CALL ENVIAR ;ENVIA DATOS SERIALES MOVLW B'10001001' ;SELECCIONA CANAL1 Y RELOJ DE CONVERSION MOVWF ADCON0 ;CONVERTIDOR ENCENDIDO CALL CONVER CALL ENVIAR MOVWF B'10010001' ;SELECCIONA CANAL 2 Y RELOJ CONVERSION MOVWF ADCON0 CALL CONVER CALL ENVIAR MOVLW B'10011001' ;SELECCIONA CANAL3 Y RELOJ CONVERSION MOVWF ADCON0 CALL CONVER CALL ENVIAR ;CHR$(13)=<ENTER> MOVLW .13 ;LA SEPARACION ENTRE CADA BLOQUEESPER4 BTFSS PIR1,TXIF ;DE 4 DATOS GOTO ESPER4 ;SE HACE CON EL CARRIAGE RETURN MOVWF TXREG ;Y UN CARACTER LINE FEED MOVLW .10 ;SIRVE PARA SEPARAR LAS LINEAS DE ;DATOS QUE SE RECIBEN, BAJA UN RENGLONESPER5 BTFSS PIR1,TXIF ;EN EL PROGRAMA TERMINAL DE WINDOWS GOTO ESPER5 ;CADA LINEA DE DATOS TIENE ;CANAL0, CANAL1 , CANAL2 , CANAL3 MOVWF TXREG NOP NOPESPER6 BTFSS PIR1,TXIF ;ESTA COMPROBACION ES PARA ;GARANTIZAR QUE SE TRANSMITA GOTO ESPER6 ;EL ULTIMO CARACTER ANTES DE SEGUIR MOVLW .250 ;RETARDO ENTRE BLOQUES DE 4 DATOS CALL RETARDO ;ESTE RETARDO EQUIVALE A 250 mili Sec ; SE PUEDE AUMENTAR HASTA 255 mili Sec GOTO INICIO ;COMIENZA NUEVAMENTE PARA ENVIAR ;OTRO PAQUETE DE DATOS END;--------------------------------------------------------------------------------;;EXTRAIDO DE LA REVISTA ELECTRONICA Y COMPUTADORES - CEKIT - NORBERTO PELLEGRINI;; FIRMAT - SANTA FE - ARGENTINA - 19/03/2001 ;;--------------------------------------------------------------------------------;
Navegación
[#] Página Siguiente
Ir a la versión completa