Banner publicitario de PCBWay

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

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