PIC16F628A y comunicación RS-232 (Para simular Bluetooth)

Buenas tardes. Quisiera ayuda.
Mi trabajo si se conecta, pero el problema es el envío de datos.
Cree una aplicación en App Inventor para que me envíe el dato, pero no se conecta.

Gracias por la ayuda.
Debes adjuntar lo que has hecho, recuerda que no somos adivinos.
 
Debes adjuntar lo que has hecho, recuerda que no somos adivinos.

Una disculpa. Bueno, mi código es este:
PHP:
list p= 16F628A ;listo el micros a utilizar
#include P16F628A.inc; incluye la libreria del pic
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF;configuracion de la palabra del pic con seguridar timers
  
CBLOCK 0X20
NUM1, NUM2, NUM3, DATO ;declaración de registros
ENDC

ORG 0X00 ;declaro el origen del programa en la dirección de reset
GOTO INICIO ;voy al inicio real del programa
ORG 0X04 ;declaro el vector de interrupción

;******************C O D I G O D E I N T E R R U P C I O N************************************
MOVF RCREG,W
MOVWF TXREG
MOVWF DATO
BCF PIR1,RCIF
RETFIE
;*****************************************************************************************
;******************C O N F I G U R A C I O N D E P U E R T O S********************************
INICIO: BSF STATUS,RP0 ;CAMBIO A BANCO 1

BCF TRISB,3 ;CONFIGURO PORTB,3 Y PORTB,4 COMO SALIDA
BCF TRISB,4 ;PARA LOS LEDS INDICADORES

BSF TRISB,1 ;CONFIGURO PORTB,1 Y PORTB,2 PARA QUE
BSF TRISB,2 ;FUNCIONE EL MODULO USART

BCF STATUS,RP0 ;CAMBIO A BANCO 0

CALL USARTINI ;LLAMO A LA SUBRUTINA QUE CONFIGURA
;AL MODULO USART

START: MOVF DATO,W ;COLOCO EL CONTENIDO DEL REGISTRO
SUBLW "49" ;DATO EN W Y LO COMPARO CON UNA
BTFSS STATUS,Z ;LITERAL
GOTO NEXT ;SI NO ES IGUAL, VA A LA SIGUIENTE PREGUNTA
bsf PORTB,4 ;SI ES IGUAL, ENCIENDO PORTB,4
CLRF DATO ;BORRO EL CONTENIDO DEL REGISTRO
GOTO START ;Y REGRESO AL INICIO DEL CODIGO


NEXT: MOVF DATO,W ;COLOCO EL CONTENIDO DEL REGISTRO
SUBLW "50" ;DATO EN W Y LO COMPARO CON UNA
BTFSS STATUS,Z ;LITERAL
GOTO NEXT1 ;SI NO ES IGUAL, VA A LA SIGUIENTE PREGUNTA
bsf PORTB,3 ;SI ES IGUAL, ENCIENDO PORTB,3
CLRF DATO ;BORRO EL CONTENIDO DEL REGISTRO
GOTO START ;Y REGRESO AL INICIO DEL CODIGO




NEXT1: MOVF DATO,W ;COLOCO EL CONTENIDO DEL REGISTRO
SUBLW "51" ;DATO EN W Y LO COMPARO CON UNA
BTFSS STATUS,Z ;LITERAL
GOTO START ;SI NO ES IGUAL, REGRESA A START
CLRF PORTB ;SI ES IGUAL, BORRA TODO PORTB
CLRF DATO ;BORRO EL CONTENIDO DEL REGISTRO
GOTO START ;Y REGRESO AL INICIO DEL CODIGO

;*****************************************************************************************

;*************C O D I G O D E I N I C I A L I Z A C I O N D E L A U S A R T********************
USARTINI: BSF STATUS,RP0
MOVLW 0X24
MOVWF TXSTA
MOVLW D'25'
MOVWF SPBRG
BSF PIE1,RCIE
MOVLW 0XC0
MOVWF INTCON
BCF STATUS,RP0 ;BANCO 0
MOVLW 0X90
MOVWF RCSTA
RETURN
;*****************************************************************************************

END
Y la aplicación está así a parte en bloques que se muestran, pero no logro enviar el dato.
 

Adjuntos

  • 1.PNG
    1.PNG
    41.1 KB · Visitas: 17
Última edición por un moderador:
En la aplicación estas enviando texto, no estoy seguro pero creo que cuando lo haces de esa manera estas enviando además un retorno de carro y un salto de linea, intenta a sólo enviar un byte con send1bytenumber, ahí en el programa en asm lo comparas directo
 
Así como está el código está bien para recibir los números 1, 2 y 3 como texto.
No importa que se mande un salto de línea y retorno de carro al final, ya que serán omitidos.
El programa está recibiendo el primer byte que llega y posteriormente se compara, el resto se descarta.

El único problema que veo, es que el bit 4 (RB4) no va a funcionar cómo salida, porque el fuse LVP no está configurado, quedando activo por defecto. (LVP_ON)
Quita el fuse CP_OFF, que por defecto es inactivo, y en su lugar coloca: LVP_OFF

Y una pregunta. ¿A qué velocidad piensas que funcione el módulo USART?
 
Así como está el código está bien para recibir los números 1, 2 y 3 como texto.
No importa que se mande un salto de línea y retorno de carro al final, ya que serán omitidos.
El programa está recibiendo el primer byte que llega y posteriormente se compara, el resto se descarta.

El único problema que veo, es que el bit 4 (RB4) no va a funcionar cómo salida, porque el fuse LVP no está configurado, quedando activo por defecto. (LVP_ON)
Quita el fuse CP_OFF, que por defecto es inactivo, y en su lugar coloca: LVP_OFF

Y una pregunta. ¿A qué velocidad piensas que funcione el módulo USART?

Gracias x la respuesta voy a uSar un cristal x 4mhz
 
Puede ser que tengas algo mal conectado, o mal configurado el módulo Bluetooth.
Revisa tus conexiones, la configuración del módulo y usa esta configuración en el programa del PIC:
PHP:
; Configuración USART: (9600 Bps @ 4MHz. 9615 Bps Reales 0.16% de error.)
    bsf        STATUS,RP0    ; Seleccionar el Banco 1
    movlw    0x19
    movwf    SPBRG
    movlw    0x24
    movwf    TXSTA
    bcf        STATUS,RP0    ; Seleccionar el Banco 0
    movlw    0x90
    movwf    RCSTA
 
Atrás
Arriba