Pedro Guerrero Amado.Marzo 2002 PRACTICA 11 TEMPORIZADOR Y CONTADOR DESCRIPCIÓN. En esta práctica vamos a contar los impulsos de entrada de la patilla 4 del puerto A y cuando lleguemos a un determinado valor activamos una salida y un temporizador. Cuando pasa el tiempo de temporización, se desactiva esa salida y se activa la primera reseteando el contador y volviendo al principio. PROGAMA FUENTE ; TEMPORIZADOR Y CONTADOR LIST P=PIC16F84 LIST C=132 #define banco1 bsf 0x03,5 #define banco0 bcf 0x03,5 ;DECLARACION REGISTROS Y VARIABLES include <registr.h> cont1 EQU 0xc cont2 EQU 0xd cuenta EQU 0xe ORG 0 GOTO reset ;salvamos el vector de interrupción ORG 5 reset banco1 CLRF trisb MOVLW 0x1f MOVWF trisa MOVLW 0xef MOVWF opcion banco0 CLRF portb ; seleccionamos banco 1 de registros ; ponemos trisb a 0, puerta B como salidas ;ponemos a como entradas ;asignamos el valor del temporizador al ;contador externo cargando el registro OPTION ; seleccionamos banco 0 Hasta aquí las instrucciones que conocemos con alguna declaración de variables. Pedro Guerrero Amado.Marzo 2002 En el cuerpo del programa que sigue a continuación hacemos lo que ya hemos descrito, en primer lugar borramos el temporizador y activamos la salida 0 del la puerta B. A continuación comparamos el valor del temporizador (contador en este caso) para ver si hemos llegado al valor de cuenta (5 en nuestro caso). Si no hemos llegado, estamos en el bucle hasta que alcancemos el valor de conteo. Una vez ocurra esto, borramos la salida 0 y activamos la 1 y llamamos a la rutina de retardo. Una vez transcurrido el tiempo de retardo, borramos la salida 1 y volvemos a princi. princi CLRF tm0 BSF portb,0 ;Borramos el valor del temporizador ;Ponemos a 1 la salida 0 inicio MOVLW 0x5 XORWF tm0, w BTFSS status, 2 GOTO inicio BCF portb, 0 BSF portb, 1 MOVLW 0x15 MOVWF cuenta CALL retardo BCF portb, 1 GOTO princi ;Cargamos 5 en el registro W ;Comparamos W con el contador del temporizador ;Saltamos si hemos llegado a 5 ;Volvemos a inicio si no hemos llegado a 5 ;Si llegamos a 5 desactivamos la salida 0 ;y activamos la salida 1 ;Cargamos el valor ;de cuenta para el retardo ;Llamamos a la rutina de retardo ;Borramos la salida 1 ;Volvemos a princi y repetimos retardo MOVLW 0xff MOVWF cont1 MOVWF cont2 bucles DECFSZ cont1,f GOTO bucles DECFSZ cont2,f GOTO bucles DECFSZ cuenta,f GOTO bucles RETURN END ;MOVEMOS FF A W Y cargamos ;cont1 y cont2 con ff ; ;decrementamos cont1, si es 0 saltamos una instrucción, ;sino volvemos a bucles ;igual pero con cont2 ;