SlideShare une entreprise Scribd logo
1  sur  11
;El objetivo de este programa es mostrar en la práctica el funcionamiento del Watchdog en el PIC 16c84.
;El programa entra en un bucle infinito del que sale tras cumplirse la temporización asignada al watchdog, que en este
;caso serán 36 ms, es decir 2 veces la temporización nominal.
          LIST p=16c84

         STATUS EQU 03H
         OPT          EQU 01H
; Programa principal:
         ORG       10
         bsf       STATUS,5            ;Banco de registros 1
         movlw b'00001001'
         movwf OPT                     ; Se asigna el preescaler a watchdog con un factor de división de 1:2.
         clrwdt                        ; se inicializa el WD
bucle    goto bucle
         END


;**** OTRO EJEMPLO ****
; EJEMPLO de interrupciones en el PIC16c84. Se trata de realizar una temporización de 150ms utilizando el reloj
; de 100Khz de un PIC

LIST          p=16c84      ; Tipo de pic que vamos a usar
STATUS        EQU 03H
INTCON        EQU 0BH
TR0_OPT       EQU 01H ; TIMER0 en banco 0, OPTION en banco 1
       ORG 0          ; Vector de RESET
       goto EMPIEZA
       ORG 4          ; Vector de interrupciones
       goto TRATINT
EMPIEZA
       bsf STATUS,5      ; Página de registros 1
       movlw b'00000011' ; Prescaler x16 asignado a TMR0
       movwf TMR0_OPT
       movlw b'10100000' ; Activamos interrupción por TMR0
       movwf INTCON         ; No es necesario volver a cambiar de página porque INTCON está en p g 0 y 1.
       bcf STATUS,5      ; Selección de página de registros 0
       movlw d'22'
       movwf TMR0_OPT          ; Cargamos el TMR0 con el valor 22 decimal

BUCLE goto       BUCLE          ; Nos quedaremos aquí hasta que se produzca la interrupción

TRATINT ; Aqui se incluir n los tratamientos de las interrupciones, de momento nos limitaremos a poner W a 0
      ;(para que se vea que se ha producido la interrupción) y esperar a que el WatchDog reinicie el PIC.
      movlw 0
FIN   goto FIN

          END


;*** Otro Ejemplo ****
; Programa que muestra el funcionamiento del timer: Realiza una temporización de 100 ms

          list P=16c84                ; tipo de pic

intcon    equ      0BH
tmr_opt   equ      01H
t0if      equ      02h
status    equ      03h


     org           0
     movlw         b'00000000'
     movwf         intcon      ; desactiva interrupciones

     bsf           status,5    ; página 1
     movlw         b'00000011'     ; prescaler asignado al timer con un
     movwf         tmr_opt      ; factor de 16
bcf              status,5           ; página 0
     movlw            b'01100100'        ; se inicializa TMR0 con 100
     movwf            tmr_opt

bucle      btfsc      intcom,t0if        ; si el bit t0if del intcon es 1
           goto       fin                ; indica que el timer se ha sobre-
           goto       bucle              ; pasado y entonces se salta a fin
                                         ; si no se vuelve al bucle fin
     End


