You are on page 1of 4

Informe #2 Laboratorio de Microprocesadores

Presentado por: Pablo González, C.I.:25382516

Presentado a: Mariela Colmenares


Universidad de Carabobo
Facultad de Ingeniería

Introducción cnt1 EQU 0x21


El presente trabajo tiene como finalidad mostrar cnt2 EQU 0x22
la programacióna adecuada que se le debe realizar al N EQU 0x23
microcontrolador para generar retardos, los cuales aux EQU 0x24
resultan muy útiles en muchas aplicaciones, entre las
que se encuentra la eliminación del fenómeno conocido
como “rebote”. Asi mismo, se hará enfasis en la ORG 0x00
utilización del display de 7 segmentos, así como goto Inicio
también en la creación de la rutina que permite hacer la ORG 0x04
conversión necesaria para la representación del valor a
mostrar. Por último, se mostrará la creación de macros ;creación del macro, utilizado para generar retardos
como sustitutos de las subrutinas ya conocidas, DELAY: macro N
permitiendo así facilitar el trabajo a realizar.
call retardo_1ms
Metodología decfsz N,f
En esta sesión de trabajo se procedió a goto $-2
realizarse tres actividades principales, las cuales se endm
señalan a continuación:
retardo_1ms:
 Generar una onda cuadrada de la movlw .7
frecuencia indicada en un número leído a movwf cnt2
traves de switches en el puerto A, la cual se bucle2:
mostraría en el pin RC0. movlw .255
 Contar la cantidad de pulsos introducidos movwf cnt1
por el pin RA0, los cuales se mostrarán en bucle1:
un display 7 segmentos conectado al puerto decfsz cnt1,f
D y una serie de leds conectads al puerto C goto bucle1
(el puerto D mostrará un valor entre 0 y F, el decfsz cnt2,f
cual será el dígito menos significativo de la goto bucle2
cuenta, y el puerto C reprsentará los dígitos return
más significativos de la cuenta). Se contará
con un pulsador o switch en RA1 para ;programa principal
reiniciar la cuenta, y di dicha cuenta excede Inicio
el valor de 64 en el puerto C, todos los leds bsf STATUS, RP0 ; banco 1
conectados en este puerto permanecerán movlw 0XFF ; configrando puerto A como entrada
encendidos movwf TRISA
 Medir el período de una señal conectada al clrf TRISC ; configrando puerto C como salida
pin RA3, cuyo valor se mostrará de manera clrf TRISD ; configrando puerto D como salida
similar al de la actividad anterior. bsf STATUS,RP1 ; banco 3
clrf ANSEL ; configurando puerto A como Digial
Seguidamente, se utilizó el compilador MPLAB X bcf STATUS,RP0; volviendo al banco 0 ( banco de
para realizar el código requerido para cada actividad: trabajo )
bcf STATUS,RP1
 1era actividad: clrf PORTC ; limpiando puerto C
clrf PORTD; limpiando puerto D
list p = 16f887 ; delacraciones del micro clrf cnt1
#include <p16f887.inc> clrf cnt2
clrf N; iniciando contadores y otras variables
;definición de etiquetas a utilizar internas de trabajo
temp EQU 0x20
onda: retlw .12
movf PORTA, W retlw .11
andlw 0x3f retlw .11
bcf STATUS,C retlw .11
retlw .11
retlw .11
call tabla_medioperiodo retlw .10
movwf aux retlw .10
bsf PORTC,0 retlw .10
movf aux,w retlw .10
movwf N retlw .10
DELAY N retlw .9
movf aux,w retlw .9
movwf N retlw .9
bcf PORTC,0 retlw .9
DELAY N retlw .9
goto onda retlw .9
retlw .8
retlw .8
;rutina para convertir período en frecuencia retlw .8
tabla_medioperiodo: retlw .8
ADDWF PCL,F retlw .8
retlw .0 retlw .8
retlw .500
retlw .250 END
retlw .166
retlw .125  2da actividad:
retlw .100 list p=16f887
retlw .83 #include <p16f887.inc>; declaraciones del micro
retlw .71
retlw .62 ;definición de etiquetas a utilizar
retlw .55
retlw .50 P1 EQU 0x00
retlw .45 P2 EQU 0x01
retlw .41 C1 EQU 0x20
retlw .38 C2 EQU 0x21
retlw .36 K_us EQU .255
retlw .33 K_ms EQU .3
retlw .29 B1 EQU 0x22
retlw .27 B2 EQU 0x23
retlw .26
retlw .25 ORG 0x00
retlw .23 goto Inicio
retlw .22 ORG 0x04
retlw .21
retlw .20 ;programa principal
retlw .20 Inicio
retlw .19 ; configuración de entradas y salidas
retlw .18 bsf STATUS, RP0
retlw .17 movlw b'00000011'
retlw .17 movwf TRISA
retlw .16 clrf TRISC
retlw .16 clrf TRISD
retlw .15 bsf STATUS, RP1
retlw .15 clrf ANSEL
retlw .14 bcf STATUS, RP1
retlw .14 bcf STATUS, RP0
retlw .13 clrf PORTC
retlw .13 clrf PORTD
retlw .13 clrf C1
retlw .12 clrf C2
retlw .12
retlw .12 Iniciar_cuenta
call mostrar_7_seg Repetir
nop
Principal nop
btfss PORTA, P2 nop
goto Reinicio nop
btfsc PORTA, P1 decfsz B1, F
goto Principal goto Repetir
call retardo_ms return
btfss PORTA, P1
goto Principal retardo_ms
movlw K_ms
Cuenta1 movwf B2
incf C1 Repetir_2
movlw .16 call retardo_us
xorwf C1, W decfsz B2, F
btfss STATUS, Z goto Repetir_2
goto mostrar_7_seg return

