Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROPROCESADORES Y MICROCONTROLADORES
Autor:
Xavier David Barreno Ubilluz
Docente:
Ing. Amparo Meythaler
Fecha:
Latacunga, martes 28 de julio del 2020.
NRC:
7803
1) OBJETIVOS
Realizar ejercicios de secuencias complejas utilizando los Puertos completos del
PIC16F877.
Reforzar el funcionamiento y la importancia de los Retardos para la utilización de
los puertos.
2) MARCO TEORICO
SECUENCIAS
Según la complejidad se pueden realizar de tres formas:
Instrucciones simples.
Direccionamiento Indirecto.
Instrucción Especial: RETLW.
3) EQUIPOS Y MATERIALES
PC con los paquetes MPLAB IDE
PC con el paquete PROTEUS.
WORD para realizar el informe.
4) INSTRUCCIONES
1. Trabajo Preparatorio:
a) Realizar el diagrama de flujo, la codificación e implementación
correspondiente, de un programa que realice una secuencia escogida por
usted utilizando Direccionamiento Indirecto, que se visualice en 8 leds
colocados en el Puerto. Entre cada dato de análisis debe estar un retardo
de 0,3 milisegundos, calculados en base a un oscilador de 8 MHz.
ACTIVIDADES
Diagrama de flujo
INICIO
CONFIGURAR PORTB
GUARDAR DATOS
FSR 30
W [FSR]
PORTB W
RETARDOS
FSR FSR +1
FSR = 39
NO SI
RETARDOS
RETARDO2 RETARDO1
R2 00 R1 00
RETARDO 1 R1 R1 +1
R2 R2 +1
NO R1 =64
R2 =64
SI
SI REGRESAR
REGRESAR
Codificación
LIST P=PIC16F877
ESTADO EQU 03
FSR EQU 04
INDF EQU 00
PORTB EQU 06
R1 EQU 25
R2 EQU 26
ORG 0
BSF ESTADO,5
CLRF PORTB
BCF ESTADO,5
MOVLW 0FF
MOVWF 30
MOVLW 00
MOVWF 31
MOVLW 7E
MOVWF 32
MOVLW 00
MOVWF 33
MOVLW 3C
MOVWF 34
MOVLW 00
MOVWF 35
MOVLW 18
MOVWF 36
MOVLW 00
MOVWF 37
MOVLW 0FF
MOVWF 38
SI:
MOVLW 30
MOVWF FSR
NO:
MOVF INDF,0
MOVWF PORTB
CALL RETARDO2
INCF FSR,1
MOVLW 39
XORWF FSR,0
BTFSS ESTADO,2
GOTO NO
GOTO SI
RETARDO2
CLRF R2
BUCLE2
CALL RETARDO1
INCF R2,1
MOVLW 64
XORWF R2,0
BTFSS ESTADO,2
GOTO BUCLE2
RETURN
RETARDO1
CLRF R1
BUCLE1
INCF R1,1
MOVLW 64
XORWF R1,0
BTFSS ESTADO,2
GOTO BUCLE1
RETURN
END
Cálculo de Retardo.
Realice los cálculos para obtener el tiempo solicitado.
RETARDO:
CLRF R1 1 CM no se repite
BUCLE1:
INCF R1,1 1 CM se repite
MOVLW ## 1 CM se repite
XORWF R1,0 1 CM se repite
BTFSS ESTADO,2 1 CM se repite
GOTO BUCLE1 2 CM se repite
RETURN 2 CM se repite
𝑻𝒊𝒆𝒎𝒑𝒐 𝒅𝒆 𝒓𝒆𝒕𝒂𝒓𝒅𝒐 = [#𝑪𝑴 𝒒𝒖𝒆 𝒏𝒐 𝒔𝒆 𝒓𝒆𝒑𝒊𝒕𝒆𝒏 + 𝒏(𝒗𝒆𝒄𝒆𝒔 #𝑪𝑴 𝒒𝒖𝒆 𝒔𝒆 𝒓𝒆𝒑𝒊𝒕𝒆)] ∗ 𝑽𝒂𝒍𝒐𝒓 𝑪𝑴
𝑻𝒊𝒆𝒎𝒑𝒐 𝒅𝒆 𝒓𝒆𝒕𝒂𝒓𝒅𝒐 = [𝟑 + 𝒏(𝟔)] ∗ 𝟒𝒕
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑟𝑒𝑡𝑎𝑟𝑑𝑜 = 0.3𝑚𝑠
1 1
𝑡= =
𝑓 8𝑀𝐻𝑧
4
0.3𝑚𝑠 = [3 + 𝑛(6)] ∗ ( )
8𝑀𝐻𝑧
0.3𝑚𝑠 ∗ 8𝑀𝐻𝑧
−3
𝑛= 4
6
𝑛 = 99.5 100 decimal
n = 64 hexadecimal
0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
FF = [30]
00 = [31]
7E = [32]
00 = [33]
3C = [34]
00 = [35]
18 = [36]
00 = [37]
FF = [38]
FF 00
7E 00
3C 00
18 00
CONFIGURAR PORTB
RX 00
SECUENCIA
PORTB W
RETARDO
RX RX+1
NO SI
RX = 09
SECUENCIA
SECUENCIA
W RX
PC PC+1
W 00 W 11 W 33 W 77 W FF W 77 W 33 W 11 W 00
RETARDOS
RETARDO2 RETARDO1
R2 00 R1 00
RETARDO 1 R1 R1 +1
R2 R2 +1
NO R1 =64
R2 =64
SI
SI REGRESAR
REGRESAR
Codificación
LIST P=PIC16F877
ESTADO EQU 03
PORTB EQU 06
PCL EQU 02
R1 EQU 25
R2 EQU 26
RX EQU 30
ORG 0
BSF ESTADO,5
CLRF PORTB
BCF ESTADO,5
SI:
CLRF RX
NO:
CALL SECUENCIA
MOVWF PORTB
CALL RETARDO2
INCF RX,1
MOVLW 09
XORWF RX,0
BTFSS ESTADO,2
GOTO NO
GOTO SI
SECUENCIA:
MOVF RX,0
ADDWF PCL,1
RETLW 00
RETLW 11
RETLW 33
RETLW 77
RETLW 0FF
RETLW 77
RETLW 33
RETLW 11
RETLW 00
RETARDO2:
CLRF R2
BUCLE2:
CALL RETARDO1
INCF R2,1
MOVLW 64
XORWF R2,0
BTFSS ESTADO,2
GOTO BUCLE2
RETURN
RETARDO1:
CLRF R1
BUCLE1:
INCF R1,1
MOVLW 64
XORWF R1,0
BTFSS ESTADO,2
GOTO BUCLE1
RETURN
END
Cálculo de Retardo.
Realice los cálculos para obtener el tiempo solicitado.
RETARDO:
CLRF R1 1 CM no se repite
BUCLE1:
INCF R1,1 1 CM se repite
MOVLW ## 1 CM se repite
XORWF R1,0 1 CM se repite
BTFSS ESTADO,2 1 CM se repite
GOTO BUCLE1 2 CM se repite
RETURN 2 CM se repite
𝑻𝒊𝒆𝒎𝒑𝒐 𝒅𝒆 𝒓𝒆𝒕𝒂𝒓𝒅𝒐 = [#𝑪𝑴 𝒒𝒖𝒆 𝒏𝒐 𝒔𝒆 𝒓𝒆𝒑𝒊𝒕𝒆𝒏 + 𝒏(𝒗𝒆𝒄𝒆𝒔 #𝑪𝑴 𝒒𝒖𝒆 𝒔𝒆 𝒓𝒆𝒑𝒊𝒕𝒆)] ∗ 𝑽𝒂𝒍𝒐𝒓 𝑪𝑴
𝑻𝒊𝒆𝒎𝒑𝒐 𝒅𝒆 𝒓𝒆𝒕𝒂𝒓𝒅𝒐 = [𝟑 + 𝒏(𝟔)] ∗ 𝟒𝒕
𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑟𝑒𝑡𝑎𝑟𝑑𝑜 = 0.3𝑚𝑠
1 1
𝑡= =
𝑓 8𝑀𝐻𝑧
4
0.3𝑚𝑠 = [3 + 𝑛(6)] ∗ ( )
8𝑀𝐻𝑧
0.3𝑚𝑠 ∗ 8𝑀𝐻𝑧
−3
𝑛= 4
6
𝑛 = 99.5 100 decimal
n = 64 hexadecimal
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 1
0 1 1 1 0 1 1 1
1 1 1 1 1 1 1 1
0 1 1 1 0 1 1 1
0 0 1 1 0 0 1 1
0 0 0 1 0 0 0 1
0 0 0 0 0 0 0 0
00 = [30]
11 = [31]
33 = [32]
77 = [33]
FF = [34]
77 = [35]
33 = [36]
11 = [37]
00 = [38]
00 11
33 77
FF 77
33 11
5) RESULTADOS
Explique los errores cometidos en el ejercicio realizado (si los tuvo) y la forma
de corregirlos.
No hubo errores complejos, ya que el esquema del ejercicio es general y lo que hay
que tener presente es en el esquema de la secuencia que sea realizado y digitado de
manera correcta.
6) CONCLUSIONES (mínimo 3)
Para programar secuencias utilizando direccionamiento indirecto se debe
considerar que hay que guardar los códigos de la secuencia seleccionada en
localidades del área GPR de la memoria de datos.
Se puede utilizar direccionamiento indirecto tanto en secuencias simples como
complejas.
En las secuencias utilizando la instrucción RETLW se manipula el contador del
programa (PC) para la obtención ordenada de los códigos que saldrán al puerto.
En las secuencias utilizando la instrucción RETLW siempre hay que trabajar la
secuencia en una subrutina.
En las secuencias utilizando la instrucción RETLW se forman dos instrucciones
más:
Un salto
MOVLW
7) RECOMENDACIONES (mínimo 2)
Para la simulación del ejercicio en PROTEUS o PROTOBOARD siempre hay que
trabajar con retardos para que la secuencia pueda ser observada de manera correcta.
En las secuencias que se realiza con RETLW para comprobar el funcionamiento se
recomienda correr por pasos comprobar con el contador de programas.
8) BIBLIOGRAFIA/LINKOGRAFÍA
https://www.unioviedo.es/ate/alberto/manualPic.pdf
file:///C:/Users/Usuario/Downloads/Clase%20Microprocesadores%20y%20Microco
ntroladores_Lunes%2027%20de%20julio%202020%20(2020-07-
27%20at%2007%2029%20GMT-7)