TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: wedge550 en 13 de Marzo de 2009, 10:42:45
-
Hola como están quisiera que alguien me ayude necesito realizar una comunicación serial rs 232 entre el pic 16f877a y la pc en lenguaje assembler. He encontrado varias rutinas pero no se en donde debo cargar el dato que necesito enviar y de donde obtener el dato que el pc envía. No se si exista la posibilidad que me ayuden con un código explicando donde debo cargar el dato y de donde obtenerlo, o si es posible convertirlo en librería y solo llamarla y que me retorne en el acumulador el dato recivido, y de igual manera cargar en el acumulador el dato a enviar y llamar a la rutina de transmisión.
Espero me puedan ayudar... Gracias
-
;El módulo USART. Recepción asíncrona.
;
;El módulo USART de los dispositivos PIC16F87X incorpora el hardware necesario para implemen-
;tar comunicación serie asíncrona full-duplex o sincrona half-duplex. En este último caso el
;USART se puede comportar como Master o Slave.
;
;
;En el ejemplo se provoca una interrupción cada vez que se recibe un carácter vía serie. El
;programa de tratamiento visualiza, sobre los leds conectados a la Puerta B,
;el código binario del carácter recibido. Igualmente retransmite el carácter recibido, a
;modo de ECO.
List p=16F877A ;Tipo de procesador
include "P16F877A.INC" ;Definiciones de registros internos
org 0x00 ;Vector de Reset
goto Inicio
org 0x04 ;Vector de interrupción
goto Inter
;********************************************************************************************
;Tx_Dato: Transmite vía serie el dato presente en el reg. W
Tx_Dato bcf PIR1,TXIF ;Restaura el flag del transmisor
movwf TXREG ;Almacena el byte a transmitir
bsf STATUS,RP0
Tx_Dato_Wait btfss TXSTA,TRMT ;Byte transmitido ??
goto Tx_Dato_Wait ;No, esperar
bcf STATUS,RP0
return ;Si
;******************************************************************************************
;Tratamiento de la interrupción
Inter btfss PIR1,RCIF ;Ha sido interrupción en la recepción ??
retfie ;No, falsa interrupción
bcf PIR1,RCIF ;Si, restaurar el flag de interrupción
movf RCREG,W ;Lee el dato recibido
movwf PORTB ;Lo saca por la puerta B
call Tx_Dato ;Lo retransmite a modo de eco
retfie
;*******************************************************************************************
;Programa principal
Inicio clrwdt
clrf PORTC
clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1
clrf PORTB ;Puerta B salida
movlw b'10111111'
movwf TRISC ;RC7/Rx entrada, RC6/Tx salida
movlw b'11001111'
movwf OPTION_REG ;Preescaler de 128 asociado al WDT
movlw b'00100100'
movwf TXSTA ;TX en On, modo asíncrono con 8 bits y alta velocidad
movlw .25
movwf SPBRG ;9600 baudios con Fosc=4MHz
bsf PIE1,RCIE ;Habilita interrupción en la recepción
bcf STATUS,RP0 ;Selecciona banco 0
movlw b'10010000'
movwf RCSTA ;USART en On, recepción contínua
bsf INTCON,PEIE ;Activa interrupción de periféricos
bsf INTCON,GIE ;Activa interrupciones
Loop
;AQUI TU PROGRAMA
;para enviar datos sólo carga W con el valor a enviar y llama a la subrutina Tx_Dato
; Por ejemplo
MOVLW 0x55
call Tx_dato
;Lo recibido te lo guarda automáticamente en el registro RCREG y te lo muestra por puerto B
goto Loop
end ;Fin del programa fuente
-
Bienvenido al foro wedge. pon el post en el "almacen del asembler"; aqui lo mas seguro es que nadie te conteste, en el otro subforo puede que si recibas respuestas
saludos tapi8
-
hola que tal. Soy nuevo usando el lenguaje ensamblador pero poco a poco voy entendiendo como funciona esto jaja :) Tengo 2 dudas, ¿cómo sería el programa si quisiera mostrar en un LCD la comunicación serial entre la computadora y el pic16f877a? y la segunda, ¿afectaría la escritura del programa si utilizo un cable de usb a serial ya que mi computadora ya no tiene el puerto? Espero me ayuden ya que es prácticamente mi práctica para pasar la materia jajaja un saludo! :mrgreen:
-
Bienvenido al foro acá (http://www.todopic.com.ar/foros/index.php?topic=25935.msg212166#msg212166) un ejemplo, algo avanzado pero te puede servir.
Una observación, es recomendable utilizar primero que todo el buscador del foro, a veces no hay necesidad de preguntar o abrir un nuevo hilo ya que muchos de los temas de interés ya se han tratado con anterioridad.
-
Que tal, el código me ayudó mucho solo que me surgió unnuevo problema, ¿cómo conecto lo que es el max232 al pic ya que en la simulación de PROTEUS tiene un VSM? Un saludo!
-
Acá (http://repositorio.utp.edu.co/dspace/bitstream/11059/1757/1/62138154H493.pdf) se explica en detalle la conexión entre una max232 y un microcontrolador.