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