Autor Tema: proyecto trigger to midi, 16f877  (Leído 12848 veces)

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

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
proyecto trigger to midi, 16f877
« en: 13 de Noviembre de 2009, 03:08:46 »
 Hola, la verdad soy un total novato en lo que se refiere a microcontroladores y programacion, pero estoy realizando un proyecto en el que necesito convertir a midi la señal de 4 piezoelectricos y enviarla al computador, por lo que he investigado el 16f877 parece una buena opcion, es asi??.
 bueno, despues de eso, me cabe preguntar sobre la programacion, he instalado el mplab y he intentado descifrar algunas rutinas en lenguaje assembler, lo que me imagino se debe hacer debe ser algo como:

-inicilaizar los conversores A/D del pic
-tomar el nivel peak del piezo y asignarlo como velocity
-rellenar el resto de la trama midi, (canal, nota, velocity)
-activar la usart y definir la frecuencia correspondiente al protocolo midi, para poder mandar los datos midi al pc

la verdad es que tengo muchas dudas, para activar los conversores A/D creo se utilizan los registros adcon0 y adcon1, la usart (nisiquiera se bien que es, jajajjajajaj) creo tiene un registro SPRG para fijar los kbaudios, agradeceria algun trozo de codigo bien explicado para entender bien como se lleva todo esto a lenguaje ASM y arrojar algo de luz sobre el tema.

bueno, muchas gracias de antemano

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: proyecto trigger to midi, 16f877
« Respuesta #1 en: 13 de Noviembre de 2009, 04:21:14 »
hola, y bienvenido al foro. es mas menos como dices. busca entre mis mensajes que ya hice un controlador, secuenciador, y una bateria, a ver ande andaran en el foro. empieza con el programa y pregunta algo en concreto para que te podamos ayudar, te recomiendo armar una placa y empezar pulsando un boton, envia un dato, enciende un led... y ve subiendo de nivel. mira el post rutinas para compartir ahí tienes las que uso yo para configurar la usart para midi 31250kb el cad registros de desplazamiento, ademas de muchas mas rutinas que te pueden servir

por si no lo conoces tienes los proyectos de eedrum y ucapps

un saludo

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #2 en: 13 de Noviembre de 2009, 04:54:01 »
gracias por responder tan prontamente, respecto a los proyectos edrum y ucapps, los he investigado, en la pagina de edrum encontre solo firmaware en formato hex y no codigo fuente, bueno no quiero pasarme, pero la verdad es que tengo dudas fundacionales por decirlo asi jajjajajjaja, por ej el template del mplab para el 16f877 trae un monton de codigo que no entiendo:

list      p=16f877            ; list directive to define processor
   #include <p16f877.inc>        ; processor specific variable definitions
   
   __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.

;***** VARIABLE DEFINITIONS
w_temp        EQU     0x7E        ; variable used for context saving
status_temp   EQU     0x7F        ; variable used for context saving

;**********************************************************************
      ORG     0x000             ; processor reset vector
      clrf    PCLATH            ; ensure page bits are cleared
        goto    main              ; go to beginning of program


      ORG     0x004             ; interrupt vector location
      movwf   w_temp            ; save off current W register contents
      movf   STATUS,w          ; move status register into W register
      movwf   status_temp       ; save off contents of STATUS register


; isr code can go here or be located as a call subroutine elsewhere


      movf    status_temp,w     ; retrieve copy of STATUS register
      movwf   STATUS            ; restore pre-isr STATUS register contents
      swapf   w_temp,f
      swapf   w_temp,w          ; restore pre-isr W register contents
      retfie                    ; return from interrupt

main

; remaining code goes here

      END                       ; directive 'end of program'

he estado estudiando instruciones y los registros de este pic, pero nisiquiera se si todo el codigo que pone por defecto el mplab es solo ejemplo o tiene algun proposito, se que por lomenos  incluye el modelo del pic y que eso es necesario:

 "list      p=16f877            ; list directive to define processor
   #include <p16f877.inc>        ; processor specific variable definitions"

