pic Jul. 2016 | Page 58

LIST P=16C84 ; Seleccionamos el micro concreto que deseamos emplear ; Asignación de etiquetas a registros. f EQU 0x01 portb estado conta EQU EQU EQU 0x06 0x03 0x0C ORG ; ; ; ; ; ; 0 GOTO inicio ORG ; El programa comienza en la dirección 0 y ; salta a la dirección 5 para sobrepasar ; el vector de interrupción. 5 inicio BSF estado,5 MOVLW 0x00 MOVWF portb BCF estado,5 CLRF conta bucle1 INCF conta,f MOVF conta,W MOVWF portb MOVLW 0x5f SUBWF conta,W BTFSS estado,2 GOTO bucle2 GOTO bucle1 bucle2 Indica que el valor de una operación se guardará en el registro, no en el W Dirección del registro del puerto B Dirección del registro de estado Registro sin asignar Lo usamos como variable contadora ; Seleciona el banco 1 para poder acceder al TRISB Y se especifica que es de salida ; Selección del banco 0 para trabajar directamente ; con el puerto ; Ponemos nuestro contador a 0 ; ; ; ; ; ; ; ; conta + 1 --> conta (incrementa el contador) conta se carga en W W se carga en el registro de datos del puerto B W <-- 0x5f (Final de cuenta deseado) conta - W --> W. Si es cero, la cuenta está acabada Explora Z y si vale 1 es que W vale 0 se produce "brinco" en ese caso por fin de cuenta Si Z = 0 se vuelve a bucle1 ; Si Z = 1 se produce un bucle infinito END Si ejecuta este programa tal cuál se llevará una gran decepción: el estado de la cuenta pasará directamente a 0x5F. ¿ A qué se debe esto? Pensemos que el reloj se mueve a una velocidad de 4 Mhz, lo cuál significa 0’25 µsegundos. Como cada instrucción necesita cuatro ciclos de reloj esto implica un ciclo de instrucción de 1 µsegundo, y un total de 7 instrucciones (con una de salto, que ocupa 2 ciclos) de ejecutará en 8 µsegundos. La cuenta es demasiado rápida. Puede cambiar la frecuencia de reloj a través del menú OPTIONS, submenú clock frecuency3. Proponemos al lector como ejercicio extra que incorpore un retardo al programa que consiga que sea visualizable. Nosotros planteamos una solución en cuenta2.asm. ¿ Podría conseguir contar segundos con un reloj de 1 Mhz? Lamentamos comunicarle que no hemos encontrado ningún método, aparte del manual, para calcular el tiempo de ejecución a través del MPLAB. 2 3 Los PIC16C5X tienen situado su vector de reset en la última dirección física de memoria En la versión 4.99.07 la activación del WDT se realiza a través del submenú Development Mode. 56