Cuenta2 ;reinicio de contadores


clrf C1 Reinicio
movlw .64 clrf C1
xorwf C2, w clrf C2
btfss STATUS, Z clrf PORTC
incf C2 clrf PORTD
goto mostrar_leds goto Iniciar_cuenta
END
mostrar_7_seg
call tabla_display  3ra actividad:
movwf PORTD list p = 16f887 ; delacraciones del micro
goto Principal #include <p16f887.inc>
;definición de etiquetas a utilizar
mostrar_leds cnt1 EQU 0x21
movf C2, W cnt2 EQU 0x22
movwf PORTC N EQU 0x23
goto mostrar_7_seg ct1 EQU 0x24
ct2 EQU 0x25
;rutina para generar valores en el display de 7 aux1 EQU 0x26
segmentos aux2 EQU 0x27
tabla_display
movf C1, W ORG 0x00
addwf PCL goto Inicio
retlw b'00111111';codigo del 0 ORG 0x05
retlw b'00000110';codigo del 1
retlw b'01011011';codigo del 2 ;creación del macro a utilizar
retlw b'01001111';codigo del 3 DELAY: macro N
retlw b'01100110';codigo del 4
retlw b'01101101';codigo del 5 call retardo_1ms
retlw b'01111101';codigo del 6 decfsz N,f
retlw b'00000111';codigo del 7 goto $-2
retlw b'01111111';codigo del 8 endm
retlw b'01100111';codigo del 9
retlw b'01110111';codigo de A retardo_1ms:
retlw b'01111100';codigo de B movlw .7
retlw b'00111001';codigo de C movwf ct2
retlw b'01011110';codigo de D bucle2:
retlw b'01111001';codigo de E movlw .255
retlw b'01110001';codigo de F movwf ct1
return bucle1:
decfsz ct1,f
;rutina de retardo goto bucle1
retardo_us decfsz ct2,f
movlw K_us goto bucle2
movwf B1 return
retlw b'11111110'
;programa principal retlw b'11001110'
Inicio retlw b'11101110'
retlw b'11111000'
bsf STATUS, RP0 ; banco 1 retlw b'01110010'
movlw 0XFF ; configrando puerto A como entrada retlw b'10111100'
movwf TRISA retlw b'11110010'
clrf TRISC ; configrando puerto C como salida retlw b'11100010'
clrf TRISD ; configrando puerto D como salida
bsf STATUS,RP1 ; banco 3
clrf ANSEL ; configrando puerto A como Digial mostrar:
bcf STATUS,RP0; volviendo al banco 0 ( banco de movf cnt1,w
trabajo ) movwf aux1
bcf STATUS,RP1 rlf aux1,0
clrf PORTC ; limpiando puerto C call tabla
clrf PORTD; limpiar puerto D movwf PORTD
clrf cnt1
clrf cnt2 movf cnt2,w
clrf N; inicializar contadores y demás variables movwf aux2
internas rlf aux2,0
bcf STATUS,Z movwf PORTC
movlw .1 return
movwf N
uno: END
btfss PORTA,3
goto uno Luego de compilar con éxitos cada código, se
espera: procedió a realizar la simulación correspondiente
call retardo_1ms utilizando el software Proteus, la cual se realiza al
incf cnt1,f montaje en físico.
movlw .15
subwf cnt1,0 Conclusiones
btfss STATUS,Z Durante la sesión de trabajo, no se pudo realizar la
goto dos prueba en físico de cada una de las actividades, debido
incf cnt2,f a que se demoró tiempo en la corrección de algunos
clrf cnt1 errores presentados en la creación de los códigos. Sin
movlw .64 embargo, en las simulaciones realizadas en Proteus, se
subwf cnt2,0 pudo verificar el correcto funcionamiento de dos de las
btfss STATUS,Z tres actividades, lo que demuestra un buen desempeño
goto dos en dicha sesión.
movlw 0xff
movwf cnt2

dos:
btfsc PORTA,3
goto espera
movf cnt2,w
movwf PORTC
call mostrar
fin:
goto fin

;rutina para generar un valor deseado en el display de


7 segmentos
tabla:
addwf PCL,F
retlw b'01111110'
retlw b'00001100'
retlw b'10110110'
retlw b'10011110'
retlw b'11001100'
retlw b'11011010'
retlw b'11111010'
retlw b'10001110'

You might also like