el resto, chino jajajjajajajja

bueno como dije no quiero pasarme, pero de momento hasta eso me aproblema.

saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: proyecto trigger to midi, 16f877
« Respuesta #3 en: 13 de Noviembre de 2009, 11:24:32 »
A pero eso es fácil de resolver, solo necesita un par de horas sentado  :mrgreen: Por aquí un tutorial de asm, donde se explican cada una de las instrucciones. Después por aquí hay varios ejemplo para ir desarrollando los primeros programitas en assembler utilizando los módulos disponibles de cada PICs.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #4 en: 14 de Noviembre de 2009, 21:16:56 »
 Gracias por responder nuevamente, ya algo he aprendido del lenguaje y los ejemplos y el tutorial de asm me han sido de mucha ayuda, he encontrado este archivo, lo mas parecido a lo que necesito programar, bueno el asunto es que inspecionando el archivo aparece la siguiente rutina:

;************************************
;   Switch Debounce Delay (100mS)
;************************************

sw_dbnc   movlw 80h   ; Delay routine
   movwf dlyreg2
debnce   call delay3
   decfsz dlyreg2
   goto debnce
   return

;*************************************
;    Delay Subroutine (770uS)
;*************************************
delay3    movlw .255
          movwf dlyreg3
dly3      decfsz dlyreg3
          goto dly3
          nop
          return


 osea una rutina de demora, me parece que es con objeto de prevenir el rebote de los sensores, pero por lo que he averiguado y testeado un circuito rectificador analogo simple deja el pulso que entregan los piezos en condiciones para entrar a los pines del pic, bueno esa es mi duda por el momento, la rutina en cuestion es invocada solo al final del programa (si es que revise bien) cosa que tampoco comprendo:


call noteon
   call delay3
   call delay3
   call delay3
   call delay3

   call noteoff

   goto main

   end   

(el codigo completo esta adjunto)
 Saludos!!

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: proyecto trigger to midi, 16f877
« Respuesta #5 en: 15 de Noviembre de 2009, 05:26:15 »
para conseguir algo de sensibilidad al tocar, vas a tener que ingeniartelas, no son solo pulsadores on/off con rutina antirebotes, por eso se usa el cad. ademas no se levanta hasta una tension y vuelve a cero, si no que depende como golpés el parche la onda que saca. vamos lo ideal es eso. usea que primero envia note_on, seguido del valor del aftertouch, y ultimo note_on a cero o note_off con la velocidad de levantado. tiene tela :mrgreen:si no fue pulsado envia note_on, si lo fue aftertouch, y si es cero despues de un note_on, hay que enviar el note_off. te recomiendo usar punteros para saber que paso. en cada registro de pad, ya que el midi solo utiliza los bits 6-0 el 7 siempre esta libre para guardar info
el organigrama podria ser asi:
-configurar perifericos
programa
-seleccion de canal a testear
    -guarda el resultado de cada conversion en un registro de ram diferente para cada pad(usar el registro indf, direccionado por fsr)
         - si es diferente el resultado de la conversion con el dato guardado, envia el dato
         - si es igual continua el programa, no se modifico el canal del cad
-continua testeando canales del cad i
-seleccion de canal a testear
    -guarda el resultado de cada conversion en un registro de ram diferente para cada pad
         - si es diferente el resultado de la conversion con el dato guardado, envia el dato
         - si es igual continua el programa, no se modifico el canal del cad
-asis como canales quieras testear, yo utilizo 8x4051 para conseguir 64 entradas(no para la bateria)
-goto programa, y vuelve a empezar

en esta web explican el protocolo midi 1.0
para verificar los datos que entran u salen del pc tienes midiox

un saludo

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #6 en: 15 de Noviembre de 2009, 21:53:53 »
 He estado estado estudiando la rutina de inicializacion de conversores A/D de suky:

