Autor Tema: Comunicación serial en asm  (Leído 21430 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado wedge550

  • PIC10
  • *
  • Mensajes: 10
Comunicación serial en asm
« 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

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Comunicación serial en asm
« Respuesta #1 en: 13 de Marzo de 2009, 10:56:43 »
;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
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Comunicación serial en asm
« Respuesta #2 en: 13 de Marzo de 2009, 10:58:18 »
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

Desconectado ivanovic

  • PIC10
  • *
  • Mensajes: 5
Re: Comunicación serial en asm
« Respuesta #3 en: 26 de Abril de 2013, 10:53:24 »
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:

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comunicación serial en asm
« Respuesta #4 en: 26 de Abril de 2013, 23:26:24 »
Bienvenido al foro acá 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.   
Un saludo desde Pereira - Colombia

Desconectado ivanovic

  • PIC10
  • *
  • Mensajes: 5
Re: Comunicación serial en asm
« Respuesta #5 en: 07 de Mayo de 2013, 10:39:17 »
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!

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Comunicación serial en asm
« Respuesta #6 en: 07 de Mayo de 2013, 10:46:28 »

Acá se explica en detalle la conexión entre una max232 y un microcontrolador.
Un saludo desde Pereira - Colombia