Es un registro contador ascendente de 8 bits TMR0. La fuente de reloj puede ser interna (modo timer) o externa modo contador, cabe destacar que si la fuente de reloj es externa se puede escoger el flanco de activación de este, por otro lado si su contador se rebasa puede producir una interrupción.
Si las labores del temporizador o contador las asignamos al programa principal robaría mucho tiempo al procesador en decremento de las actividades más importantes. Por este motivo se diseñan recursos específicamente orientados a estas misiones.
El PIC16F887 posee un temporizador/contador de 8 bits, llamado TMR0 que actúan de dos maneras diferentes:
1. Como contador de sucesos, que estan representados por los impulsos que se aplican a la patita RA4/TOCKI. Al llegar al valor FF H se desborda el contador y con el siguiente impulso, pasa a 00 H, advirtiendo esta circunstancia activando un señalizador y/o provocando una interrupción.
2. Como temporizador, cuando se carga en el registro que implementa al recurso un valor inicial se incrementa con cada ciclo de instrucción (Fosc/4) hasta que se desborda, o sea , pasa de FF a 00 H, y avisa poniendo a 1 un bit señalizador y/o provocando una interrupción.
Para poder utilizar el TIMER0 es necesario saber el manejo de los registros OPTION_REG e INTCON.
Estado de sus Bit's
La combinación de los BIT's; PS2, PS1 y PS0 (0, 1 y 2) determinan el valor del divisor de frecuencia, el cual se puede ver en la siguiente tabla.
Estado de sus Bit's.
Donde:
Ret; es el retardo que queremos generar
Fosc; es la frecuencia de oscilación
256 es el número máximo al que llega el timer para luego ser interrumpido
Preesc; es el preescaler el cual es un divisor de frecuencia
A continuacion procederemos a crear un programa en el lenguaje ASSEMBLER, este programa consiste en contar pulsos dados por una señal cuadrada conectada al pin RA4, se seleccionó un preescaler de 1:256, el TMR0 contara 50 veces una señal de entrada, al hacer dicho conteo se enciende una secuencia de Leds por el pin RB0, RB1 y RB2 se apaga y vuelve a contar.
código:
; PROGRAMA: TIMER0 modo contador (counter) por polling
; SE ENCENDERA UNA SECUENCIA DE LEDS CADA UNO DURANTE 1 SEGUNDO
; UNA VEZ QUE OCURRA UN DESBORDAMIENTO
; EN LA BANDERA DEL TMR0, UNA VEZ PASADO LOS 3S
; DE ENCENDIDO, EL MISMO SE APAGARA Y COMENZARA NUEVAMENTE EL CONTEO
LIST P=16F887
INCLUDE "P16F887.INC"
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF &_INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
CONT1 EQU 20H ;VARIABLES A UTILIZAR
CONT2 EQU 21H
CONT3 EQU 22H
ORG 0X00
GOTO ARRIBA
ARRIBA
BANKSEL ANSEL ;BITS DE CONFIGURACION
CLRF ANSEL
CLRF ANSELH ;SE PONDRA COMO ENTRADA
BANKSEL TRISA ;EL BIT 4 DEL PUERTOA
BSF TRISA,4 ;PARA COLOCAR LA SEÑAL DE PULSO QUE CONTARA EL TIMER0
CLRF TRISB ;SE DECLARA AL PUERTOB COMO
CLRF TRISC ;SALIDA PARA ENCENDER LOS LED
BANKSEL PORTA
CLRF PORTA
CLRF PORTB ; Y SE MODIFICA EL OPTION_REG
CLRF PORTC ;PARA QUE FUNCIONES CON UNA
MOVLW B'10100111' ;PRE DE 1:256
MOVWF OPTION_REG
MOVLW .61 ;ADEMAS DE Q SE LE ASIGNA UN
MOVWF TMR0 ; VALOR A TMR0 PARA QUE CUENTE
BCF INTCON,2 ;128 VECES UNA SEÑAL DE ENTRADA
INICIO BTFSS INTCON,2 ;se espera por la bandera de desbordamiento, cuando ocurre salta
GOTO CUENTA ;a la instruccion que enciende al led en la pata rb2 durante 1s
GOTO PRENDE ;luego al led en la pata rb1 y luego al de la pata rb0
;si no ocurre nada se mantiene en un bucle hasta que ocurre un
;desbordamiento en el timer0
CUENTA MOVF TMR0,W
MOVWF PORTC
GOTO INICIO
PRENDE BCF INTCON,2
BSF PORTB,2 ;PONEMOS EN 1 EL BIT 2 Y ENCENDEMOS EL PRIMER LED
CALL RETARDO ;COMENZAMOS EL RETARDO DE 1SEG
BCF PORTB,2 ;PONEMOS EN 0 EL BIT 2
BSF PORTB,1 ;PONEMOS EN 1 EL BIT 1 Y ENCENDEMOS EL SIGUIENTE LED
CALL RETARDO ;COMENZAMOS EL RETARDO DE 1SEG
BCF PORTB,1 ;PONEMOS EN 0 EL BIT 1
BSF PORTB,0 ;PONEMOS EN 1 EL BIT 0 Y ENCENDEMOS ELULTIMO LED
CALL RETARDO ;COMENZAMOS EL RETARDO DE 1SEG
BCF PORTB,0 ;PONEMOS EN 0 EL BIT 0
MOVLW .224
MOVWF TMR0
GOTO INICIO
RETARDO ;retardo de 1seg
MOVLW D'10' ;W<-10
MOVWF CONT3 ;CONT3<-W
MOVLW D'100' ;W<-100
MOVWF CONT2 ;CONT2<-W
MOVLW D'250' ;W<-250
MOVFW CONT1 ;CONT1<-W
NOP ;ESTE PRIMER BUCLE DURARA 1mSEG
DECFSZ CONT1,1 ;CONT1<-CONT1-1
GOTO $-.2
DECFSZ CONT2,1 ;CONT2<-CONT2-1 ESTE BUCLE REALIZA EL RETARDO DE 100mSEG
GOTO $-.6
DECFSZ CONT3,1 ;CONT3<-CONT3-1 ESTE BUBLE REPITE ELRETARTO DE 100mSEG 10 VECES
GOTO $-.10 ;COMPLETANDO EL RETARDO DE 1SEG
RETURN
END
acá les dejo un vídeo de como montar el programa en proteos
LIST p=16F887
INCLUDE <P16F887.inc>
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
TIEMPO EQU 23H
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO INT
;CONFIGURACION DE LOS PINES y el TMR0
INICIO
; REGISTROS DE CONFIGURACION QUE GARANTIZAN , QUE SE ACTIVE EL
;TMR0 POR INTERRUPCION
BANKSEL ANSEL;MOVERNOS AL BANCO 3
CLRF ANSEL;GARANTIZAMOS QUE
CLRF ANSELH;ESTEMOS TRABAJANDO EN DIGITAL
BANKSEL TRISB;MOVERNOS AL BANCO 1
BSF PORTB,0;PONER EN 1 EL BIT CERO DEL PUERTO B
CLRF TRISC;LIMPIAR PUERTO C
MOVLW B'01000111'; W<=01000111
MOVWF OPTION_REG ; OPTION_REG<=W <<REGISTRO DEL TIMER 0>>
BANKSEL PORTB; MOVERNOS AL BANCO 0
CLRF PORTB;LIMPIAR PUERTOS PARA GARANTIZAR QUE
CLRF PORTC;SALGA LA INFORMACION CORRECTA
MOVLW B'10010000'; W<=10010000
MOVWF INTCON ; INTCON<=W <<REGISTRO PARA LA INTERRUPCION>>
;RUTINA QUE ENCIENDE Y APAGA EL LED DEL BIT 3 DEL PUERTO C
;DURANTE 1 SEGUNDO
MOVLW .50 ; W<=50
MOVWF TMR0 ; TMR0<=W
MOVLW .40 ;W<=40
MOVWF TIEMPO ;TIEMPO<=W
BSF PORTC,3 ;ENCIENDE EL BIT 3 DEL PUERTO C
DESC BTFSS INTCON,T0IF ;SI ESTA EN UNO LA OPCION T0IF DEL REGISTRO
GOTO DESC ;INTCON SALTA A BCF (NORRAR INFORMACION DE T0IF)
BCF INTCON,T0IF
GOTO SIGUE
SIGUE DECFSZ TIEMPO; DECREMENTA TIEMPO Y SALTA SI ES CERO
GOTO DESC
CLRF TIEMPO ;BORRA LA VARIABLE TIEMPO
;SECUENCIA DE RETARDO
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BCF PORTC,3 ;SE APAGA EL BIT 3 DEL PUERTO C
DESC2 BTFSS INTCON,T0IF
GOTO DESC2
BCF INTCON,T0IF
GOTO SIGUE2
SIGUE2 DECFSZ TIEMPO ;SECUENCIA DE RETARDO DEL LED DEL BIT 3 DEL PUERTO C
GOTO DESC2
CLRF TIEMPO
GOTO INICIO
;RUTINA DE INTERRUPCION SE UTILIZA LA MISMA SECUENCIA DE RETARDO UTILIZADA
;EN LA PRIMERA PARTE
INT
BCF INTCON,7
CLRF PORTB
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,0 ;Enciendo BIT 0
DESC3 BTFSS INTCON,T0IF
GOTO DESC3
BCF INTCON,T0IF
GOTO SIGUE3
SIGUE3 DECFSZ TIEMPO
GOTO DESC3
CLRF TIEMPO
BCF PORTC,0 ;apago RB0 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,1 ;Enciendo BIT 1
DESC4 BTFSS INTCON,T0IF
GOTO DESC4
BCF INTCON,T0IF
GOTO SIGUE4
SIGUE4 DECFSZ TIEMPO
GOTO DESC4
CLRF TIEMPO
BCF PORTC,1 ;Apago RB1 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,2 ;Enciendo BIT 2
DESC5 BTFSS INTCON,T0IF
GOTO DESC5
BCF INTCON,T0IF
GOTO SIGUE5
SIGUE5 DECFSZ TIEMPO
GOTO DESC5
CLRF TIEMPO
BCF PORTC,2 ;Apago Rb2 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,3 ;Enciendo BIT 3
DESC6 BTFSS INTCON,T0IF
GOTO DESC6
BCF INTCON,T0IF
GOTO SIGUE6
SIGUE6 DECFSZ TIEMPO
GOTO DESC6
CLRF TIEMPO
BCF PORTC,3 ;Apago Rb3 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,4 ;Enciendo BIT 4
DESC7 BTFSS INTCON,T0IF
GOTO DESC7
BCF INTCON,T0IF
GOTO SIGUE7
SIGUE7 DECFSZ TIEMPO
GOTO DESC7
CLRF TIEMPO
BCF PORTC,4 ;Apago Rb4 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,5 ;Enciendo BIT 5
DESC8 BTFSS INTCON,T0IF
GOTO DESC8
BCF INTCON,T0IF
GOTO SIGUE8
SIGUE8 DECFSZ TIEMPO
GOTO DESC8
CLRF TIEMPO
BCF PORTC,5 ;Apago Rb5 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,6 ;Enciendo BIT 6
DESC1 BTFSS INTCON,T0IF
GOTO DESC1
BCF INTCON,T0IF
GOTO SIGUE1
SIGUE1 DECFSZ TIEMPO
GOTO DESC1
CLRF TIEMPO
BCF PORTC,6 ;Apago Rb6 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,7 ;Enciendo BIT 7
DESC0 BTFSS INTCON,T0IF
GOTO DESC0
BCF INTCON,T0IF
GOTO SIGUE0
SIGUE0 DECFSZ TIEMPO
GOTO DESC0
CLRF TIEMPO
BCF PORTC,7 ;Apago Rb7 en 1s, respectivamente
GOTO INICIO
END
En el siguiente link podran ver ejemplos del TMR0 como temporizador: https://mega.nz/#F!KMtWwZCB!S_POHQvFOjs_6cKI0lec5A
El PIC16F887 posee un temporizador/contador de 8 bits, llamado TMR0 que actúan de dos maneras diferentes:
1. Como contador de sucesos, que estan representados por los impulsos que se aplican a la patita RA4/TOCKI. Al llegar al valor FF H se desborda el contador y con el siguiente impulso, pasa a 00 H, advirtiendo esta circunstancia activando un señalizador y/o provocando una interrupción.
2. Como temporizador, cuando se carga en el registro que implementa al recurso un valor inicial se incrementa con cada ciclo de instrucción (Fosc/4) hasta que se desborda, o sea , pasa de FF a 00 H, y avisa poniendo a 1 un bit señalizador y/o provocando una interrupción.
Para poder utilizar el TIMER0 es necesario saber el manejo de los registros OPTION_REG e INTCON.
Registro OPTION_REG:
Contiene varios bits de control para configurar el divisor de frecuencia o preescaler del TMR0/WDT, la interrupción externa INT, TMR0 y los pull-ups para el PORTBEstado de sus Bit's
La combinación de los BIT's; PS2, PS1 y PS0 (0, 1 y 2) determinan el valor del divisor de frecuencia, el cual se puede ver en la siguiente tabla.
Registro INTCON:
Contiene los bits para habilitar cada una de las fuentes de interrupción y las banderas que informan el origen de la interrupción.Estado de sus Bit's.
Fórmula utilizada para calcular el valor de registro TMR0
Donde:
Ret; es el retardo que queremos generar
Fosc; es la frecuencia de oscilación
256 es el número máximo al que llega el timer para luego ser interrumpido
Preesc; es el preescaler el cual es un divisor de frecuencia
PROGRAMAS DE TMR0
Modo contador (counter) por interrupcion (sincrono)
A continuacion procederemos a crear un programa en el lenguaje ASSEMBLER, este programa consiste en contar pulsos dados por una señal cuadrada conectada al pin RA4, se seleccionó un preescaler de 1:256, el TMR0 contara 50 veces una señal de entrada, al hacer dicho conteo se enciende una secuencia de Leds por el pin RB0, RB1 y RB2 se apaga y vuelve a contar.
Fosc=4MHz
Frecuencia del pulso de conteo=1kHz
Se quiere que la TMR0 cuente 50 veces
Hacemos al TMR0 para
encontrar el Preescaler adecuado
Se
debe escoger el preescaler más cercano y
mayor al valor obtenido, por lo tanto Preesc=256
código:
; PROGRAMA: TIMER0 modo contador (counter) por polling
; SE ENCENDERA UNA SECUENCIA DE LEDS CADA UNO DURANTE 1 SEGUNDO
; UNA VEZ QUE OCURRA UN DESBORDAMIENTO
; EN LA BANDERA DEL TMR0, UNA VEZ PASADO LOS 3S
; DE ENCENDIDO, EL MISMO SE APAGARA Y COMENZARA NUEVAMENTE EL CONTEO
LIST P=16F887
INCLUDE "P16F887.INC"
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF &_INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
CONT1 EQU 20H ;VARIABLES A UTILIZAR
CONT2 EQU 21H
CONT3 EQU 22H
ORG 0X00
GOTO ARRIBA
ARRIBA
BANKSEL ANSEL ;BITS DE CONFIGURACION
CLRF ANSEL
CLRF ANSELH ;SE PONDRA COMO ENTRADA
BANKSEL TRISA ;EL BIT 4 DEL PUERTOA
BSF TRISA,4 ;PARA COLOCAR LA SEÑAL DE PULSO QUE CONTARA EL TIMER0
CLRF TRISB ;SE DECLARA AL PUERTOB COMO
CLRF TRISC ;SALIDA PARA ENCENDER LOS LED
BANKSEL PORTA
CLRF PORTA
CLRF PORTB ; Y SE MODIFICA EL OPTION_REG
CLRF PORTC ;PARA QUE FUNCIONES CON UNA
MOVLW B'10100111' ;PRE DE 1:256
MOVWF OPTION_REG
MOVLW .61 ;ADEMAS DE Q SE LE ASIGNA UN
MOVWF TMR0 ; VALOR A TMR0 PARA QUE CUENTE
BCF INTCON,2 ;128 VECES UNA SEÑAL DE ENTRADA
INICIO BTFSS INTCON,2 ;se espera por la bandera de desbordamiento, cuando ocurre salta
GOTO CUENTA ;a la instruccion que enciende al led en la pata rb2 durante 1s
GOTO PRENDE ;luego al led en la pata rb1 y luego al de la pata rb0
;si no ocurre nada se mantiene en un bucle hasta que ocurre un
;desbordamiento en el timer0
CUENTA MOVF TMR0,W
MOVWF PORTC
GOTO INICIO
PRENDE BCF INTCON,2
BSF PORTB,2 ;PONEMOS EN 1 EL BIT 2 Y ENCENDEMOS EL PRIMER LED
CALL RETARDO ;COMENZAMOS EL RETARDO DE 1SEG
BCF PORTB,2 ;PONEMOS EN 0 EL BIT 2
BSF PORTB,1 ;PONEMOS EN 1 EL BIT 1 Y ENCENDEMOS EL SIGUIENTE LED
CALL RETARDO ;COMENZAMOS EL RETARDO DE 1SEG
BCF PORTB,1 ;PONEMOS EN 0 EL BIT 1
BSF PORTB,0 ;PONEMOS EN 1 EL BIT 0 Y ENCENDEMOS ELULTIMO LED
CALL RETARDO ;COMENZAMOS EL RETARDO DE 1SEG
BCF PORTB,0 ;PONEMOS EN 0 EL BIT 0
MOVLW .224
MOVWF TMR0
GOTO INICIO
RETARDO ;retardo de 1seg
MOVLW D'10' ;W<-10
MOVWF CONT3 ;CONT3<-W
MOVLW D'100' ;W<-100
MOVWF CONT2 ;CONT2<-W
MOVLW D'250' ;W<-250
MOVFW CONT1 ;CONT1<-W
NOP ;ESTE PRIMER BUCLE DURARA 1mSEG
DECFSZ CONT1,1 ;CONT1<-CONT1-1
GOTO $-.2
DECFSZ CONT2,1 ;CONT2<-CONT2-1 ESTE BUCLE REALIZA EL RETARDO DE 100mSEG
GOTO $-.6
DECFSZ CONT3,1 ;CONT3<-CONT3-1 ESTE BUBLE REPITE ELRETARTO DE 100mSEG 10 VECES
GOTO $-.10 ;COMPLETANDO EL RETARDO DE 1SEG
RETURN
END
Montaje en proteus
acá les dejo un vídeo de como montar el programa en proteos
Modo temporizador (timer) por interrupcion
Se mantendra encendido de manera intermitente un led, el cual durara un segundo encendido y apagado. Cuando se presione un pulsador, se encendera una secuencia de leds, los cuales encenderan uno despues del otro con un periodo de tiempo de un segundo entre cada led, para luego volver a la rutina de intermitencia.
código:
INCLUDE <P16F887.inc>
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
TIEMPO EQU 23H
ORG 0X00
GOTO INICIO
ORG 0X04
GOTO INT
;CONFIGURACION DE LOS PINES y el TMR0
INICIO
; REGISTROS DE CONFIGURACION QUE GARANTIZAN , QUE SE ACTIVE EL
;TMR0 POR INTERRUPCION
BANKSEL ANSEL;MOVERNOS AL BANCO 3
CLRF ANSEL;GARANTIZAMOS QUE
CLRF ANSELH;ESTEMOS TRABAJANDO EN DIGITAL
BANKSEL TRISB;MOVERNOS AL BANCO 1
BSF PORTB,0;PONER EN 1 EL BIT CERO DEL PUERTO B
CLRF TRISC;LIMPIAR PUERTO C
MOVLW B'01000111'; W<=01000111
MOVWF OPTION_REG ; OPTION_REG<=W <<REGISTRO DEL TIMER 0>>
BANKSEL PORTB; MOVERNOS AL BANCO 0
CLRF PORTB;LIMPIAR PUERTOS PARA GARANTIZAR QUE
CLRF PORTC;SALGA LA INFORMACION CORRECTA
MOVLW B'10010000'; W<=10010000
MOVWF INTCON ; INTCON<=W <<REGISTRO PARA LA INTERRUPCION>>
;RUTINA QUE ENCIENDE Y APAGA EL LED DEL BIT 3 DEL PUERTO C
;DURANTE 1 SEGUNDO
MOVLW .50 ; W<=50
MOVWF TMR0 ; TMR0<=W
MOVLW .40 ;W<=40
MOVWF TIEMPO ;TIEMPO<=W
BSF PORTC,3 ;ENCIENDE EL BIT 3 DEL PUERTO C
DESC BTFSS INTCON,T0IF ;SI ESTA EN UNO LA OPCION T0IF DEL REGISTRO
GOTO DESC ;INTCON SALTA A BCF (NORRAR INFORMACION DE T0IF)
BCF INTCON,T0IF
GOTO SIGUE
SIGUE DECFSZ TIEMPO; DECREMENTA TIEMPO Y SALTA SI ES CERO
GOTO DESC
CLRF TIEMPO ;BORRA LA VARIABLE TIEMPO
;SECUENCIA DE RETARDO
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BCF PORTC,3 ;SE APAGA EL BIT 3 DEL PUERTO C
DESC2 BTFSS INTCON,T0IF
GOTO DESC2
BCF INTCON,T0IF
GOTO SIGUE2
SIGUE2 DECFSZ TIEMPO ;SECUENCIA DE RETARDO DEL LED DEL BIT 3 DEL PUERTO C
GOTO DESC2
CLRF TIEMPO
GOTO INICIO
;RUTINA DE INTERRUPCION SE UTILIZA LA MISMA SECUENCIA DE RETARDO UTILIZADA
;EN LA PRIMERA PARTE
INT
BCF INTCON,7
CLRF PORTB
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,0 ;Enciendo BIT 0
DESC3 BTFSS INTCON,T0IF
GOTO DESC3
BCF INTCON,T0IF
GOTO SIGUE3
SIGUE3 DECFSZ TIEMPO
GOTO DESC3
CLRF TIEMPO
BCF PORTC,0 ;apago RB0 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,1 ;Enciendo BIT 1
DESC4 BTFSS INTCON,T0IF
GOTO DESC4
BCF INTCON,T0IF
GOTO SIGUE4
SIGUE4 DECFSZ TIEMPO
GOTO DESC4
CLRF TIEMPO
BCF PORTC,1 ;Apago RB1 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,2 ;Enciendo BIT 2
DESC5 BTFSS INTCON,T0IF
GOTO DESC5
BCF INTCON,T0IF
GOTO SIGUE5
SIGUE5 DECFSZ TIEMPO
GOTO DESC5
CLRF TIEMPO
BCF PORTC,2 ;Apago Rb2 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,3 ;Enciendo BIT 3
DESC6 BTFSS INTCON,T0IF
GOTO DESC6
BCF INTCON,T0IF
GOTO SIGUE6
SIGUE6 DECFSZ TIEMPO
GOTO DESC6
CLRF TIEMPO
BCF PORTC,3 ;Apago Rb3 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,4 ;Enciendo BIT 4
DESC7 BTFSS INTCON,T0IF
GOTO DESC7
BCF INTCON,T0IF
GOTO SIGUE7
SIGUE7 DECFSZ TIEMPO
GOTO DESC7
CLRF TIEMPO
BCF PORTC,4 ;Apago Rb4 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,5 ;Enciendo BIT 5
DESC8 BTFSS INTCON,T0IF
GOTO DESC8
BCF INTCON,T0IF
GOTO SIGUE8
SIGUE8 DECFSZ TIEMPO
GOTO DESC8
CLRF TIEMPO
BCF PORTC,5 ;Apago Rb5 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,6 ;Enciendo BIT 6
DESC1 BTFSS INTCON,T0IF
GOTO DESC1
BCF INTCON,T0IF
GOTO SIGUE1
SIGUE1 DECFSZ TIEMPO
GOTO DESC1
CLRF TIEMPO
BCF PORTC,6 ;Apago Rb6 en 1s, respectivamente
MOVLW .50
MOVWF TMR0
MOVLW .40
MOVWF TIEMPO
BSF PORTC,7 ;Enciendo BIT 7
DESC0 BTFSS INTCON,T0IF
GOTO DESC0
BCF INTCON,T0IF
GOTO SIGUE0
SIGUE0 DECFSZ TIEMPO
GOTO DESC0
CLRF TIEMPO
BCF PORTC,7 ;Apago Rb7 en 1s, respectivamente
GOTO INICIO
END
Montaje en proteus
En el siguiente link podran ver ejemplos del TMR0 como temporizador: https://mega.nz/#F!KMtWwZCB!S_POHQvFOjs_6cKI0lec5A
No hay comentarios:
Publicar un comentario