http://www.todopic.com.ar/foros/index.php?topic=27929.0

 pero me parece que esta seteada para solo una entrada analoga, ¿como puedo generar una subrutina para usar el multiplexador y poder recoger las señales de los 4 piezos?, los bits CHS2:CHS0 del registro adcon0 solo permiten seleccionar un canal, por eso creo se debe implementar una rutina para muestrear 4 entradas analogas, eso de momento.

Saludos!!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: proyecto trigger to midi, 16f877
« Respuesta #7 en: 15 de Noviembre de 2009, 22:03:23 »
Primero indicas cuales pines serán analógicos y sus referencias de tensión. Luego al realizar las conversiones seleccionas el canal, esperas 20us, lees el canal; seleccionas otro canal y haces lo mismo. Muéstranos como lo harías y te decimos si fallaste en algo  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #8 en: 16 de Noviembre de 2009, 04:08:29 »
 Ok, ahi esta la rutina para las 4 entradas (adjunto archivo, ojala este buena jajajjajaj), bueno ahora vuelvo a preguntar, servira un clock de 4 MHZ para configurar la usart 31250kb??, se pueden usar los nombres de los registros y sus bits sin declarar equivalencias??, tampoco se que es vdd y vss, osea son tensiones de referencia segun parece, pero no se si serviran para el nivel que entrega un piezo.
 por favor echenle un ojo al archivo.

Saludos!!


Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #9 en: 16 de Noviembre de 2009, 04:33:21 »
 Creo que asi esta mejor, jajjajajajaj, le hice algunos cambios, mejor lo adjunto por que si no usa mucho espacio.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: proyecto trigger to midi, 16f877
« Respuesta #10 en: 17 de Noviembre de 2009, 05:21:31 »
no se si lo veo bien :shock: pero creo que si configuras un canal detras de otro, habra que leer el resultado.
 vdd y vss es como si dijeramos positivo y negativo + y -... usea que si configuras el cad para la tension de ref. del micro= 0-5volt. o asi yo lo entiendo
tienes esta rutina preparada como ejemplo en rutinas para compartir, y otra que calcula la usart con el oscilador que sea, aunque los musicos siempre se quejan de algo llamado latencia, intenta usar 20mhz

esto lo utilizo para leer el valor de potenciometros
incio del programa, se configuran todos los perifericos, entradas, salidas....
 -en micaso sale asi
CONFIG_ADCON1               ;00000000 
      BANKSEL   ADCON1      
      MOVLW   B'00000000'
      MOVWF   ADCON1
 - y antes de cada lectura se configura ADCON0
         MOVLW   CH_AN_0            ;A W yo tengo definido que es CH_AN_0
         CALL   CANAL_AD_X         ;CANALx DEL CAD y asi esta rutina vale para cada canal

- asi cada vez que se cambia de canal se hace una nueva lectura del cad
CANAL_AD_X                        ;SELECCIONA CANAL X DEL CAD NO INICIA LA CONVERSION
   BANKSEL   ADCON0
   MOVWF   ADCON0
   CALL   DEMORA                   ;LA ADQUISICION CORRECTA PARA CARGAR EL CONDENSADOR ANTES DE INICIAR LA CONVERSION 20uS
   BANKSEL   N_POTE
   INCF   N_POTE,F               ;SIGUIENTE POTE
   INCF   FSR,F                  ;CADA VEZ QUE SE LLAMA A LA RUTINA QUE LEE EL
                              ;VALOR DEL POTE, SE INCREMENTA EL REGISTRO FSR, PARA QUE REALICE LAS OPERACIONES
                              ;EN EL REGISTRO DEL SIGUIENTE POTENCIOMETRO
   BANKSEL ADCON0
   BSF      ADCON0,GO               ;INICIA LA CONVERSION
