Académique Documents
Professionnel Documents
Culture Documents
I Objetivo 1
II Materiales y equipo 1
IV Desarrollo 3
V Observaciones y conclusiones 5
i
I. Objetivo
PIC 16F877A
8 LEDs
Resistencias: 1 de 10 kΩ y 8 de 330 Ω
2 capacitores de 27 pF
Oscilador de 4 MHz
Fuente de voltaje
Protoboard
1
Figura 3.1: Terminales de puertos del PIC16F877A.
2
IV. Desarrollo
Lo primero que se realizó fue la redacción del código a cargar en el PIC. Para esto
se utilizó la instrucción RRF (Rotate Right through Carry). Como el objetivo es hacer
una secuencia de LEDs basta con poner un bit en ’1’ e ir rotando este número para que
siempre quede sólo un bit en ’1’ y por lo tanto sólo se encienda un LED a la vez. También
de esta manera se consigue hacerlo en orden.
La sección principal de código resultó de la siguiente manera. El código completo se
encuentra en la sección de Anexos.
CondicionInicial
BSF PORTB, 7 ; Se e n c i e n d e e l LED c o n e c t a d o a l
p i n RB7 (MSB)
GOTO EncenderLEDs
EncenderLEDs
CALL Retardo ; Llamada a l a r u t i n a de r e t a r d o
RRF PORTB, 1 ; R e c o r r e e l 1 que ha b i a en RB7
a RB6
GOTO EncenderLEDs
Aunque hay dos instrucciones de rotación del bit de acarreo, RRF (Rotate Right
through Carry) y RLF (Rotate Left through Carry), se seleccionó RRF por la condición
de que debe encenderse primero el LED que corresponda al bit más significativo.
Habiendo redactado el código, este se ensambló en MPLAB. Posteriormente se cargó el
archivo .HEX al PIC, usando el programador Volnia USP 3.0 plus, como se muestra en
la figura 4.1.
Figura 4.1: Ventana de software del programador al ser cargado el archivo .HEX.
3
Figura 4.2: Circuito para secuenciador de LEDs.
Lo que se obtuvo fue una secuencia de LEDs desde el bit más significativo, en este
caso la terminal RB7, hasta el menos significativo, RB0, secuencia que continúa indefini-
damente mientras se encuentre alimentado el circuito.
Como primera acción se enciende el LED conectado a la terminal RB7. Figura 4.3.
Esto sucede sucesivamente de LED en LED hasta el bit menos significativo que co-
rresponde a la terminal RB0. Figura 4.6.
Una vez que se han encendido cada uno de los LEDs vuelve a encenderse el LED
conectado a la terminal RB7 y se repite el proceso.
4
V. Observaciones y conclusiones
Con esta práctica nos dimos cuenta de que algunas de las instrucciones que tiene el
PIC16F877A facilitan y simplifican la elaboración del código, ya que se requieren menos
lı́neas de código. Esta práctica pudo haberse realizado poniendo en ’1’ y ’0’ cada uno de
los bits manualmente, pero resultó más sencillo utilizar la instrucción RRF para ello.
Referencias
5
Anexos
LIST p=16F877A
INCLUDE <P16F877A . INC>
N EQU 0 x00
c on t 1 EQU 0 x20
c on t 2 EQU 0 x21
Inicio
BCF STATUS, RP0 ; Accede a banco de memoria 0
BCF STATUS, RP1
CLRF PORTB ; Pone en 0 t o d o s l a s t e r m i n a l e s
de PORTB
BSF STATUS, RP0 ; Accede a banco de memoria 1
CLRF TRISB ; Configura todas l a s terminales
de PORTB como s a l i d a s
BCF STATUS, RP0 ; Regresa a banco de memoria 0
GOTO CondicionInicial
CondicionInicial
BSF PORTB, 7 ; Se e n c i e n d e e l LED c o n e c t a d o a l
p i n RB7 (MSB)
GOTO EncenderLEDs
EncenderLEDs
CALL Retardo ; Llamada a l a r u t i n a de r e t a r d o
RRF PORTB, 1 ; R e c o r r e e l 1 que ha b i a en RB7
a RB6
GOTO EncenderLEDs
; SUBRUTINA DE RETARDO
Retardo
MOVLW N ; E s c r i b e 0 x00 en W
MOVWF c o nt 1 ; E s c r i b e 0 x00 en co n t1
Repite1
MOVLW N ; E s c r i b e 0 x00 en W
MOVWF c o nt 2 ; E s c r i b e 0 x00 en co n t2
Repite2
DECFSZ cont2 , 1
6
GOTO Repite2
DECFSZ cont1 , 1
GOTO Repite1
RETURN ; Retorno a r u t i n a EncenderLEDs
END