Comunicacion bluetooth, android y pic16f877a

Saludos.
El motivo para este, es que he leído mucho acerca de que el pic puede emplearse en modo USART,
el cual nos permite hacer la comunicación en forma serie, estoy empezando a programar por primera vez el usart,
y he investigado acerca de este y sé que el pic16f877a nos puede ayudar con el usart.
Sin embargo yo solo he programado en C, con lo que he programado cosas sencillas como la siguiente:

Código:
DECLARE HSERIAL_BAUD = 9600   'SETEAMOS LA VELOCIDAD DE LA COMUNICACIÓN
   DECLARE HSERIAL_CLEAR = ON    'LIMPIAMOS EL BUFFER DESPUÉS DE RECIBIR
   
   '**************************************************************************

   DIM LED AS BYTE               'DECLARO UNA VARIABLE PARA EL LED
   DIM A AS WORD                 'DECLARO UNA VARIABLE PARA EL CONTADOR
   
   CLEAR                         'LIMPIO LA RAM AL INICIAR

   DELAYMS 100                   'RETARDO PARA ESTABILIZAR ALIMENTACIÓN
   LOW PORTB.0                   'INICIAMOS CON EL LED APAGADO  

   Lazo:                         'INICIO EL LAZO DE PROGRAMA
    
    IF PORTB.1 = 0 THEN          'SI EL PIN 1 DELPUERTO B ESTÁ BAJO
        HSEROUT ["A"]            'TRANSMITO LA INFORMACIÓN (PULSADOR 1)
    ELSEIF PORTB.2 = 0 THEN      'SI EL PIN 2 DELPUERTO B ESTÁ BAJO
        HSEROUT ["B"]            'TRANSMITO LA INFORMACIÓN (PULSADOR 2)
    END IF                       'CIERRO LA CONDICIÓN
    
    ESPERO:                          'ENCLAVE DE ESPERA
    DELAYMS 1                        'DEMORA
    IF PORTB.1 = 0 THEN GOTO ESPERO  'SI NO SUELTO EL BOTÓN ME QUEDO
    IF PORTB.2 = 0 THEN GOTO ESPERO  'SI NO SUELTO EL BOTÓN ME QUEDO

    HSERIN 50,Lazo,[DEC LED]     'CONTROLO SI ME LLEGA LA INSTRUCCIÓN
                                 'DESDE EL MÓDULO BLUETOOTH SINO, SALTO
                                 'A SEGUIR ESPERANDO
    IF LED = 100 THEN            'SI ME LLEGA UN 100
        HIGH PORTB.0             'ENCIENDO EL LED
    ELSEIF LED = 200 THEN        'SI ME LLEGA UN 200
        LOW PORTB.0              'LO MANDO A APAGAR
    ENDIF                        'CIERRO LA CONDICIÓN

   GOTO Lazo                     'CIERO EL LAZO DE PROGRAMA
Este programa testea dos push botons, si alguno de los dos se prende envía la letra A o la letra B por usart,
y si a Rx le llega un 100 prende el Led, si le llega un 200 apaga el led.

El punto es que quisiera saber si este programa entra en el pic16f877a, ya que este programa se probó en el 18F25K20 ?

¿Ahora quisiera saber si solamente con enviar directamente la A y la B, el modulo bluetooth las recibirá?

Así mismo también la indicación de la practica me dice que el programa lo pase a ensamblador,
yo nunca he programado en ensamblador, por lo que un amigo de la escuela me mostró el siguiente código,
el cual lee los datos del receptor y los muestra en un modulo de leds.
Así mismo lee los datos que hay en en el puerto y los envía.

Lo que quisiera saber es si con hacer los siguientes cambios en la parte de recepción, ya que como se muestra en el código en C, necesito decidir entre dos casos, el 100 y el 200, entonces seria el siguiente cambio:

teniendo esto
movf portb,w
movwf txreg

pasarlo por lo siguiente

movf portb, w
movwf auxiliar

call prueba200
call prueba 100.

TRANS BSF STATUS,RP0
BTFSS TXSTA,TRMT
goto $-1
bcf STATUS,RP0
BCF PIR1,TXIF
CLRF PORTD
GOTO PRINCIPAL
END

prueba200 movlw .200
subwf auxiliar
btfss auxiliar,4
RETURN
GOTO TRANS

prueba200 movlw .100
subwf auxiliar
btfss auxiliar,3
RETURN
GOTO TRANS

Así mismo como soy nuevo programando en ensamblador, quisiera saber si sacar así y conectar directamente con un cable el transmisor del pic con el receptor del bluetooth , y lo mismo con con el receptor del pic con el transmisor del bluetooth me dará los datos así directamente.
Así mismo quisiera que de favor alguien me explicara los siguientes registros que vienen en el programa:

¿Para que mover este valor a config?
__config 0x3F71

¿Para qué sirve (Servicio de interrupción)?
Código:
BTFSS  PIR1,RCIF   ( que es PIR1, Y RCIF) COMO TESTEA?
GOTO   $-1
MOVF   RCREG,W     (QUE USO TIENE RCREG?)
MOVWF  RECIBIDO

BCF   PIR1,RCIF      ( 
BTFSS  PORTC,0   ...(TESTEA SI SE APRETO EL BOTON??)

RETFIE
(INICIO USART)
Código:
MOVLW   .25
MOVWF    SPBRG   (POR QUE .25 PARA 9600 BAUDIOS)
MOVWF  TRISC 
MOVLW   24
MOVWF   TXSTA   (QUE ES TXSTA Y XQ 24)


BCF   PIE1,TXIE   (QUE  SON ESTOS REGISTROS)
BSF   PIE1,RCIE

MOVWF  RCSTA   (XQ SE MUEVE 90 Y QUE ES RCSTA)


movf  portb,w
 movwf   txreg
(Transmisión de datos)

BTFSS TXSTA,TRMT (QUE TESTEA ,QUE ES TRMT?)

BCF PIR1,TXIF (QUE REGISTROS SON?)

Les anexo el código completo, así como la imagen de bloques que se usará para armar este proyecto en android.
Y finalmente me gustaría saber como probar esto en proteus, ya que me han dicho que existen terminales virtuales que simulan puerto serial.

En temas anteriores usaban MAX32 para comunicar con DB9, en mi caso es el Bluetooth con un android
¿Si funciona igual? De antemano gracias y espero no sea mucho!

Nota. Se usará el módulo Bluetooth HC-06
 

Adjuntos

  • CODIGO.pdf
    244.3 KB · Visitas: 37
  • F2DE_1024_56336.jpg
    F2DE_1024_56336.jpg
    296.1 KB · Visitas: 49
Última edición por un moderador:
Atrás
Arriba