ESPERA_CAD                        ;TESTEA HASTA QUE TERMINA LA CONVERSIÓN
   BTFSC   ADCON0,GO               ;HASTA QUE SE PONE A CERO EL BIT GO/DONE
   GOTO   ESPERA_CAD               ;VUELVE ATRAS HASTA QUE TERMINE
   MOVF   ADRESH,W

   MOVWF   REG_DIVISOR
   CALL   COMPENSACION                                   ;ESTA LO QUE HACE ES DEJAR EL RESULTADO EN 7BITS
   MOVF   REG_DIVISOR,W   
RESTA
   BANKSEL   REG_POTEX
   BCF      STATUS,Z
   SUBWF   INDF,W                                       ;aqui lo compara con el resultado de la anterior lectura, se guarda en un registro diferente para cada entrada
   BTFSC   STATUS,Z
   RETURN
ENVIA_DATOS                        ;BYTE DE STATUS   
   BANKSEL   REG_CHANNEL
   MOVLW   STATUS_CC
CONTINUA_ENVIANDO
   ADDWF   REG_CHANNEL,W            ;SUMA W Y REG_CHANNEL PARA ELEGIR CANAL DE TRANSMISION 0-15
   CALL   ENVIAR_USART
                              ;BYTE Nº DE CONTROLADOR, LEE EL VALOR GUARDADO EN LA EEPROM PARA INDICAR EL Nº DE CONTROLADOR
   CALL   LECTURA_EEPROM_POTES
   CALL   ENVIAR_USART
                              ;BYTE CON EL VALOR DEL CONTROLADOR, POSICION DEL POTENCIOMETRO
   BANKSEL   REG_DIVISOR
   MOVF   REG_DIVISOR,W            ;ESTA COMO SE QUEDO DESPUES DE HABERLO COMPENSADO
   CALL   ENVIAR_USART
                              ;SE GUARDA EL NUEVO VALOR EN EL REGISTRO QUE CORRESPONDE A CADA POTENCIOMETRO
   BANKSEL   REG_DIVISOR
   MOVF   REG_DIVISOR,W
   BANKSEL   REG_POTEX
   MOVWF   INDF                  ;GUARDA EN INDF EL ULTIMO VALOR DEL CAD, CADA VEZ QUE SE LLAMA A LA RUTINA QUE LEE EL
                              ;VALOR DEL POTE, SE INCREMENTA EL REGISTRO FSR PARA QUE REALICE LAS OPERACIONES
                              ;EN EL REGISTRO DEL SIGUIENTE POTENCIOMETRO
   CALL   ENVIAR_POSICION                                ;muestra el valor de W en los diplays
   RETURN

mira que ya tienes el orden de como se envian los datos para activar un note on, solo tienes que definir el valor de status_cc

un saludo

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #11 en: 17 de Noviembre de 2009, 06:41:45 »
 Miren, lo que necesito realizar es algo muy parecido a esto:

http://www.embedds.com/beatsneaks-the-coolest-and-stylish-midi-drum-shoes/

 creo que el tipo de sensores utilizado en el video no son piezos pero esa es la idea, comunicar los sensores instalados en el calzado mediante el pic con el pc, por eso no necesito after touch, solo una nota midi de velocity proporcional a la presion ejercida por el pie, quizas nisiquiera necesito utilizar mas de un canal midi solo  setear notas midi diferentes para cada entrada analoga.


gracias por la rutina, la voy a estudiar

 Saludos!!


Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: proyecto trigger to midi, 16f877
« Respuesta #12 en: 17 de Noviembre de 2009, 07:50:52 »
creo que para eso puedes probar dos plantillas con cobre( punta, tacon) usea 8 laminas para usarlas de interruptor, separadas lo justo para al taconear, se toquen unas con otras, y contando el numero de rebotes en x tiempo se mide la presion. mas menos asi lo estoy haciendo para un teclado, claro no hay zapatos de por medio :mrgreen: a mas rebotes menos presion a menos rebotes mas fuerte. es a la inversa. de esta forma evitas el cad, realmente lento para este tipo de aplicaciones

