Hola a todos, vengo con un nuevo problema, me estoy metiendo en el tema del rs232, he leido bastante ya y puedo decir que comprendo mas o menos el asunto. Estoy haciendo un pequeño programa con un 16F876A y pues decidí ir probado el modulo USART de una vez, este es el codigo hasta ahora:
Es algo sencillo y solo pretendo chequear en el proteus si en realidad va a funcionar, pues en la terminal virtual del proteus deberia recibir las secuencias ABABABABAB..... pero no recibo nada. Ademas la pata RC6 (tx) en el proteus se colora gris, creo que significa que está desconectado??
Como pueden ver en la imagen en el proteus tengo conectado un COMPIM ya que estaba probando con los puertos virtuales, logre transmitir desde el hyperterminal (siow) hacia la terminal virtual del proteus pero no desde el pic hacia afuera ni hacia la propia terminal del proteus. Alguna ayuda??
Código:
LIST P=16F876A
RADIX HEX
#INCLUDE <P16F876A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _LVP_OFF& _DEBUG_ON & _CPD_OFF
CBLOCK 0X20
RET_A
RET_B
RET_C
ENDC
RESET ORG 0X00
GOTO INICIO
;ORG 0X04
;GOTO ISR
ORG 0X05
;-------------INICIALIZACIONES------------------
INICIO BSF STATUS,RP0 ;PASO AL BANK1
MOVLW 0X1F ;00011111
MOVWF TRISA ;PTO A TENDRÁ 4 ENTRADAS ANALOGICAS Y RA4 DIGITAL
MOVLW 0X1F ;00011111
MOVWF TRISB ;PTOB TENDRÁ 5 ENTRADAS
MOVLW 0XC0 ;11000000
MOVWF TRISC ;ENABLE TX,RX EN USART/ASYNC.
MOVLW 0X68 ;CONFIGURO EL OPTION_REG PARA 000 PRESCALER
MOVWF OPTION_REG ;ASIGNADO AL WDT Y TOCS EN RA4
MOVLW 0XA0 ;INTERRUPCIONES HABILITADAS SOLAMENTE
MOVWF INTCON ;PARA EL TMR0
CLRF PIE1 ;NO INTERRUPCIONES
CLRF PIE2 ;NO INTERRUPCIONES
MOVLW 0X24 ;CONFIGURACION DEL REGISTRO DE TX USART
MOVWF TXSTA ;HIGH SPEED, ASYNC, ENABLE, 8 BIT
MOVLW 0X8D ;CONFIGURACION DEL REGISTRO DE CONTROL DEL ADC
MOVWF ADCON1 ;A/A/VREF-/VREF+/D Y RIGHT JUSTIFIED
MOVLW 0X67 ;DECIMAL 103 PARA ESTABLECER
MOVWF SPBRG ;9600 BAUDIOS CON 0.16% DE ERROR A 16 MHz
BCF STATUS,RP0 ;PASO AL BANK0
MOVLW 0X90 ;CONFIGURACION DEL REGISTRO DE RX USART
MOVLW RCSTA ;NO ADD, CONTINUOS, 8 BIT, ENABLE
MOVLW 0X80 ;CONFIGURACION DEL REGISTRO DE CONTROL DEL ADC
MOVWF ADCON0 ;POWER DOWN, CH000, TAD=(1/32)*FOSC
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PIR1
CLRF PIR2
;------------FIN DE LAS INICIALIZACIONES-----------
;------------COMIENZO DEL PROGRAMA-----------------
;PRIMERO UN RETARDO DE 20mS PARA ASEGURAR QUE TODOS LOS COMPONENTES
;ESTEN CARGADOS (EN EL CASO DE LOS CAPACITORES) Y LISTOS !!
CALL RETARDO_20MS
;AHORA TRASNMITO UN CARACTER DUMMY PARA VERIFICAR
;LA CONECTIVIDAD ENTRE EL MODULO USART Y LA PC
MOVF RCREG,W ;ESTO ES PARA GARANTIZAR
MOVF RCREG,W ;EL CORRECTO FUNCIONAMIENTO
MOVF RCREG,W ;DEL MODULO USART (FLUSHING THE FIFO)
ENVIAR
MOVLW 'A' ;ENVIAR UN CARACTER (CUALQUIERA)
MOVWF TXREG ;PONE EL TXIF EN ALTO PARA FUTURAS TX'S
NOP ;ESTO LO RECOMIENDA MICROCHIP
BTFSS PIR1,TXIF
GOTO $-1
MOVLW 'B'
MOVWF TXREG
NOP
BTFSS PIR1,TXIF
GOTO $-1
CALL RETARDO_20MS
GOTO ENVIAR
;-------------RETARDOS--------------
RETARDO_20US MOVLW 0X05
GOTO RETARDO_US
RETARDO_50US MOVLW 0X10
GOTO RETARDO_US
RETARDO_200US MOVLW 0X41
GOTO RETARDO_US
RETARDO_2MS MOVLW 0X02
GOTO RETARDO_MS
RETARDO_5MS MOVLW 0X05
GOTO RETARDO_MS
RETARDO_20MS MOVLW 0X14
GOTO RETARDO_MS
RETARDO_10SEG MOVLW 0X0A
GOTO RETARDO_L
RETARDO_US MOVWF RET_A
BUCLE0 DECFSZ RET_A
GOTO BUCLE0
RETURN
RETARDO_L MOVWF RET_C
CONT_RET MOVLW 0XFA
CALL RETARDO_MS
DECFSZ RET_C
GOTO CONT_RET
RETURN
RETARDO_MS MOVWF RET_A ;C+2A+AB+(B-1)*A+2A+(B-1)*2A+(A-1)*3 = X
BUCLE MOVLW 0XF9 ;C+4A+4AB+3A-3A = X
MOVWF RET_B ;C+4A+4AB = X
BUCLE1 NOP ;4A(1+B) = X-C
DECFSZ RET_B ;A = (X-C)/4(1+B)
GOTO BUCLE1 ;PARA B=249, A={2,5,20}
DECFSZ RET_A
GOTO BUCLE
RETURN
END ;FIN
Es algo sencillo y solo pretendo chequear en el proteus si en realidad va a funcionar, pues en la terminal virtual del proteus deberia recibir las secuencias ABABABABAB..... pero no recibo nada. Ademas la pata RC6 (tx) en el proteus se colora gris, creo que significa que está desconectado??
Como pueden ver en la imagen en el proteus tengo conectado un COMPIM ya que estaba probando con los puertos virtuales, logre transmitir desde el hyperterminal (siow) hacia la terminal virtual del proteus pero no desde el pic hacia afuera ni hacia la propia terminal del proteus. Alguna ayuda??