Está en la página 1de 5

UNIVERSIDAD AUTÓNOMA DE YUCATÁN

FACULTAD DE MATEMÁTICAS

MICROCONTROLADORES
OTILIO SANTOS AGUILAR

REPORTE:
COMUNICACIÓN SERIAL

FELIPE DE JESÚS MIJANGOS MANRIQUE

FECHA DE ENTREGA:
LUNES 16 DE MAYO, 2011

Página 1 de 5
OBJETIVO
Encender y apagar 3 leds y verificar si están activados los switches o no con el PIC16F877A
mediante comunicación serial asíncrono de alta frecuencia de baudios con una hiperterminal.

CARACTERISTICAS DE LA TAREA
Los leds deben estar conectados en el puerto A y los switches en el puerto B. Los pines de
recepción y transmisión deben estar conectados en los pines 6 y 7 del puerto C, respectivamente.
Se imprime 1 en la hiperterminal si el switch en evaluación está activado y 0 si no lo está.

DIAGRAMA ESQUEMATICO (PROTEUS)

ALGORITMO Y CODIGO COMENTADO


Se reserva la posición 20h para la variable temp (se utilizara en la interrupción). También se aparta
el servicio de interrupción:
#include <p16f877a.inc>
list p=16f877a
__config 3F39
temp EQU 0X20

ORG 0x00
goto INICIO
ORG 0x04
goto SERV_INT

Se inicia el código: se digitaliza el puerto A y se configura como salida y al final se limpia. También
se configura el puerto B como entrada
INICIO
;-----------Puerto A como Digital------------------------
movlw ADCON1
movwf FSR
movlw 0x06
movwf INDF

Página 2 de 5
;-----------Puerto A como Salida------------------------
movlw TRISA
movwf FSR
movlw 0x00
movwf INDF

;-----------limpiamiento del Puerto A


clrf PORTA
;-----------Puerta B como Entrada------------------------
movlw TRISB
movwf FSR
movlw 0xFF
movwf INDF

A continuación, se configura los pines 6 y 7 (TX como salida y RX como entrada, respectivamente)
;------------Configurando los pines TX y RX--------------
movlw TRISC
movwf FSR
bcf INDF,6
bsf INDF,7

Luego se configura la transmisión de alta velocidad de 9600 baudios


;------------Configurando la transimision--------------
movlw TXSTA
movwf FSR
bsf INDF,BRGH

;------------Configurando Velocidad de transmision--------------


movlw SPBRG
movwf FSR
movlw .25
movwf INDF

Después, se activan la recepción y la transmisión y las interrupciones generales, periféricas y de


recepcion, como también se trabaja en modo asíncrono y se habilita la comunicación serial y,
luego, se espera la interrupción
;------------Configurando el modo de Transmision--------------
movlw TXSTA
movwf FSR
bcf INDF,SYNC
bsf INDF,TXEN

;------------Habilitando Puerto Serial-------------


movlw RCSTA
movwf FSR
bsf INDF,SPEN
bsf INDF,CREN
;------------Interrupciones-----------------------------------
movlw INTCON
movwf FSR
bsf INDF,GIE
bsf INDF,PEIE

movlw PIE1
movwf FSR
bsf INDF,RCIE `

goto $

Página 3 de 5
Se utilizaran las teclas A, S y D para encender y apagar los Leds 1 (pin RA0), 2 (pin RA1) y 3 (pin
RA2), respectivamente; y también las teclas J, K y L para los verificar si estan activados o no los
switches 1 (pin PB0), 2 (pin PB1) y 3 (pin PB2)

Cuando se inicie la interrupción se verificara qué tecla se oprimió, primero bajando la bandera de
interrupcion de la recepción y luego leyendo la información contenida
SERV_INT ;Servicio de Interrupcion

;---- Lectura de la tecla oprimida ------------------------------------------


LEER_RC
bcf PIR1,RCIF
movf RCREG,w
movwf temp

;----- Chequeo de la tecla oprimida-----------------------------------------------------

;----- utilize A para activar o apagar led 1---------------------------------------------


;Nota: la eleccion de las teclas a evaluar son a decision propia------------------------
movlw "A"
subwf temp,w
btfsc STATUS,Z
goto led1

;----- utilize S para activar o apagar led 3---------------------------------------------


movlw "S"
subwf temp,w
btfsc STATUS,Z
goto led2

;----- utilize D para activar o apagar led 3---------------------------------------------


movlw "D"
subwf temp,w
btfsc STATUS,Z
goto led3

;----- utilize J para verificar si el switch 1 (RB0) esta activado o no------------------


movlw "J"
subwf temp,w
btfsc STATUS,Z
goto sw1

;----- utilize K para verificar si el switch 2 (RB1) esta activado o no -----------------


movlw "K"
subwf temp,w
btfsc STATUS,Z
goto sw2

;----- utilize L para verificar si el switch 3 (RB2) esta activado o no -----------------


movlw "L"
subwf temp,w
btfsc STATUS,Z
goto sw3

;----- en cualquier otra tecla manda hacia el final de la interrupcion -----------------


goto FIN

En caso de que se haya tecleado A, S o D los siguientes comandos harán que se encienda o se
apague determinado Led de acuerdo con la tecla presionada:
Nota: se usa el comando XOR para que se encienda o se apague el bit seleccionado (si son iguales
el bit seleccionado y el bit de comparación el resultado es 0, si son distintos el resultado es 1)
;----- Encendido y apagado de los leds ----------------------------------------
led1 ;Prende Led 1 si esta apagado y lo apaga si esta prendido
movlw b'00000001'
xorwf PORTA, f
goto FIN

Página 4 de 5
led2 ;Prende Led 2 si esta apagado y lo apaga si esta prendido
movlw b'00000010'
xorwf PORTA, f
goto FIN
led3 ;Prende Led 3 si esta apagado y lo apaga si esta prendido
movlw b'00000100'
xorwf PORTA, f
goto FIN
;ejemplo:
;se oprime 1
;
; bits despeciados (X)
; _____
; PORTA: XXXXX000
; XOR: 00000001
; --------
; XXXXX001
;se oprime 2
;
; PORTA: XXXXX001
; XOR: 00000010
; --------
; XXXXX011
;...

En caso de que se haya tecleado J, K o L los siguientes comandos verificara si está activado o no
determinado Switch de acuerdo con la tecla presionada:
Nota: el resultado (0 o 1) se imprimirá en la hiperterminal.
;----- Chequeo de los switches --------------------------------------------
sw1 ;Envia 1 o 0 dependiendo si el switch1 esta prendido o apagado
btfss PORTB,0
goto cero
movlw "1"
goto envia

sw2 ;Envia 1 o 0 dependiendo si el switch2 esta prendido o apagado


btfss PORTB,1
goto cero
movlw "1"
goto envia
sw3 ;Envia 1 o 0 dependiendo si el switch3 esta prendido o apagado
btfss PORTB,2
goto cero
movlw "1"
goto envia

cero ;Envia "0" a la PC


movlw "0"
goto envia

envia ;envia lo que esta en Wreg a la PC


movwf TXREG
goto FIN

Finalizacion de la interrupcion:
FIN retfie;

END

Página 5 de 5