un saludo

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #13 en: 17 de Noviembre de 2009, 16:50:17 »
 La verdad no entendi la idea, ¿es usar un tipo de sensor casero? ¿algo como esto?:

http://www.elektronika.ba/600/pressure-sensor-cheap-and-homemade/

 bueno este es mi proyecto de titulo, y por lo que hemos investigado, los piezos nos parecieron la mejor opcion por su respuesta impulsiva, que proporciona la sincronia necesaria y por que despues de pasar el impulso por una etapa rectificadora analoga, esta queda como se muestra en la foto adjunta, me parece ideal para entrar al pic.
 sin embargo como las entradas analogas estan multiplexadas quizas se genere latencia por tener que leer un canal analogo por vez, aunque no se cuanta ni si sera un problema.

 Saludos!!

Desconectado elgarou

  • PIC10
  • *
  • Mensajes: 12
Re: proyecto trigger to midi, 16f877
« Respuesta #14 en: 11 de Diciembre de 2009, 04:20:33 »
hola, ha pasado tiempo, bueno el posteo el codigo k he hecho, me ha surgido un problema con la transmicion via usart, testeando el codigo en el pic simulator ide, observo k el registro TXREG no se carga y que el bucle de testeo del bit TRMT se demora demasiado, la verdad he buscado el problema bastante, he borrado la rutina de envio a la usart para ver si asi se carga el registro TXREG y asi si se carga, pero cuando incluyo esta rutina en cualquier parte del programa sucede lo que explique, bueno espero que puedan ayudarme, gracias de antemano.






 list      p=16f877            ; list directive to define processor
   #include <p16f877.inc>        ; processor specific variable definitions
   
   __CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _DEBUG_OFF & _CPD_OFF
      ; NOTA:
      ; Oscilador utilizado 4MHz.--------> servira para setear la usart a 31,250 Kbd??
      ; ************************************************
velocity equ 0x20 ; Registro para guardar Byte alto de la conversion.-
velocity1 equ 0x21
velocity2 equ 0x22
velocity3 equ 0x23
velocity_0 equ 0x24 ; velocity seteada a 0000 0000, equivale a un note off
contador equ 0x25 ; Registro utilizado en demora.-
canal_on equ 0x26 ; mensaje midi de sistema, note on, toma los los valores de canal 2,3,4,5 (ej: note on canal 5 = 1001 0100)
canal_off equ 0x27
nota equ 0x28
vel_max equ 0x29
 
      ; ************************************************
     ORG     0x00             
     goto    Inicio             

     
     


;----------------------------------------------------------------------
     
       ;***Envio_usart***
Envio_usart
      bsf STATUS,5
X     btfss TXSTA,1     
      goto  X
      bcf STATUS,5
      return

Inicio

     ;seteo usart

 bsf     STATUS,RP0     
           movlw   b'10001000'   
           movwf   TRISC      
           movlw   01h             
           movwf   SPBRG
           movlw   b'00100000'     
           movwf   TXSTA
           bcf     STATUS,RP0             
           movlw   b'10010000'     
           movwf   RCSTA
     
Main
ADC
      bsf STATUS,5
      movlw 0XFF
      movwf TRISA
      bsf STATUS,5
      movlw 0x02 ; Justificado a la izquierda, Fosc/8, RA0_RA1_RA2_RA3_RA5 analógico, VDD, VSS.
      movwf ADCON1
      bcf STATUS,5 ; Banco 0
      movlw 0x45 ; Fosc/8, Canal 0, módulo habilitado.-
      movwf ADCON0
      call Demora_20us
      movwf velocity
      movlw 0x4D ; Fosc/8, Canal 1, módulo habilitado.-
      movwf ADCON0
      call Demora_20us
      movwf velocity1
      movlw 0x55 ; Fosc/8, Canal 2, módulo habilitado.-           
      movwf ADCON0
      call Demora_20us
      movwf velocity2
      movlw 0x5D ; Fosc/8, Canal 3, módulo habilitado.-
      movwf ADCON0
      call Demora_20us
      movwf velocity3
      goto Comparar
 

   


