hola soy nuevo en esto de los pics y en la programacion en asm y tengo q hacer una comunicacion uart con un pic 12f683 y no consigo realizarla. creo q mi fallo esta en q no consigo sincronizar la velocidad de transmision. a estoy haciendo la sincronizacion por el hyper terminal por rs232 y un max232.
me he basado en este programa encontrado en todopic para hacer la comunicacion pero tengo unas dudas tambien del programa de donde sa sacan estos valores
TIME
MOVLW 1
MOVWF RET1
T3
MOVLW .28------------------------> de donde sale este valor
MOVWF RET2
el del TIME2 es la mitad de este
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
list p=16f84
#include <p16f84.inc>
;
;PALABRA DE CONFIGURACIÓN:
;
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;
;===========================================================================
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
TRUE EQU 1
FALSE EQU 0
;===========================================================================
;DEFINICION DE BITS:
;
#DEFINE RX PORTB,0
#DEFINE TX PORTB,1
;
;===========================================================================
;DEFINICION DE VARIBLES
;
DATO EQU 0x0C ;Dato a Transmitir o Recibido RS232
RET1 EQU 0x0D ;para retardo de bit RS232
RET2 EQU 0x0E ;para retardo de bit RS232
CONT8 EQU 0x0F ;Contador de bits en rutinas RX y TX
;===========================================================================
ORG 0
GOTO INICIO
;===========================================================================
ORG 4
INTERRUPCION
BTFSS INTCON,INTF ;COMPROBACIÓN DE INTERRUPCION INT
RETFIE
;
CALL RXDATO
XORLW TRUE
BZ TX_DATO
BCF INTCON,INTF ;BORRA BANDERA INT
RETFIE
TX_DATO
CALL TXDATO
BCF INTCON,INTF ;BORRA BANDERA INT
RETFIE
;***************************************************************************
;********** RUTINAS DE COMUNICACION ASINCRONA *******************
;***************************************************************************
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BTFSS RX
GOTO RXBYTE
RETLW FALSE
RXBYTE
CALL TIME2
MOVLW 8
MOVWF CONT8
BIT CALL TIME
RRF DATO,F
BCF DATO,7
BTFSC RX
BSF DATO,7
DECFSZ CONT8,F
GOTO BIT
CALL TIME2
RETLW TRUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 8
MOVWF CONT8
BCF TX
BIT2
CALL TIME
RRF DATO,F
BTFSS STATUS,C
BCF TX
BTFSC STATUS,C
BSF TX
DECON
DECFSZ CONT8,F
GOTO BIT2
CALL TIME
BSF TX
CALL TIME
RETURN
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME2 ;RETARDO DE 52 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 1
MOVWF RET1
T1
MOVLW .14
MOVWF RET2
T2
DECFSZ RET2,F
GOTO T2
DECFSZ RET1,F
GOTO T1
NOP
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME ;104 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVLW 1
MOVWF RET1
T3
MOVLW .28
MOVWF RET2
T4
DECFSZ RET2,F
GOTO T4
DECFSZ RET1
GOTO T3
NOP
NOP
RETURN
;***************************************************************************
INICIO
;
;PROGRAMACION DE LOS PUERTOS
BANK1
BCF TX ;PROGRAMA PIN TX COMO SALIDA
BCF OPTION_REG,INTEDG ;PROGRAMA INT CON FLANCO DE BAJADA
BANK0
;
;PROGRAMACION DE LA INTERRUPCION INT(RB0)
;
BSF INTCON,INTE ;HABILITA INTERRUPCIÓN INT
BSF INTCON,GIE ;HABILITA INTERRUPCIONES GLOBALMENTE
;
;ESPERA LA INTERRUPCION
GOTO $
;
END
bueno si me pudierais ayudar estaria muy agradecido o decirme otra manera para
sicronizar la velocidad utilizando los timers me dierais algun ejemplo os estria muy agradecido. un saludo y gracias