Rx/Tx Serial Con Pic16F877A
INCLUDE "P16F877A.INC"
_CONFIG_CP_OFF&_DEBUG_OFF&_WRT_ENABLE_ON&_CPD_OFF&_LVP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
Cblock 20
tmp0
tmp1
Endc
ORG 00h
GOTO CONFIGU
ORG 04h
GOTO INTER
;Primera instrucción programa principal, configuracón de los puertos y registros a utilizar para la comunicación serial.CONFIGU
BSF STATUS,5 ;Paso al banco 1 para configurar los puertos
MOVLW B'10001110'
MOVWF ADCON1 ;Se utilizaran E/S digitales
CLRF TRISA ;Limpio el puerto, Puerto A como salida
CLRF TRISB ;Limpio el puerto, Puerto B como salida
MOVLW B'10000000' ;Habilita el puerto serie configuración RC7/RX y RC6/TXutilizados para el USART
MOVWF TRISC ;Puerto C como salida
CLRF TRISD ;Limpio el puerto, Puerto D como salida
CLRF TRISE ;Limpio el puerto, Puerto E como salida
MOVLW B'00100100' ;Valor a cargar en el registro TXSTA donde se activa el USART
MOVWF TXSTA
MOVLW .25 ;Se carga .25 en w para XT 4MhzMOVWF SPBRG ;Se carga el valor en el registro SPBRG para trabajar a 9600 baudios
BSF PIE1,RCIE ;Habilita la Interrupción por RX
BCF STATUS,5 ;Cambio al otro banco
CLRF PORTA ;Limpia el puerto A
CLRF PORTB ;Limpia el puerto B
CLRF PORTC ;Limpia el puerto C
CLRF PORTD ;Limpia elpuerto D
CLRF PORTE ;Limpia el puerto E
MOVLW B'10010000' ;Configuración del USART
MOVWF RCSTA ;Para RX en modo continuo
MOVLW B'11000000' ;Habilitito las interrupciones
MOVWF INTCON
CLRWDT ;Limpia el WATCHDOG
GOTO $-1 ;Bucle de espera hasta que se genere una Interrupción por RX
;Segunda instrucción programa principal Recepción pr interrupción.
INTER
BCF PIR1,RCIF ;Bajo Bandera de Recepción
MOVLW d'00' ;cargo W con el número 0
XORWF RCREG,w ;Comparo lo que recibi en la Rx con W
BTFSS STATUS,2 ;Si es igual no ejecuta la siguiente instrucción y salta a la siguiente
GOTO $+6;Salto 6 instrucciones
CLRF PORTA ;Limpia el puerto A
CLRF PORTB ;Limpia el puerto B
CLRF PORTC ;Limpia el puerto C
CLRF PORTD ;Limpia el puerto D
CLRF PORTE ;Limpia el puerto E
MOVLW d'01' ;Cargo W con el número 1
XORWF RCREG,w ;Comparo si lo que recibi es igual a 1BTFSS STATUS,2 ;Si es igual brinco una instrucción
GOTO $+3 ;Salto 3 instrucciones
BSF PORTB,0 ;Coloco en alto RB0
call delay ;llama a la rutina de temporización de 100ms
BCF PORTB,0 ;Coloca en bajo la patita RB0
MOVLW d'02' ;Cargo W con el número 2
XORWF RCREG,w ;Comparosi lo que recibi es igual a 2
BTFSS STATUS,2 ;Si es igual brinco una instrucción
GOTO $+3 ;Salto 3 instrucciones
BSF PORTB,1 ;Coloco en alto RB1
call delay ;llama a la rutina de temporización de 100ms
BCF PORTB,1 ;Coloca en bajo la patita RB1
MOVLW d'03' ;Cargo W con el número 3XORWF RCREG,w ;Comparo si lo que recibi es igual a 3
BTFSS STATUS,2 ;Si es igual brinco una instrucción
GOTO $+3 ;Salto 3 instrucciones
BSF PORTB,2 ;Coloco en alto RB2
call delay ;llama a la rutina de temporización de 100ms
BCF PORTB,2 ;Coloca en bajo la patita RB2
MOVLW d'04'...
Regístrate para leer el documento completo.