;
;                                                 EJEMPLO 2.10
;
;                                        Autor: Mikel Etxebarria
;                               (c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación y/o MicroPIC Trainer
;
;La interrupción del TMR0.
;
;Se trata de comprobar la interrupción provocada por el TMR0. El programa
;lee el estado de los interruptores conectados a RA0 y RA4 para reflejarlo en
;los leds conectados a RB0 y RB4 respectivamente. Al mismo tiempo el TMR0
;genera una interrupción cada 0.05 seg. (50 mS) que se repetirá 5 veces con objeto
;de hacer intermitencia de 250 mS sobre el led conectado a RB7.


                      List    p=16F84              ;Tipo de procesador
                      include "P16F84.INC"         ;Definiciones de registros internos

Contador equ          0x0c               ;Variable para la temporización

                      org       0x00               ;Vector de Reset
                      goto      Inicio

                      org       0x04               ;Vector de interrupción

Interrupcion          bcf      INTCON,T0IF      ;Repone flag del TMR0
                      decfsz Contador,F         ;Decrementa el contador
           goto       Seguir
Con_si_0              movlw 5
           movwf      Contador        ;Repone el contador nuevamente
           btfsc      PORTB,7         ;Testea último estado de RB7
           goto       RB7_ES_1        ;Está a 1
           bsf        PORTB,7                   ;Está a 0, activa RB7
           goto       Seguir

RB7_ES_1              bcf       PORTB,7                      ;Desactiva RB7

Seguir     movlw      0x3c
           movwf      TMR0               ;Repone el TMR0 con 195
           retfie                        ;Retorno de interrupción

Inicio             clrf PORTB            ;Borra los latch de salida
                        bsf     STATUS,RP0         ;Selecciona banco 1
                        clrf    TRISB              ;Puerta B se configura como salida
                        movlw   b'00011111'
                        movwf   TRISA              ;Puerta A se configura como entrada
                        movlw   b'00000111'
                        movwf   OPTION_REG         ;Preescaler de 256 para el TMR0
                        bcf     STATUS,RP0         ;Selecciona banco 0

;El TMR0 se incrementa cada 1 uS. Si se emplea un preescaler de 256, deberá sufrir 195
;incrementos para provocar una interrupción cada 50000 uS (50 mS). Si esta se repite 5
;veces, el tiempo total transcurrido es de 250000 uS (250 mS). El complemento del valor
;195 en hex. es 0x3c.

                   movlw     0x3c
                   movwf     TMR0               ;Carga el TMR0 con 195
                   movlw     0x05
                   movwf     Contador ;Nº de veces a repetir la interrupción
                   movlw     b'10100000'
                   movwf     INTCON             ;Activa la interrupción del TMR0

Loop               clrwdt                       ;Refresca el WDT
                   btfsc  PORTA,0               ;Testea el estado de RA0
       goto        RA0_ES_1
       bcf         PORTB,0                      ;Desactiva RB0
       goto        TEST_RB1
RA0_ES_1           bsf    PORTB,0                         ;Activa RB0
TEST_RB1           btfsc  PORTA,1               ;Testea el estado de RA1
       goto        RA1_ES_1
       bcf         PORTB,1                      ;Desactiva RB1
       goto        Loop
RA1_ES_1           bsf    PORTB,1                         ;Activa RB1
                   goto   Loop


                   end                          ;Fin del programa fuente




;
;                                                  EJEMPLO 2.15
;
;                                         Autor: Mikel Etxebarria
;                              (c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación y/o MicroPIC Trainer
;
;Generación de ondas cuadradas de diferentes frecuencias variando el valor del TMR0
;
;La línea de salida RB0 cambiará de estado a una frecuencia determinada por el valor
;introducido mediante los 3 interruptores RA0-RA2:
;
;RA2       RA1      RA0        Frecuencia          Periodo               Semiperiodo
;---       ---      ---        ---------- -------            -----------
;0         0        0          0 KHz               ---                   ---
;0         0        1          1 KHz               1000 uS               500 uS
;0         1        0          2 KHz               500 uS                250 uS
;0         1        1          3 KHz               333 uS                166 uS
;1         0        0          4 KHz               250 uS                125 uS
;1         0        1          5 KHz               200 uS                100 uS
;1         1        0          6 KHz               166 uS                83 uS
;1         1        1          7 KHz               143 uS                71 uS
;
;En el tratamiento de interrupción que provocará el desbordamiento del TMR0, se puede
;apreciar como se salva el W y el registro de estado, para recuperarlos posteriormente.
;Es lo que se llama "salvar el contexto"
;

                   List    p=16F84              ;Tipo de procesador
                   include "P16F84.INC"         ;Definiciones de registros internos

Valor              equ       0x0c               ;Variable de frecuencia
W_Temp             equ       0x0d               ;W temporal
Status_Temp        equ       0x0e               ;Registro de estado temporal

                   org       0x00               ;Vector de Reset
                   goto      Inicio
                   org       0x04               ;Vector de interrupción
goto      Interrupcion

;*********************************************************************************
;Tabla: esta rutina devuelve el valor a cargar en el TMR0 según la frecuencia selec-
;cionada. Partiendo de una frecuencia general de 4 MHz, el TMR0 evoluciona cada 1 uS.
;Se selecciona una preescaler de 4. El valor a cargar en TMR0 se obtiene de dividir el
;semiperiodo de la frecuencia deseada entre el preescaler. Al valor obtenido se le
;resta 2 por motivos de sincronismo interno del PIC, se convierte a hex. y se comple-
;menta.

Tabla:            addwf     PCL,F             ;Calcula desplazamiento de la tabla
                  retlw     0x00              ;0 KHz
                  retlw     0x86              ;1 KHz
                  retlw     0xc5              ;2 KHz
                  retlw     0xda              ;3 KHz
                  retlw     0xe4              ;4 KHz
                  retlw     0xea              ;5 KHz
                  retlw     0xee              ;6 KHz
                  retlw     0xf1              ;7 KHz


Interrupcion      movwf     W_Temp            ;Salva el W
                  swapf     STATUS,W
                  movwf     Status_Temp       ;Salva el registro de estado

                  movf      Valor,W
                  movwf     TMR0              ;Recarga el TMR0
                  bcf       INTCON,T0IF       ;Desactiva el flag TMR0
                  movlw     b'00000001'
                  xorwf     PORTB,F                     ;Bascula RB0

                  swapf     Status_Temp,W
                  movwf     STATUS            ;Recupera el registro de estado
                  swapf     W_Temp,F
                  swapf     W_Temp,W          ;Recupera el registro W

                  retfie

Inicio         clrf PORTB            ;Borra los latch de salida
                    bsf     STATUS,RP0         ;Selecciona banco 1
                    clrf    TRISB              ;Puerta B se configura como salida
                    movlw   b'00011111'
                    movwf   TRISA              ;Puerta A se configura como entrada
                    movlw   b'00000001'
                    movwf   OPTION_REG         ;Preescaler de 4 para el TMR0
                    bcf     STATUS,RP0         ;Selecciona banco 0
                    movlw   b'00100000'
                    movwf   INTCON             ;Interrupción TMR0 habilitada

Loop              clrwdt                      ;Refrescar el WDT
                  movf      PORTA,W
                  andlw     b'00000111'
                  btfss     STATUS,Z          ;RA0-RA2 = 0 ??
                  goto      Salida_On         ;No, salida de frecuencia
                  bcf       INTCON,GIE        ;Si, interrupciones OFF, frecuencia OFF
                  goto      Loop

Salida_On         call      Tabla             ;Determina valor a cargar en TMR0
                  movwf     Valor             ;Carga la variable
                  bsf       INTCON,GIE        ;Interrupciones ON
                  goto      Loop

                  end                         ;Fin del programa fuente
;
;                                                   EJEMPLO 2.18
;
;                                        Autor: Mikel Etxebarria
;                              (c) Microsystems Engineering (Bilbao)
;
;Ejemplo para simulación y/o MicroPIC Trainer
;
;El TMR0 como contador de eventos externos
;
;Un sensor optoelectrónico conectado a RA4 genera un pulso cada vez que un objeto se
;iterpone entre el emisor y el receptor de luz. El TMR0 se encarga de contarlos
;dependiendo del valor del preescaler. Dicho valor se ajusta mediante 3 interruptores
;(RA0-RA2) conectados a la Puerta A, existiendo así 8 pre-divisiones:
;
;                              I2        I1         I0                 División
;                              --        --         --                 --------
;                              0         0          0                  1:2
;                              0         0          1                  1:4
;                              0         1          0                  1:8
;                              0         1          1                  1:16
;                              1         0          0                  1:32
;                              1         0          1                  1:64
;                              1         1          0                  1:128
;                              1         1          1                  1:256
;
;          El contaje se va visualizando en binario sobre los leds conectado a la Puerta B y
;debe multiplicarse por el valor del preescaler seleccionado, para determinar el número
;total de pulsos. El contador se resetea al poner RA3 a "1". Debe tenerse en cuenta el
;"efecto rebote" que se produce en el interruptor RA4 de la MicroPIC Trainer.

                    List    p=16F84               ;Tipo de procesador
                    include "P16F84.INC"          ;Definiciones de registros internos

                    org       0x00                ;Vector de Reset
                    goto      Inicio
                    org       0x05                ;Salva vector de interrupción

Inicio         clrf PORTB              ;Borra los latch de salida
                    bsf       STATUS,RP0         ;Selecciona banco 1
                    clrf      TRISB              ;Puerta B se configura como salida
                    movlw     b'00011111'
                    movwf     TRISA              ;Puerta A se configura como entrada
                    movlw     b'00110000'
                    movwf     OPTION_REG         ;TMR0 contador sensible al descendente de RA4
                    bcf       STATUS,RP0         ;Selecciona banco 0


Loop                clrf      TMR0             ;Puesta a 0 del contador
Loop1:              clrwdt                     ;Refresca el WDT
                    btfsc     PORTA,3                     ;Mira si I3 está activo (RESET)
                    goto      Loop             ;Si Cuenta detenida y puesta a 0
                    movf      PORTA,W       ;No, leer I2-I0 para formar el nuevo valor
                    andlw     b'00000111' ;del preescaler
                    bsf       STATUS,RP0     ;Selecciona página 1
                    iorwf     OPTION_REG,F ;Actualiza el nuevo valor del preescaler
                    bcf       STATUS,RP0       ;Selecciona página 0
                    movf      TMR0,W       ;Lee el valor del contador
                    movwf     PORTB            ;Salida a leds
                    goto      Loop1

                    end                           ;Fin del programa fuente




;
;                                                   EJEMPLO 3.1
;
;                                        Autor: Mikel Etxebarria
;                              (c) Microsystems Engineering (Bilbao)
;
;Ejemplo para MicroPIC Trainer y Trainer PLUS
;
;Introducción al manejo del teclado.
;
;Haciendo uso de las rutinas incluidas en el fichero TECLADO.INC, se trata de leer el tecla-
;do y, visualizar sobre los leds de la puerta B el código binario de la tecla pulsada. La
;visualización se mantiene estable durante dos segundos hasta una nueva pulsación.
;
;Se trata de un ejemplo en el que la Puerta B se reconfigura dinámicamente. Inicialmente es
;configurada como salida para presentación del resultado. Posteriormente, la rutina de
;exploración del teclado reconfigura RB0-RB3 como entradas y RB4-RB7 como salidas.

                   List    p=16F84              ;Tipo de procesador
                   include "P16F84.INC"         ;Definiciones de registros internos

Key_var            equ       0x0c               ;Inicio de las variables de manejo del teclado
Delay_Cont         equ       0x12               ;Variable para la temporización

                   org       0x00               ;Vector de Reset
                   goto      Inicio
                   org       0x05               ;Salva vector de interrupción

                   include "TECLADO.INC" ;Incluye rutinas de manejo del teclado

;*********************************************************************************
;Delay_var: Esta rutina de propósito general realiza una temporización variable
;entre 50 mS y 12.8". Se emplea un preescaler de 256 y al TMR0 se le carga con 195.
;La velocidad de trabajo es de 4Mhz y por tanto el TMR0 se incrementa cada uS. De
;esta forma, el TMR0 debe contar 195 eventos que, con un preescaler de 256 hace una
;intervalo total de 50000 uS/50 mS (195 * 256). El valor 195 hay que expresarlo
;en Hex. (c3) y como el TMR0 es ascendente habrá que cargar su complemento (3C hex.)
;Dicho intervalo de 50 mS se repite tantes veces como indique la variable "Delay_cont",
;es por ello que el delay mínimo es de 50 mS ("Delay_cont=1) y el máxima de 12.8"
;(Delay_cont=255).

Delay_var:         bcf       INTCON,T0IF         ;Desconecta el flag de rebosamiento
                   movlw     0x3c                ;Complemento hex. de 195
                   movwf     TMR0                ;carga el TMR0
Intervalo clrwdt                       ;Refrescar el WDT
                   btfss     INTCON,T0IF         ;Rebasamiento del TMR0 ??
                   goto      Intervalo ;Todavía no
                   decfsz    Delay_Cont,F        ;Decrementa contador de intervalos
                   goto      Delay_var           ;Repite el intervalo de 50 mS
                   return

Inicio        clrf PORTB              ;Borra los latch de salida
                   bsf       STATUS,RP0         ;Selecciona banco 1
                   clrf      TRISB              ;Puerta B se configura como salida
                   movlw     b'00000111'
                   movwf     OPTION_REG         ;Preescaler de 256 para el TMR0
                   bcf       STATUS,RP0         ;Selecciona banco 0

Loop               clrwdt                       ;Refresco del WDT
                   call      Key_Scan           ;Explora el teclado
                   movlw     0x80
                   subwf     Tecla,W
                   btfsc     STATUS,Z           ;Hay alguna pulsada ??
                   goto      Loop               ;No

                   movf      Tecla,W            ;Lee el código de la tecla pulsada
                   movwf     PORTB              ;Lo visualiza sobre los leds de la Puerta B
                   movlw     .40
movwf    Delay_Cont
                       call     Delay_var             ;Temporiza 2 segundos
                       clrf     PORTB                 ;Desactiva visualización
                       goto     Loop

                       end                            ;Fin del programa fuente

; SEPTIMO2.ASM: Programa que cuenta ininterrumpidamente del 0 al valor
; introducido mediante tres interruptores en RA0, RA1 y RA2.
; Cada 50ms cambia el valor del display.
; Frecuencia del PIC: 4 MHz

            LIST    P=16C84
                     RADIX HEX

            w     EQU 0
            f    EQU 1
            PCL    EQU 0x02
            PUERTAA EQU 0x05
            PUERTAB EQU 0x06
            ESTADO EQU 0x03
            VALOR    EQU 0x12   ; Cota superior del contador
            ACTUAL EQU 0x13      ; Valor actual del contaje
            TEMP    EQU 0x14  ; Variable de temporizaciones
            TMR0OPT EQU 0x01
            INTCON EQU 0x0B

            VALORTMP EQU d'10' ; Valor para la temporizaci¢n
            VALORTIMER EQU d'59' ; Valor inicial del TIMER0

; RUTINA PRINCIPAL: Lectura de los interruptores y c lculo del valor a visualizar


                      ORG         0
            goto   inicio        ; Para saltar el Vector de
                                                       ; Interrupci¢n
            ORG 4                ; Vector de interrupci¢n
            goto int           ; Interrupci¢n del TIMER0

inicio                 bsf      ESTADO,5              ; Selecci¢n del banco 1
                       clrw
                       movwf    PUERTAB                         ; Puerta B salida
                       movlw    0xff
                       movwf    PUERTAA                        ; puerta A entrada
                       bcf      ESTADO,5            ; Selecci¢n banco 0
explora                movf     PUERTAA,w           ; Se cargan los
                                                    ; interruptores en W
                   movwf VALOR                      ; Se usa un registro
                                                    ; auxiliar
            comf VALOR,f          ; Invertir los niveles de
                                                    ; interuptores
            movlw b'00000111' ; aplicamos una m scara
            andwf VALOR,f          ; para borrar la parte alta
                        ; en VALOR queda valor superior
                        ; de contaje
            clrf ACTUAL          ; valor actual de contaje=0
            clrf TEMP         ; Variable temporizadora=0


; MàDULO CONTADOR -------------------------------------------------------

temporiza        clrwdt
            bcf ESTADO,5
            movf TEMP,f       ; Comprueba TEMP
            btfss ESTADO,2
            goto temporiza   ; Si temp <> 0
            call visualiza ; Si temp = 0
call cargartimer
            movlw VALORTMP
            movwf TEMP
            goto temporiza


; CARGA EL TIMER Y EL PRESCALER-----------------------------------------

cargartimer bcf ESTADO,5
         movlw VALORTIMER        ; Valor a cargar en el Timer:
         movwf TMR0OPT        ; 255 - 59 = 196 = Ciclos de contaje
                   ; 196 x 255 = 49980 microsegundos
                   ; A 4Mhz 1 ciclo = 1 microsegundo
                   ; Cada ciclo del TIMER0 son 50ms

            bsf ESTADO,5      ; P gina 1
            movlw b'10000111' ; Prescaler de 255
            movwf TMR0OPT
            movlw b'10100000' ; Interrupci¢n por timer0
            movwf INTCON
            bcf ESTADO,5
            return

; TRATAMIENTO DE INTERRUPCIONES ----------------------------------------

int          decf TEMP,f
            call cargartimer
            retfie


; TRATAMIENTO DEL CONTADOR ---------------------------------------------

visualiza   bcf ESTADO,5
         movfw ACTUAL           ; Representa el n£mero actual
         call display
         movwf PUERTAB           ; Incrementa el n£mero
         movfw VALOR          ; VALOR -> W
         subwf ACTUAL,w         ; ACTUAL - W ( ACTUAL - VALOR )
         btfsc ESTADO,0      ; ¨ACTUAL < VALOR? -> flag C = 0
         goto comienzo    ; SI: pone a 0 el display
         incf ACTUAL,f      ; NO: incrementa ACTUAL
         return
comienzo      clrf ACTUAL
         return

; TABLA DE CONVERSION---------------------------------------------------------

display       addwf PCL,f          ; pcl + W -> W
                                                   ; El pcl se incrementa con el
                                                   ; valor de W proporcionando un
                                                   ; salto
            retlw 0x3F         ; Retorna con el valor del
                                                   ; c¢digo del 0
                    retlw      0x06                ; Retorna con el c¢digo del 1
                    retlw      0x5b                ; Retorna con el c¢digo del 2
                    retlw      0x4f                ; Retorna con el c¢digo del 3
                    retlw      0x66                ; Retorna con el c¢digo del 4
                    retlw      0x6d                ; Retorna con el c¢digo del 5
                    retlw      0x7d                ; Retorna con el c¢digo del 6
                    retlw      0x07                ; Retorna con el c¢digo del 7

                    END
;
;                                                PRACTICA 10
;
;                                       Autor: Mikel Etxebarria
;                            (c) Microsystems Engineering (Bilbao)
;
;
;Otras interrupciones
;
;Los dispositivos PIC pueden provocar interrupción por otras dos causas diferentes además de
;por la del TMR0. Una de ellas es por la detección de una señal de un determinado flanco por
;la entrada RB0/INT. La otra es por el cambio de estado lógico producido en cualquiera de las
;líneas de entrada RB4-RB7.
;
;El ejemplo pretende mostrar la detección y tratamiento de cada una de estas nuevas fuentes de
;interrupción. Cuando se produce la interrupción RB0/INT se activa la salida RA0 durante 1".
;Cuando se produce la interrupción por cambio de estado en RB4-RB7 se activa la salida RA1
;durante 1".


                   List    p=16F84              ;Tipo de procesador
                   include "P16F84.INC"         ;Definiciones de registros internos

Temp               equ       0x0c               ;Variable para la temporización

                   org       0x00               ;Vector de Reset
                   goto      Inicio

                   org       0x04               ;Vector de interrupción

;Programa de tratamiento de la interrupción

Tratamiento        btfsc     INTCON,INTF        ;Ha sido el RB0/INT ??
                   goto      Tratar_INTF        ;Si
                   btfss     INTCON,RBIF        ;No, ha sido cambio en RB4-RB7 ?
                   goto      Fin_Tratamiento    ;No, falsa interrupción

Cambio_RB4_RB7bsf            PORTA,1                      ;Activa salida RB1
              goto           Fin

Tratar_INTF        bsf       PORTA,0                      ;Activa salida RB0

;Se hace un delay de 1 segundo antes de reponer los correspondientes flags de interrupción.
;De esta forma se evitan posibles rebotes que puediera haber en las entradas.

Fin                movlw .20               ;Comienza una temporización de 1"
                   movwf Temp              ;Inicia una variable temporal
Seguir   bcf       INTCON,T0IF    ;Repone el flag del TMR0
                   movlw ~.195
        movwf      TMR0           ;Repone el TMR0 con el complemento de 195
Delay_50mS         clrwdt                  ;Comienza un bucle de temporización de 50mS
                   btfss  INTCON,T0IF      ;Fin de los 50 mS ??
                   goto   Delay_50mS       ;Todavía no
                   nop
                   decfsz Temp,F           ;Se ha repetido 20 veces los 50mS ??
                   goto   Seguir           ;No

Fin_Tratamiento    clrf      PORTA              ;Si, ha pasado 1". Desconecta las salidas
                   movf      PORTB,W                       ;Lee estado actual de las entradas RA4-RA7 para reponer
                   bcf       INTCON,RBIF        ;el flag de interrupción por cambio en RB4-RB7. Hay que
                                                ;hacerlo en este órden

                   bcf       INTCON,INTF        ;Repone el flag de interrupción por RBO/INT
                   retfie                       ;Retorno de interrupción

Inicio         clrf PORTA        ;Borra los latch de salida
                    bsf   STATUS,RP0       ;Selecciona banco 1
clrf     TRISA               ;Puerta A se configura como salidas
                   movlw    b'11111111'
                   movwf    TRISB               ;Puerta B se configura como entrada
                   movlw    b'01000111'         ;Preescaler de 256 asignado al TMR0 y
                   movwf    OPTION_REG          ;RB0/INT sensible al flanco ascendente
                   bcf      STATUS,RP0          ;Selecciona banco 0

                   movf     PORTB,W                       ;Lee el estado inicial de las entradas RB4-RB7
                   movlw    b'10011000'
                   movwf    INTCON              ;Activa la interrupcines INTF y RBIF


Loop               sleep                        ;El dispositivo queda en standby
                   goto     Loop


                   end                          ;Fin del programa fuente


;
;                                                  PRACTICA 8
;
;                                         Autor: Mikel Etxebarria
;                               (c) Microsystems Engineering (Bilbao)
;
;
;El modo TMR0 como contador de eventos externos
;
;El ejemplo pretende mostrar el funcionamiento del TMR0 en el modo contador. Mediante las
;entradas RA0-RA3 se introduce el número de pulsos a contar. Por RA4 se aplican dichos pulsos
;Cuando se alcance el valor deseado se disparan dos salidas durante un tiempo. La salida RB1 se
;utiliza para desconectar la fuente de entrada de pulsos y RB0 para activar cualquier otro
;dispositivo (p.e. un relé, en led, etc.)

;El WDT se empleará a modo de temporizador para determinar el tiempo de disparo de ambas
;salidas


                   List    p=16F84              ;Tipo de procesador
                   include "P16F84.INC"         ;Definiciones de registros internos

                   org      0x00                ;Vector de Reset
                   goto     Inicio
                   org      0x05                ;Salva vector de interrupción

Inicio        clrf PORTB             ;Borra los latch de salida
                   bsf      STATUS,RP0         ;Selecciona banco 1
                   clrf     TRISB              ;Puerta B se configura como salida
                   movlw    b'00011111'
                   movwf    TRISA              ;RA0-RA4 entradas
                   movlw    b'00111111'
                   movwf    OPTION_REG         ;Preescaler de 256 para el WDT. El TMR0 evoluciona a
                                               ;cada flanco descendente aplicado por RA4
                   bcf      STATUS,RP0         ;Selecciona banco 0

Loop               movf     PORTA,W
                   andlw    b'00001111'         ;Lee las entradas RA0-RA3
                   xorlw    b'11111111'         ;Complementa el valor leído (el TMR0 es ascendente)
                   addlw    .1
                   movwf    TMR0                ;Carga el TMR0 con el valor leído
                   bsf      PORTB,1                       ;Activa la entrada de pulsos a contar
                   bcf      INTCON,T0IF         ;Repone el flag del TMR0

Espera             clrwdt                       ;Refresca el WDT
                   btfss    INTCON,T0IF         ;Ha finalizado la cuenta ??
                   goto     Espera              ;No
bcf      PORTB,1             ;Desconecta la entrada de pulsos a contar
bsf      PORTB,0             ;Activa la salida a relé, led, etc.
clrwdt             ;El WDT se refresca y comienza la temporización
sleep              ;El modo standby se mantiene hasta que el WDT desborde
                   ;transcurridos aprox. 2" (18mS*256 de preescaler)

bcf      PORTB,0            ;Desactiva la salida a relé, led, etc.
goto     Loop

end                ;Fin del programa fuente

Contenu connexe

Tendances

Syllabus procesamiento digital de señale_sjc
 Syllabus procesamiento digital de señale_sjc Syllabus procesamiento digital de señale_sjc
Syllabus procesamiento digital de señale_sjcjcbenitezp
 
Unidad 3 c3-control /FUNCION DE TRANFERENCIA PULSO
Unidad 3 c3-control /FUNCION DE TRANFERENCIA PULSOUnidad 3 c3-control /FUNCION DE TRANFERENCIA PULSO
Unidad 3 c3-control /FUNCION DE TRANFERENCIA PULSODavinso Gonzalez
 
Configuracion de multivibradores
Configuracion de multivibradoresConfiguracion de multivibradores
Configuracion de multivibradoresCristian Peña
 
Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.
Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.
Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.Manuel Fernandez Barcell
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesLuis Zurita
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesLuis Zurita
 
Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Luis Zurita
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadoresDavid Narváez
 
Guía Transformadas de Funciones
Guía Transformadas de Funciones Guía Transformadas de Funciones
Guía Transformadas de Funciones Abril Bello
 
Root locus cap_9_parte_2_color
Root locus cap_9_parte_2_colorRoot locus cap_9_parte_2_color
Root locus cap_9_parte_2_colorFernando Passold
 
Práctica de flip flops
Práctica de flip flopsPráctica de flip flops
Práctica de flip flopskartorrealba
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASMdave
 

Tendances (20)

Syllabus procesamiento digital de señale_sjc
 Syllabus procesamiento digital de señale_sjc Syllabus procesamiento digital de señale_sjc
Syllabus procesamiento digital de señale_sjc
 
Unidad 3 c3-control /FUNCION DE TRANFERENCIA PULSO
Unidad 3 c3-control /FUNCION DE TRANFERENCIA PULSOUnidad 3 c3-control /FUNCION DE TRANFERENCIA PULSO
Unidad 3 c3-control /FUNCION DE TRANFERENCIA PULSO
 
Configuracion de multivibradores
Configuracion de multivibradoresConfiguracion de multivibradores
Configuracion de multivibradores
 
Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.
Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.
Tema 6: Introducción al Diseño Secuencial: Contadores y Registros.
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupciones
 
Programación PIC16F84A
Programación PIC16F84AProgramación PIC16F84A
Programación PIC16F84A
 
Guía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupcionesGuía rápida tmr0 e interrupciones
Guía rápida tmr0 e interrupciones
 
CONJUNTO DE INSTRUCCIONES PIC16F877A
CONJUNTO DE INSTRUCCIONES PIC16F877ACONJUNTO DE INSTRUCCIONES PIC16F877A
CONJUNTO DE INSTRUCCIONES PIC16F877A
 
El PIC16F84
El PIC16F84El PIC16F84
El PIC16F84
 
MARLON
MARLONMARLON
MARLON
 
Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4Guía de ejercicios resueltos y propuestos tema 4
Guía de ejercicios resueltos y propuestos tema 4
 
4. interrupciones y temporizadores
4. interrupciones y temporizadores4. interrupciones y temporizadores
4. interrupciones y temporizadores
 
Registro status PIC16F84A
Registro status PIC16F84ARegistro status PIC16F84A
Registro status PIC16F84A
 
Guía Transformadas de Funciones
Guía Transformadas de Funciones Guía Transformadas de Funciones
Guía Transformadas de Funciones
 
Root locus cap_9_parte_2_color
Root locus cap_9_parte_2_colorRoot locus cap_9_parte_2_color
Root locus cap_9_parte_2_color
 
Polarización FET
Polarización FETPolarización FET
Polarización FET
 
Práctica de flip flops
Práctica de flip flopsPráctica de flip flops
Práctica de flip flops
 
Programación GRAFCET
Programación GRAFCETProgramación GRAFCET
Programación GRAFCET
 
Subrutinas de retardo
Subrutinas de retardoSubrutinas de retardo
Subrutinas de retardo
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASM
 

Similaire à Ejemplos De Timer E Interrupcion

Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupcionesLuis Zurita
 
Examen 4 intensivo micro
Examen 4 intensivo microExamen 4 intensivo micro
Examen 4 intensivo microLuis Zurita
 
Examen micros t1_06_solucion
Examen micros t1_06_solucionExamen micros t1_06_solucion
Examen micros t1_06_solucionJair BG
 
Manejo de Puertos PIC
Manejo de Puertos PICManejo de Puertos PIC
Manejo de Puertos PICSawy G
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorDaniel Pardo
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4Luis Zurita
 
Proyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitProyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitEnrique Trascastro
 
Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Raphael Raphael
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesiDavid Narváez
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Hamiltonn Casallas
 
Puente garaje-asm
Puente garaje-asmPuente garaje-asm
Puente garaje-asmjoaquinin1
 
Galo reyes tarea7
Galo reyes tarea7Galo reyes tarea7
Galo reyes tarea7Galo Reyes
 

Similaire à Ejemplos De Timer E Interrupcion (20)

In terrupciones pic
In terrupciones picIn terrupciones pic
In terrupciones pic
 
Uso del tmr0
Uso del tmr0Uso del tmr0
Uso del tmr0
 
Ejemplo varias interrupciones
Ejemplo varias interrupcionesEjemplo varias interrupciones
Ejemplo varias interrupciones
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Examen 4 intensivo micro
Examen 4 intensivo microExamen 4 intensivo micro
Examen 4 intensivo micro
 
Examen micros t1_06_solucion
Examen micros t1_06_solucionExamen micros t1_06_solucion
Examen micros t1_06_solucion
 
Manejo de Puertos PIC
Manejo de Puertos PICManejo de Puertos PIC
Manejo de Puertos PIC
 
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizadorLab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
Lab 8 eeprom_de_datos_y_tmr0_contador_y_temporizador
 
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4GUÍA DE EJERCICIOS RESUELTOS TEMA 4
GUÍA DE EJERCICIOS RESUELTOS TEMA 4
 
PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84PROYECTOS CON PIC 16F84
PROYECTOS CON PIC 16F84
 
Proyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekitProyectos con el pic16 f84 cekit
Proyectos con el pic16 f84 cekit
 
Proye84
Proye84Proye84
Proye84
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Niple diapopsitiva
Niple   diapopsitivaNiple   diapopsitiva
Niple diapopsitiva
 
Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877Descripcion detallada del pic 16 f877
Descripcion detallada del pic 16 f877
 
Interrupciones y Temporizadores pucesi
Interrupciones y Temporizadores   pucesiInterrupciones y Temporizadores   pucesi
Interrupciones y Temporizadores pucesi
 
Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06Curso de microcontroladores capitulo 06
Curso de microcontroladores capitulo 06
 
Puente garaje-asm
Puente garaje-asmPuente garaje-asm
Puente garaje-asm
 
Galo reyes tarea7
Galo reyes tarea7Galo reyes tarea7
Galo reyes tarea7
 

Plus de Luis Zurita

TALLER NORMAS APA
TALLER NORMAS APATALLER NORMAS APA
TALLER NORMAS APALuis Zurita
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUSLuis Zurita
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y tecladoLuis Zurita
 
Grupos micro2 13
Grupos micro2 13Grupos micro2 13
Grupos micro2 13Luis Zurita
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreLuis Zurita
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronicaLuis Zurita
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iycLuis Zurita
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013Luis Zurita
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronicaLuis Zurita
 
Acumuladas electronica
Acumuladas electronicaAcumuladas electronica
Acumuladas electronicaLuis Zurita
 

Plus de Luis Zurita (20)

TALLER NORMAS APA
TALLER NORMAS APATALLER NORMAS APA
TALLER NORMAS APA
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUS
 
Guía rápidalcd y teclado
Guía rápidalcd y tecladoGuía rápidalcd y teclado
Guía rápidalcd y teclado
 
Pevmicroi ieo
Pevmicroi ieoPevmicroi ieo
Pevmicroi ieo
 
Pevmicroii13 2
Pevmicroii13 2Pevmicroii13 2
Pevmicroii13 2
 
Pevmicro1 t2 13
Pevmicro1 t2 13Pevmicro1 t2 13
Pevmicro1 t2 13
 
Pev electronica
Pev electronicaPev electronica
Pev electronica
 
Grupos micro2 13
Grupos micro2 13Grupos micro2 13
Grupos micro2 13
 
Pevmicro1 t2 13
Pevmicro1 t2 13Pevmicro1 t2 13
Pevmicro1 t2 13
 
Micro2 tema 5
Micro2 tema 5Micro2 tema 5
Micro2 tema 5
 
Micro2 tema 4
Micro2 tema 4Micro2 tema 4
Micro2 tema 4
 
Micro2 tema 3
Micro2 tema 3Micro2 tema 3
Micro2 tema 3
 
Micro2 tema 1
Micro2 tema 1Micro2 tema 1
Micro2 tema 1
 
Manejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladoreManejo de perifericos para microcontroladore
Manejo de perifericos para microcontroladore
 
Pevmicroii13 2
Pevmicroii13 2Pevmicroii13 2
Pevmicroii13 2
 
Notas def electronica
Notas def electronicaNotas def electronica
Notas def electronica
 
Notas proyecto3 iyc
Notas proyecto3 iycNotas proyecto3 iyc
Notas proyecto3 iyc
 
Notas definitivas iyc2013
Notas definitivas iyc2013Notas definitivas iyc2013
Notas definitivas iyc2013
 
Proyecto 2 electronica
Proyecto 2 electronicaProyecto 2 electronica
Proyecto 2 electronica
 
Acumuladas electronica
Acumuladas electronicaAcumuladas electronica
Acumuladas electronica
 

Dernier

Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Ecosistemas Natural, Rural y urbano 2021.pptx
Ecosistemas Natural, Rural y urbano  2021.pptxEcosistemas Natural, Rural y urbano  2021.pptx
Ecosistemas Natural, Rural y urbano 2021.pptxolgakaterin
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 

Dernier (20)

Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Ecosistemas Natural, Rural y urbano 2021.pptx
Ecosistemas Natural, Rural y urbano  2021.pptxEcosistemas Natural, Rural y urbano  2021.pptx
Ecosistemas Natural, Rural y urbano 2021.pptx
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 

Ejemplos De Timer E Interrupcion

  • 1. ;El objetivo de este programa es mostrar en la práctica el funcionamiento del Watchdog en el PIC 16c84. ;El programa entra en un bucle infinito del que sale tras cumplirse la temporización asignada al watchdog, que en este ;caso serán 36 ms, es decir 2 veces la temporización nominal. LIST p=16c84 STATUS EQU 03H OPT EQU 01H ; Programa principal: ORG 10 bsf STATUS,5 ;Banco de registros 1 movlw b'00001001' movwf OPT ; Se asigna el preescaler a watchdog con un factor de división de 1:2. clrwdt ; se inicializa el WD bucle goto bucle END ;**** OTRO EJEMPLO **** ; EJEMPLO de interrupciones en el PIC16c84. Se trata de realizar una temporización de 150ms utilizando el reloj ; de 100Khz de un PIC LIST p=16c84 ; Tipo de pic que vamos a usar STATUS EQU 03H INTCON EQU 0BH TR0_OPT EQU 01H ; TIMER0 en banco 0, OPTION en banco 1 ORG 0 ; Vector de RESET goto EMPIEZA ORG 4 ; Vector de interrupciones goto TRATINT EMPIEZA bsf STATUS,5 ; Página de registros 1 movlw b'00000011' ; Prescaler x16 asignado a TMR0 movwf TMR0_OPT movlw b'10100000' ; Activamos interrupción por TMR0 movwf INTCON ; No es necesario volver a cambiar de página porque INTCON está en p g 0 y 1. bcf STATUS,5 ; Selección de página de registros 0 movlw d'22' movwf TMR0_OPT ; Cargamos el TMR0 con el valor 22 decimal BUCLE goto BUCLE ; Nos quedaremos aquí hasta que se produzca la interrupción TRATINT ; Aqui se incluir n los tratamientos de las interrupciones, de momento nos limitaremos a poner W a 0 ;(para que se vea que se ha producido la interrupción) y esperar a que el WatchDog reinicie el PIC. movlw 0 FIN goto FIN END ;*** Otro Ejemplo **** ; Programa que muestra el funcionamiento del timer: Realiza una temporización de 100 ms list P=16c84 ; tipo de pic intcon equ 0BH tmr_opt equ 01H t0if equ 02h status equ 03h org 0 movlw b'00000000' movwf intcon ; desactiva interrupciones bsf status,5 ; página 1 movlw b'00000011' ; prescaler asignado al timer con un movwf tmr_opt ; factor de 16
  • 2. bcf status,5 ; página 0 movlw b'01100100' ; se inicializa TMR0 con 100 movwf tmr_opt bucle btfsc intcom,t0if ; si el bit t0if del intcon es 1 goto fin ; indica que el timer se ha sobre- goto bucle ; pasado y entonces se salta a fin ; si no se vuelve al bucle fin End ; ; EJEMPLO 2.10 ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ;Ejemplo para simulación y/o MicroPIC Trainer ; ;La interrupción del TMR0. ; ;Se trata de comprobar la interrupción provocada por el TMR0. El programa ;lee el estado de los interruptores conectados a RA0 y RA4 para reflejarlo en ;los leds conectados a RB0 y RB4 respectivamente. Al mismo tiempo el TMR0 ;genera una interrupción cada 0.05 seg. (50 mS) que se repetirá 5 veces con objeto ;de hacer intermitencia de 250 mS sobre el led conectado a RB7. List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos Contador equ 0x0c ;Variable para la temporización org 0x00 ;Vector de Reset goto Inicio org 0x04 ;Vector de interrupción Interrupcion bcf INTCON,T0IF ;Repone flag del TMR0 decfsz Contador,F ;Decrementa el contador goto Seguir Con_si_0 movlw 5 movwf Contador ;Repone el contador nuevamente btfsc PORTB,7 ;Testea último estado de RB7 goto RB7_ES_1 ;Está a 1 bsf PORTB,7 ;Está a 0, activa RB7 goto Seguir RB7_ES_1 bcf PORTB,7 ;Desactiva RB7 Seguir movlw 0x3c movwf TMR0 ;Repone el TMR0 con 195 retfie ;Retorno de interrupción Inicio clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1 clrf TRISB ;Puerta B se configura como salida movlw b'00011111' movwf TRISA ;Puerta A se configura como entrada movlw b'00000111' movwf OPTION_REG ;Preescaler de 256 para el TMR0 bcf STATUS,RP0 ;Selecciona banco 0 ;El TMR0 se incrementa cada 1 uS. Si se emplea un preescaler de 256, deberá sufrir 195 ;incrementos para provocar una interrupción cada 50000 uS (50 mS). Si esta se repite 5 ;veces, el tiempo total transcurrido es de 250000 uS (250 mS). El complemento del valor
  • 3. ;195 en hex. es 0x3c. movlw 0x3c movwf TMR0 ;Carga el TMR0 con 195 movlw 0x05 movwf Contador ;Nº de veces a repetir la interrupción movlw b'10100000' movwf INTCON ;Activa la interrupción del TMR0 Loop clrwdt ;Refresca el WDT btfsc PORTA,0 ;Testea el estado de RA0 goto RA0_ES_1 bcf PORTB,0 ;Desactiva RB0 goto TEST_RB1 RA0_ES_1 bsf PORTB,0 ;Activa RB0 TEST_RB1 btfsc PORTA,1 ;Testea el estado de RA1 goto RA1_ES_1 bcf PORTB,1 ;Desactiva RB1 goto Loop RA1_ES_1 bsf PORTB,1 ;Activa RB1 goto Loop end ;Fin del programa fuente ; ; EJEMPLO 2.15 ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ;Ejemplo para simulación y/o MicroPIC Trainer ; ;Generación de ondas cuadradas de diferentes frecuencias variando el valor del TMR0 ; ;La línea de salida RB0 cambiará de estado a una frecuencia determinada por el valor ;introducido mediante los 3 interruptores RA0-RA2: ; ;RA2 RA1 RA0 Frecuencia Periodo Semiperiodo ;--- --- --- ---------- ------- ----------- ;0 0 0 0 KHz --- --- ;0 0 1 1 KHz 1000 uS 500 uS ;0 1 0 2 KHz 500 uS 250 uS ;0 1 1 3 KHz 333 uS 166 uS ;1 0 0 4 KHz 250 uS 125 uS ;1 0 1 5 KHz 200 uS 100 uS ;1 1 0 6 KHz 166 uS 83 uS ;1 1 1 7 KHz 143 uS 71 uS ; ;En el tratamiento de interrupción que provocará el desbordamiento del TMR0, se puede ;apreciar como se salva el W y el registro de estado, para recuperarlos posteriormente. ;Es lo que se llama "salvar el contexto" ; List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos Valor equ 0x0c ;Variable de frecuencia W_Temp equ 0x0d ;W temporal Status_Temp equ 0x0e ;Registro de estado temporal org 0x00 ;Vector de Reset goto Inicio org 0x04 ;Vector de interrupción
  • 4. goto Interrupcion ;********************************************************************************* ;Tabla: esta rutina devuelve el valor a cargar en el TMR0 según la frecuencia selec- ;cionada. Partiendo de una frecuencia general de 4 MHz, el TMR0 evoluciona cada 1 uS. ;Se selecciona una preescaler de 4. El valor a cargar en TMR0 se obtiene de dividir el ;semiperiodo de la frecuencia deseada entre el preescaler. Al valor obtenido se le ;resta 2 por motivos de sincronismo interno del PIC, se convierte a hex. y se comple- ;menta. Tabla: addwf PCL,F ;Calcula desplazamiento de la tabla retlw 0x00 ;0 KHz retlw 0x86 ;1 KHz retlw 0xc5 ;2 KHz retlw 0xda ;3 KHz retlw 0xe4 ;4 KHz retlw 0xea ;5 KHz retlw 0xee ;6 KHz retlw 0xf1 ;7 KHz Interrupcion movwf W_Temp ;Salva el W swapf STATUS,W movwf Status_Temp ;Salva el registro de estado movf Valor,W movwf TMR0 ;Recarga el TMR0 bcf INTCON,T0IF ;Desactiva el flag TMR0 movlw b'00000001' xorwf PORTB,F ;Bascula RB0 swapf Status_Temp,W movwf STATUS ;Recupera el registro de estado swapf W_Temp,F swapf W_Temp,W ;Recupera el registro W retfie Inicio clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1 clrf TRISB ;Puerta B se configura como salida movlw b'00011111' movwf TRISA ;Puerta A se configura como entrada movlw b'00000001' movwf OPTION_REG ;Preescaler de 4 para el TMR0 bcf STATUS,RP0 ;Selecciona banco 0 movlw b'00100000' movwf INTCON ;Interrupción TMR0 habilitada Loop clrwdt ;Refrescar el WDT movf PORTA,W andlw b'00000111' btfss STATUS,Z ;RA0-RA2 = 0 ?? goto Salida_On ;No, salida de frecuencia bcf INTCON,GIE ;Si, interrupciones OFF, frecuencia OFF goto Loop Salida_On call Tabla ;Determina valor a cargar en TMR0 movwf Valor ;Carga la variable bsf INTCON,GIE ;Interrupciones ON goto Loop end ;Fin del programa fuente
  • 5. ; ; EJEMPLO 2.18 ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ;Ejemplo para simulación y/o MicroPIC Trainer ; ;El TMR0 como contador de eventos externos ; ;Un sensor optoelectrónico conectado a RA4 genera un pulso cada vez que un objeto se ;iterpone entre el emisor y el receptor de luz. El TMR0 se encarga de contarlos ;dependiendo del valor del preescaler. Dicho valor se ajusta mediante 3 interruptores ;(RA0-RA2) conectados a la Puerta A, existiendo así 8 pre-divisiones: ; ; I2 I1 I0 División ; -- -- -- -------- ; 0 0 0 1:2 ; 0 0 1 1:4 ; 0 1 0 1:8 ; 0 1 1 1:16 ; 1 0 0 1:32 ; 1 0 1 1:64 ; 1 1 0 1:128 ; 1 1 1 1:256 ; ; El contaje se va visualizando en binario sobre los leds conectado a la Puerta B y ;debe multiplicarse por el valor del preescaler seleccionado, para determinar el número ;total de pulsos. El contador se resetea al poner RA3 a "1". Debe tenerse en cuenta el ;"efecto rebote" que se produce en el interruptor RA4 de la MicroPIC Trainer. List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos org 0x00 ;Vector de Reset goto Inicio org 0x05 ;Salva vector de interrupción Inicio clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1 clrf TRISB ;Puerta B se configura como salida movlw b'00011111' movwf TRISA ;Puerta A se configura como entrada movlw b'00110000' movwf OPTION_REG ;TMR0 contador sensible al descendente de RA4 bcf STATUS,RP0 ;Selecciona banco 0 Loop clrf TMR0 ;Puesta a 0 del contador Loop1: clrwdt ;Refresca el WDT btfsc PORTA,3 ;Mira si I3 está activo (RESET) goto Loop ;Si Cuenta detenida y puesta a 0 movf PORTA,W ;No, leer I2-I0 para formar el nuevo valor andlw b'00000111' ;del preescaler bsf STATUS,RP0 ;Selecciona página 1 iorwf OPTION_REG,F ;Actualiza el nuevo valor del preescaler bcf STATUS,RP0 ;Selecciona página 0 movf TMR0,W ;Lee el valor del contador movwf PORTB ;Salida a leds goto Loop1 end ;Fin del programa fuente ;
  • 6. ; EJEMPLO 3.1 ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ;Ejemplo para MicroPIC Trainer y Trainer PLUS ; ;Introducción al manejo del teclado. ; ;Haciendo uso de las rutinas incluidas en el fichero TECLADO.INC, se trata de leer el tecla- ;do y, visualizar sobre los leds de la puerta B el código binario de la tecla pulsada. La ;visualización se mantiene estable durante dos segundos hasta una nueva pulsación. ; ;Se trata de un ejemplo en el que la Puerta B se reconfigura dinámicamente. Inicialmente es ;configurada como salida para presentación del resultado. Posteriormente, la rutina de ;exploración del teclado reconfigura RB0-RB3 como entradas y RB4-RB7 como salidas. List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos Key_var equ 0x0c ;Inicio de las variables de manejo del teclado Delay_Cont equ 0x12 ;Variable para la temporización org 0x00 ;Vector de Reset goto Inicio org 0x05 ;Salva vector de interrupción include "TECLADO.INC" ;Incluye rutinas de manejo del teclado ;********************************************************************************* ;Delay_var: Esta rutina de propósito general realiza una temporización variable ;entre 50 mS y 12.8". Se emplea un preescaler de 256 y al TMR0 se le carga con 195. ;La velocidad de trabajo es de 4Mhz y por tanto el TMR0 se incrementa cada uS. De ;esta forma, el TMR0 debe contar 195 eventos que, con un preescaler de 256 hace una ;intervalo total de 50000 uS/50 mS (195 * 256). El valor 195 hay que expresarlo ;en Hex. (c3) y como el TMR0 es ascendente habrá que cargar su complemento (3C hex.) ;Dicho intervalo de 50 mS se repite tantes veces como indique la variable "Delay_cont", ;es por ello que el delay mínimo es de 50 mS ("Delay_cont=1) y el máxima de 12.8" ;(Delay_cont=255). Delay_var: bcf INTCON,T0IF ;Desconecta el flag de rebosamiento movlw 0x3c ;Complemento hex. de 195 movwf TMR0 ;carga el TMR0 Intervalo clrwdt ;Refrescar el WDT btfss INTCON,T0IF ;Rebasamiento del TMR0 ?? goto Intervalo ;Todavía no decfsz Delay_Cont,F ;Decrementa contador de intervalos goto Delay_var ;Repite el intervalo de 50 mS return Inicio clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1 clrf TRISB ;Puerta B se configura como salida movlw b'00000111' movwf OPTION_REG ;Preescaler de 256 para el TMR0 bcf STATUS,RP0 ;Selecciona banco 0 Loop clrwdt ;Refresco del WDT call Key_Scan ;Explora el teclado movlw 0x80 subwf Tecla,W btfsc STATUS,Z ;Hay alguna pulsada ?? goto Loop ;No movf Tecla,W ;Lee el código de la tecla pulsada movwf PORTB ;Lo visualiza sobre los leds de la Puerta B movlw .40
  • 7. movwf Delay_Cont call Delay_var ;Temporiza 2 segundos clrf PORTB ;Desactiva visualización goto Loop end ;Fin del programa fuente ; SEPTIMO2.ASM: Programa que cuenta ininterrumpidamente del 0 al valor ; introducido mediante tres interruptores en RA0, RA1 y RA2. ; Cada 50ms cambia el valor del display. ; Frecuencia del PIC: 4 MHz LIST P=16C84 RADIX HEX w EQU 0 f EQU 1 PCL EQU 0x02 PUERTAA EQU 0x05 PUERTAB EQU 0x06 ESTADO EQU 0x03 VALOR EQU 0x12 ; Cota superior del contador ACTUAL EQU 0x13 ; Valor actual del contaje TEMP EQU 0x14 ; Variable de temporizaciones TMR0OPT EQU 0x01 INTCON EQU 0x0B VALORTMP EQU d'10' ; Valor para la temporizaci¢n VALORTIMER EQU d'59' ; Valor inicial del TIMER0 ; RUTINA PRINCIPAL: Lectura de los interruptores y c lculo del valor a visualizar ORG 0 goto inicio ; Para saltar el Vector de ; Interrupci¢n ORG 4 ; Vector de interrupci¢n goto int ; Interrupci¢n del TIMER0 inicio bsf ESTADO,5 ; Selecci¢n del banco 1 clrw movwf PUERTAB ; Puerta B salida movlw 0xff movwf PUERTAA ; puerta A entrada bcf ESTADO,5 ; Selecci¢n banco 0 explora movf PUERTAA,w ; Se cargan los ; interruptores en W movwf VALOR ; Se usa un registro ; auxiliar comf VALOR,f ; Invertir los niveles de ; interuptores movlw b'00000111' ; aplicamos una m scara andwf VALOR,f ; para borrar la parte alta ; en VALOR queda valor superior ; de contaje clrf ACTUAL ; valor actual de contaje=0 clrf TEMP ; Variable temporizadora=0 ; MàDULO CONTADOR ------------------------------------------------------- temporiza clrwdt bcf ESTADO,5 movf TEMP,f ; Comprueba TEMP btfss ESTADO,2 goto temporiza ; Si temp <> 0 call visualiza ; Si temp = 0
  • 8. call cargartimer movlw VALORTMP movwf TEMP goto temporiza ; CARGA EL TIMER Y EL PRESCALER----------------------------------------- cargartimer bcf ESTADO,5 movlw VALORTIMER ; Valor a cargar en el Timer: movwf TMR0OPT ; 255 - 59 = 196 = Ciclos de contaje ; 196 x 255 = 49980 microsegundos ; A 4Mhz 1 ciclo = 1 microsegundo ; Cada ciclo del TIMER0 son 50ms bsf ESTADO,5 ; P gina 1 movlw b'10000111' ; Prescaler de 255 movwf TMR0OPT movlw b'10100000' ; Interrupci¢n por timer0 movwf INTCON bcf ESTADO,5 return ; TRATAMIENTO DE INTERRUPCIONES ---------------------------------------- int decf TEMP,f call cargartimer retfie ; TRATAMIENTO DEL CONTADOR --------------------------------------------- visualiza bcf ESTADO,5 movfw ACTUAL ; Representa el n£mero actual call display movwf PUERTAB ; Incrementa el n£mero movfw VALOR ; VALOR -> W subwf ACTUAL,w ; ACTUAL - W ( ACTUAL - VALOR ) btfsc ESTADO,0 ; ¨ACTUAL < VALOR? -> flag C = 0 goto comienzo ; SI: pone a 0 el display incf ACTUAL,f ; NO: incrementa ACTUAL return comienzo clrf ACTUAL return ; TABLA DE CONVERSION--------------------------------------------------------- display addwf PCL,f ; pcl + W -> W ; El pcl se incrementa con el ; valor de W proporcionando un ; salto retlw 0x3F ; Retorna con el valor del ; c¢digo del 0 retlw 0x06 ; Retorna con el c¢digo del 1 retlw 0x5b ; Retorna con el c¢digo del 2 retlw 0x4f ; Retorna con el c¢digo del 3 retlw 0x66 ; Retorna con el c¢digo del 4 retlw 0x6d ; Retorna con el c¢digo del 5 retlw 0x7d ; Retorna con el c¢digo del 6 retlw 0x07 ; Retorna con el c¢digo del 7 END
  • 9. ; ; PRACTICA 10 ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ; ;Otras interrupciones ; ;Los dispositivos PIC pueden provocar interrupción por otras dos causas diferentes además de ;por la del TMR0. Una de ellas es por la detección de una señal de un determinado flanco por ;la entrada RB0/INT. La otra es por el cambio de estado lógico producido en cualquiera de las ;líneas de entrada RB4-RB7. ; ;El ejemplo pretende mostrar la detección y tratamiento de cada una de estas nuevas fuentes de ;interrupción. Cuando se produce la interrupción RB0/INT se activa la salida RA0 durante 1". ;Cuando se produce la interrupción por cambio de estado en RB4-RB7 se activa la salida RA1 ;durante 1". List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos Temp equ 0x0c ;Variable para la temporización org 0x00 ;Vector de Reset goto Inicio org 0x04 ;Vector de interrupción ;Programa de tratamiento de la interrupción Tratamiento btfsc INTCON,INTF ;Ha sido el RB0/INT ?? goto Tratar_INTF ;Si btfss INTCON,RBIF ;No, ha sido cambio en RB4-RB7 ? goto Fin_Tratamiento ;No, falsa interrupción Cambio_RB4_RB7bsf PORTA,1 ;Activa salida RB1 goto Fin Tratar_INTF bsf PORTA,0 ;Activa salida RB0 ;Se hace un delay de 1 segundo antes de reponer los correspondientes flags de interrupción. ;De esta forma se evitan posibles rebotes que puediera haber en las entradas. Fin movlw .20 ;Comienza una temporización de 1" movwf Temp ;Inicia una variable temporal Seguir bcf INTCON,T0IF ;Repone el flag del TMR0 movlw ~.195 movwf TMR0 ;Repone el TMR0 con el complemento de 195 Delay_50mS clrwdt ;Comienza un bucle de temporización de 50mS btfss INTCON,T0IF ;Fin de los 50 mS ?? goto Delay_50mS ;Todavía no nop decfsz Temp,F ;Se ha repetido 20 veces los 50mS ?? goto Seguir ;No Fin_Tratamiento clrf PORTA ;Si, ha pasado 1". Desconecta las salidas movf PORTB,W ;Lee estado actual de las entradas RA4-RA7 para reponer bcf INTCON,RBIF ;el flag de interrupción por cambio en RB4-RB7. Hay que ;hacerlo en este órden bcf INTCON,INTF ;Repone el flag de interrupción por RBO/INT retfie ;Retorno de interrupción Inicio clrf PORTA ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1
  • 10. clrf TRISA ;Puerta A se configura como salidas movlw b'11111111' movwf TRISB ;Puerta B se configura como entrada movlw b'01000111' ;Preescaler de 256 asignado al TMR0 y movwf OPTION_REG ;RB0/INT sensible al flanco ascendente bcf STATUS,RP0 ;Selecciona banco 0 movf PORTB,W ;Lee el estado inicial de las entradas RB4-RB7 movlw b'10011000' movwf INTCON ;Activa la interrupcines INTF y RBIF Loop sleep ;El dispositivo queda en standby goto Loop end ;Fin del programa fuente ; ; PRACTICA 8 ; ; Autor: Mikel Etxebarria ; (c) Microsystems Engineering (Bilbao) ; ; ;El modo TMR0 como contador de eventos externos ; ;El ejemplo pretende mostrar el funcionamiento del TMR0 en el modo contador. Mediante las ;entradas RA0-RA3 se introduce el número de pulsos a contar. Por RA4 se aplican dichos pulsos ;Cuando se alcance el valor deseado se disparan dos salidas durante un tiempo. La salida RB1 se ;utiliza para desconectar la fuente de entrada de pulsos y RB0 para activar cualquier otro ;dispositivo (p.e. un relé, en led, etc.) ;El WDT se empleará a modo de temporizador para determinar el tiempo de disparo de ambas ;salidas List p=16F84 ;Tipo de procesador include "P16F84.INC" ;Definiciones de registros internos org 0x00 ;Vector de Reset goto Inicio org 0x05 ;Salva vector de interrupción Inicio clrf PORTB ;Borra los latch de salida bsf STATUS,RP0 ;Selecciona banco 1 clrf TRISB ;Puerta B se configura como salida movlw b'00011111' movwf TRISA ;RA0-RA4 entradas movlw b'00111111' movwf OPTION_REG ;Preescaler de 256 para el WDT. El TMR0 evoluciona a ;cada flanco descendente aplicado por RA4 bcf STATUS,RP0 ;Selecciona banco 0 Loop movf PORTA,W andlw b'00001111' ;Lee las entradas RA0-RA3 xorlw b'11111111' ;Complementa el valor leído (el TMR0 es ascendente) addlw .1 movwf TMR0 ;Carga el TMR0 con el valor leído bsf PORTB,1 ;Activa la entrada de pulsos a contar bcf INTCON,T0IF ;Repone el flag del TMR0 Espera clrwdt ;Refresca el WDT btfss INTCON,T0IF ;Ha finalizado la cuenta ?? goto Espera ;No
  • 11. bcf PORTB,1 ;Desconecta la entrada de pulsos a contar bsf PORTB,0 ;Activa la salida a relé, led, etc. clrwdt ;El WDT se refresca y comienza la temporización sleep ;El modo standby se mantiene hasta que el WDT desborde ;transcurridos aprox. 2" (18mS*256 de preescaler) bcf PORTB,0 ;Desactiva la salida a relé, led, etc. goto Loop end ;Fin del programa fuente