TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: MarioA en 20 de Noviembre de 2013, 19:36:33
-
Hola amigos, tengo un problema, quisiera comunicar un pic16f873a con una pc imprimiendo lo que capture en el portb luego lo paso al txreg para enviarlo seguido de un par de letras,pero solo se mandan las letras más no lo del portb. Aqui les dejo mi código talvez ustedes puedan ver cual es el error:
LIST P=PIC16F873A
INCLUDE <P16F873A.INC>
__CONFIG 3F3A
RADIX HEX
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
PDel0 EQU 22
PDel1 EQU 23
VAR EQU 24
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
RESET ORG 0
GOTO INICIO
ORG 5
;--------------------------------------------------------------------------------------------------------------------
;--------------------------------------INICIO DE PROGRAMA-----------------------------------------------
;--------------------------------------------------------------------------------------------------------------------
INICIO
BANK1 ;BANCO 1
MOVLW b'11111111'
MOVWF TRISB
MOVLW b'10000000'
MOVWF TRISC
MOVLW 0x06
MOVWF ADCON1
MOVLW b'11111111'
MOVWF TRISA
;--------------------------------------------------------------------------------------------------------------------
;CONFIGURA RS232
;--------------------------------------------------------------------------------------------------------------------
MOVLW b'00100000' ;Configuracion USART (8 Bits de transmision)
MOVWF TXSTA
MOVLW .129 ;19600 baudios (.64) A 20MHz de frecuencia del pic
MOVWF SPBRG ;habilita la transmision y tbm el modo asincrono high speed (20MHz)
BANK0 ;BANCO 0
BSF RCSTA,SPEN ;Serial Activado
BANK1 ;BANCO 1
BSF TXSTA,TXEN ;Habilita la transmision
BANK0 ;BANCO 0
BSF RCSTA,SPEN ;Volvemos a activar la transmision
BSF RCSTA,CREN ;Configuramos la recepcion continua
movlw b'10010000' ;Configuracion de la usart
movwf RCSTA
CLRF PORTB ;Limpiamos puertoB
CLRF PORTC ;Limpiamos puertoC
CLRF PORTA ;Limpiamos puertoA
;-----------------------------------------------------------
; Inicio de programa
;-----------------------------------------------------------
PRO_PRINCIPAL
BSF RCSTA,SPEN ;Volvemos a activar la transmision
CALL COD_DIGITAL
MOVF PORTB,W
CALL ENVIA_TX
CALL COD_ANALOGIC
CALL COD_ANALOGIC1
CLRW
; MOVWF PORTC
; MOVF PORTC,W
GOTO PRO_PRINCIPAL
COD_DIGITAL
MOVLW 'N'
CALL ENVIA_TX
MOVLW 'D'
CALL ENVIA_TX
NOP
RETURN
COD_ANALOGIC
MOVLW 'N'
CALL ENVIA_TX
MOVLW 'A'
CALL ENVIA_TX
NOP
RETURN
COD_ANALOGIC1
MOVLW 'N'
CALL ENVIA_TX
MOVLW 'a'
CALL ENVIA_TX
NOP
RETURN
ENVIA_TX
BCF PIR1,TXIF
MOVWF TXREG ;Cargamos a TXREG con el valor de W
BANK1 ;Cambiamos al banco1
COMP_ENVIA
BTFSS TXSTA,TRMT ;Preguntamos si termino la transmision
GOTO COMP_ENVIA ;Volvemos a preguntar
BANK0 ;Regresamos al banco0
RETURN ;Retornamos
END
-
Hola Mario,
No quiero descartar que el problema sea otro, pero estás teniendo en cuenta que el valor del PORTB puede no ser visible como caracter gráfico? No sé con qué soft estás monitoreando la trama recibida, pero hay muchos valores que el PORTB puede adquirir, y sin embargo al no tener caracter imprimible en pantalla, no se muestra en absoluto y puede llegar a hacerte creer que no se ha enviado, pese a que sí lo ha hecho.