uso del tmr0

2
Cibernética y Mecatrónica Microcontroladores Escuela de Ingeniería Ing. Rafael Durán Campoamor 27/10/2011 Página 1 Uso de timer como generador de base de tiempos Se desea realizar una temporización de 0.5 s utilizando el TMR0 del PIC16F84A. La frecuencia de trabajo del PIC es de 4 MHz, por lo que el timer incrementa su cuenta cada μs (Tosc= ) dicho lo anterior debemos contar 500,000μs. 500,000=(estados a contar)*(TMR0)*(Prescaler)*(contador) Si el máximo es 256 selecciono un valor multiplo de 500,000, en este caso 250, este valor se asigna al TMR0 256-250=6, entonces el prescaler seleccionado será el más cercano es 8 Prescaler=8*valor de contador Prescaler=8*250μs=2,000μs cargando el TMR0 a 250 Si repito lo anterior cargando el timer 250 veces con ese valor obtenemos en un ciclo 500,000μs (250*2,000 ) Otro ejemplo: se desea una temporización de 10ms utilizando el TMR0 10,000/250=40 256-40=216; cargamos el TMR0 con 216 Temp=10 ms; Prescaler=10000us/(216*1us) Prescaler=256*40us=10240us ó 10.24ms (me paso por 240us) Si selecciono 217 como valor de TMR0 entonces tendremos, Prescaler=256*39us=9,984us (diferencia de 16us) el segundo caso es más exacto.

Upload: rafael-duran

Post on 21-Jul-2015

1.402 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Uso del tmr0

Cibernética y Mecatrónica Microcontroladores Escuela de Ingeniería Ing. Rafael Durán Campoamor

27/10/2011 Página 1

Uso de timer como generador de base de tiempos

Se desea realizar una temporización de 0.5 s utilizando el TMR0 del

PIC16F84A.

La frecuencia de trabajo del PIC es de 4 MHz, por lo que el timer

incrementa su cuenta cada µs (Tosc= ) dicho lo

anterior debemos contar 500,000µs.

500,000=(estados a contar)*(TMR0)*(Prescaler)*(contador)

Si el máximo es 256 selecciono un valor multiplo de 500,000, en este caso 250, este

valor se asigna al TMR0

256-250=6, entonces el prescaler seleccionado será el más cercano es 8

Prescaler=8*valor de contador

Prescaler=8*250µs=2,000µs cargando el TMR0 a 250

Si repito lo anterior cargando el timer 250 veces con ese valor obtenemos en un

ciclo 500,000µs (250*2,000 )

Otro ejemplo: se desea una temporización de 10ms utilizando el TMR0

10,000/250=40

256-40=216; cargamos el TMR0 con 216

Temp=10 ms; Prescaler=10000us/(216*1us)

Prescaler=256*40us=10240us ó 10.24ms (me paso por 240us)

Si selecciono 217 como valor de TMR0 entonces tendremos,

Prescaler=256*39us=9,984us (diferencia de 16us) el segundo caso es más

exacto.

Page 2: Uso del tmr0

Cibernética y Mecatrónica Microcontroladores Escuela de Ingeniería Ing. Rafael Durán Campoamor

27/10/2011 Página 2

Ejemplo de programacion del pic

;-------Configuración de puertos------- ORG 0x00 GOTO inicio ORG 0x04 ; Atiendo la interrupción BTFSS PORTB,0 ; si el LED está apagado GOTO LED ; voy a LED y lo enciendo BCF PORTB,0 ; sino apago el LED BCF INTCON,2 ; limpio la bandera T0IF RETFIE ; regreso habilitando la interrupción LED BSF PORTB,0 ; enciendo el LED BCF INTCON,2 ; borro la bandera T0IF RETFIE ; regreso habilitando la interrupción inicio BSF STATUS,5 ; configurando puertos CLRF TRISB ; puerto B es salida MOVLW 0x07 ; cargo w con 00000111 MOVWF OPTION_REG ; el Divisor = 256 BCF STATUS,5 MOVLW 0xA0 ; cargo w con 10100000 MOVWF INTCON ; habilitamos GIE y T0IE CLRF PORTB ; limpiamos PORTB tiempo MOVLW 0xD9 ; cargo w con 217 MOVWF TMR0 ; lo paso a TMR0 NADA BTFSS INTCON,2 ; me quedo haciendo nada GOTO NADA ; hasta que TMR0 desborde, y entonces GOTO tiempo ; volveré a cargar TMR0 ;------------------------------------------ END

olvide

cambiar el

dato dato