Demora_20us
      bcf STATUS,5
      movlw 0x05  ; CONTADORES
      movwf contador ; Iniciamos contador.-
Repeticion
      decfsz contador ; Decrementa Contador1.-
      goto Repeticion ; Si no es cero repetimos ciclo.-
Espera
      btfsc ADCON0,GO ; Espera a que termine conversion.-
      goto Espera
      movf ADRESH,W ;----------------> REVISAR ASUNTO MSB LSB
      return

Comparar
      bcf STATUS,5
      movlw 0x91 ; canal 2 ; inicio canal (note on)
      movwf canal_on
      movlw 0x81 ; canal 2 ; inicio canal (note off)
      movwf canal_off     
      movlw 0x01 ; nota 1, inicio nota
      movwf nota
      movlw 0x00
      movwf velocity_0 ; inicio velocity = 0, equivalente a note off
      movlw 0x7F
      movwf vel_max
                     
       
       clrw
ch2   
       bcf STATUS,5 
       iorwf velocity,F
       btfsc STATUS,Z ; si velocity diferente de 0, salta y envia el dato
       goto ch3
       movf canal_on,w
       movwf TXREG
       call Envio_usart
       movf nota,w
       movwf TXREG
       call Envio_usart
       bcf velocity,7               
       movf velocity,w
       movwf TXREG
       call Envio_usart
       movf canal_off,w
       movwf TXREG
       call Envio_usart
       movf nota,w
       movwf TXREG
       call Envio_usart
       movf velocity_0,w
       movwf TXREG
       call Envio_usart
       clrw ; deja en 0 a W
ch3
 incf canal_on ; canal 3,4,5
 incf canal_off ; canal 3,4,5
       iorwf velocity1,F ; testea siguiente registro de velocity, linea xxx
       btfsc STATUS,Z
       goto ch4
       movf canal_on,w
       movwf TXREG
       call Envio_usart
       movf nota,w
       movwf TXREG
       call Envio_usart
      bcf velocity1,7
       movf velocity1,w
       movwf TXREG
       call Envio_usart
        movf canal_off,w
       movwf TXREG
      call Envio_usart
      movf nota,w
      movwf TXREG
      call Envio_usart
      movf velocity_0,w
      movwf TXREG
      call Envio_usart
      clrw ; deja en 0 a W
ch4
 incf canal_on ; canal 3,4,5
 incf canal_off ; canal 3,4,5
       iorwf velocity2,F
       btfsc STATUS,Z
        goto ch5
       movf canal_on,w
       movwf TXREG
      call Envio_usart
      movf nota,w
      movwf TXREG
      call Envio_usart
      bcf velocity2,7
      movf velocity2,w
      movwf TXREG
      call Envio_usart
       movf canal_off,w
      movwf TXREG
      call Envio_usart
      movf nota,w
      movwf TXREG
      call Envio_usart
      movf velocity_0,w
      movwf TXREG
      call Envio_usart
      clrw ; deja en 0 a W
ch5
 incf canal_on ; canal 3,4,5
 incf canal_off ; canal 3,4,5
       iorwf velocity3,F
       btfsc STATUS,Z
      goto Main
     movf canal_on,w
     movwf TXREG
      call Envio_usart
      movf nota,w
      movwf TXREG
      call Envio_usart
      incf canal_on ; canal 3,4,5
      bcf velocity3,7
      movf velocity3,w
      movwf TXREG
      call Envio_usart
     movf canal_off,w
     movwf TXREG
      call Envio_usart
      movf nota,w
    movwf TXREG
      call Envio_usart
      movf velocity_0,w
    movwf TXREG
      call Envio_usart
       goto Main

      end




 

anything