Pedro Guerrero Amado.Marzo 2002 PRACTICA 12 CONTADOR CON DISPLAY DESCRIPCIÓN. En esta práctica vamos a contar los impulsos de entrada de la patilla 4 del puerto A y se los vamos a asignar a un display. Contaremos de 0 a 9. PROGAMA FUENTE ; CONTADOR CON DISPLAY LIST=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í el trozo de programa ya conocido. Explicamos el que viene a continuación. Pedro Guerrero Amado.Marzo 2002 En primer lugar borramos el temporizador o contador. A continuación movemos a W el valor del TM0 y llamamos a la subrutina tabla_1, en la que W (con el valor del contador) es el índice. Cuando volvemos de la subrutina, sacamos el valor devuelto por ésta por el puerto B. A continuación movemos a W el valor 0xa en hexadecimal (10 en decimal) y lo comparamos con el contador para ver si hemos llegado a ese valor. Si hemos llegado saltamos a princi y reiniciamos el contador, sino estamos dentro del bucle hasta que llegamos a 9. princi CLRF tm0 ;borramos el valor del temporizador salto MOVF tm0,w CALL tabla_1 MOVWF portb MOVLW 0xa XORWF tm0,w BTFSS status, 2 GOTO salto GOTO princi ;Movemos a W el valor del contador. ;Llamamos a tabla con W como índice( o el contador) ;Sacamos el valor devuelto por tabla por la puerta B ;Movemos a W 0xa (10 en decimal) ;Comparamos con el contador. ;Si hemos llegado al 9 y se pone a 1 entonces volvemos ;a princi, si no vamos a salto. ; tabla_1 ADDWF pc ,f RETLW 0x3f RETLW 0x06 RETLW 0x5b RETLW 0x4f RETLW 0x66 RETLW 0x6d RETLW 0x7d RETLW 0x07 RETLW 0x7f RETLW 0x67 END