pic Jul. 2016 | Page 65

; ************************* Cuerpo Principal ************************** Reset CLRF digito ; Comienza a contar por el 0 Siguien MOVF digito,w CALL Tabla ; Coloca el siguiente dígito a evaluar en W ; Llama a la subrutina para coger el dato ; y hacer la conversión decimal-7 segmentos MOVWF portb Pausa cuenta Tabla DECFSZ contador GOTO Pausa INCF digito,f MOVF digito,w XORLW 0x0A BTFSC estado,Z GOTO Reset ; ; ; ; ; ; ; GOTO Siguien ; En caso contrario, continua la cuenta ; con el siguiente dígito ADDWF pc,f valor, RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW 0x3F 0x06 0x5B 0x4F 0x66 0x6D 0x7D 0x07 0x7F 0x6F Decrementa contador y repite hasta que valga 0 Incrementa el valor del dígito al siguiente Pone el valor del dígito en W Chekea si el dígito sobrepasa el valor 9 Comprobando con un xor si W vale 0 (Z=1) Si Z=1 resetea el dígito y comienza de nuevo la ; Suma al contador de programa el valor de offset, es decir, ; el valor del dígito. Así se genera un PC distinto según su ; asegurando que vaya a la línea correcta de la tabla ; 0 en código 7 segmentos ; 1 en código 7 segmentos ; 2 en código 7 segmentos ; 3 en código 7 segmentos ; 4 en código 7 segmentos ; 5 en código 7 segmentos ; 6 en código 7 segmentos ; 7 en código 7 segmentos ; 8 en código 7 segmentos ; 9 en código 7 segmentos END 5.3.5 Manejo de interrupciones GENERALIDADES SOBRE LAS INTERRUPCIONES La interrupción es una técnica que coloca al programa temporalmente en suspenso mientras el microcontrolador ejecuta otro conjunto de instrucciones en respuesta a un suceso. Las causas de una interrupción pueden ser externas, como la activación de una patilla con el nivel lógico apropiado, e internas, como las que pueden producirse al desbordarse un temporizador como el TMR0. Los sucesos internos capaces de producir una interrupción más destacables son el desbordamiento del temporizador TMR0, fin de la escritura de la EEPROM, finalización de la conversión A/D. Los sucesos externos principales son la activación del pin 0 de la puerta B (PB0/INT), el cambio de estado en las patitas 4-7 de la puerta B, y el desbordamiento del temporizador TMR0. 63