; Programa: Comunicación asíncrona a PC vía RS232 ; Autor: Danilo García ; Fecha: Mayo de 1999 ; El programa recibe un byte por el pin RX ; para luego enviarlo por el pin TX. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; ; Parámetros de comunicación RS232: 9600,N,8,1 ; ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ list p=16f84 #include; ;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