You are on page 1of 15

PIC 18F45XX

EL TIMER 0
1. Hardware asociado
2. Caractersticas
Se puede configurar como temporizador o contador de 8/16 bits.
Se puede leer o escribir en l a travs del registro TMR0.
ispone de un preescaler de 8 bits programable por soft!are.
"uede traba#ar con se$al de relo# interna o e%terna &R'(/T0)*+,.
"uede generar una interrupci-n por desbordamiento.
.n modo contador se puede programar para /ue incremente su valor por flanco
ascendente o descendente por el pin &R'(/T0)*+,.
.n modo temporizador el valor del registro TMR0 se incrementa a intervalos de 1Tc01
es decir &(/2osc segundos,. &0.3us para 30M4z / 0.0855us para (8M4z,
.l registro T0CO &S2R60%27, controla la configuraci-n del m-dulo
!. Re"istro de co#$i"%raci&#
4. Modo te'(ori)ador de 8*1+ ,its
"ara configurar el Timer80 en modo temporizador de 8 bits 4a0 /ue6

9abilitar el m-dulo poniendo a %#o el bit TMR0O &T0):;<=>,.
Seleccionar el modo temporizador de 8/16 bits poniendo a %#o*cero el bit T08-IT
&T0):;<6>,
Seleccionar la fuente de relo# interna poniendo a cero el bit T0C. &T0):;<7>,
9abilitar &o no, el preescaler seg?n convenga poniendo a uno o cero el bit P./
&T0):;<5>,
.n modo temporizador de 8/16 bits1 el Timer 0 incrementa el valor del registro
TMR0<TMR096TMR0@> con cada ciclo de instrucci-n &Tc0,1 sin preescaler .
Si se escribe en el registro TMR01 ste de#a de incrementarse durante 3 ciclos de
instrucci-n.
Si el registro TMR0 se desborda &0%228>0%00, se pone a uno la bandera TMR0IF
&+;T):;<3>, 0 se produce una interrupci-n si estA 4abilitado el bit TMR0IE &+;T):;<7>,
0 el bit 0IE &+;T):;<=>,
5. Modo co#tador de 8*1+ ,its
"ara configurar el Timer 0 en modo contador de 8/16 bits 4a0 /ue6

9abilitar el m-dulo poniendo a %#o el bit TMR0O &T0):;<=>,.
Seleccionar el modo contador 8/16 bits poniendo a %#o*cero el bit T08-IT &T0):;<6>,
Seleccionar la fuente de relo# e%terna &R'(/T0)*+, poniendo a %#o el bit T0C.
&T0):;<7>,
9abilitar &o no, el preescaler seg?n convenga poniendo a cero o %#o el bit P./
&T0):;<5>,
.n modo contador de 8/16 bits1 el Timer 0 incrementa el valor del registro TMR0 con
cada flanco ascendente &bit ITCO.T0.E11, o descendente &,it ITCO.T0.E10, en el
pin &R'(/T0)*+, sin preescaler .
Si el registro TMR0 se desborda &0%228>0%00 para 8 bits o 0%22228>0%0000 para 16 bits,
se pone a uno la bandera TMR0IF &+;T):;<3>,
Se puede generar una interrupci-n si estA 4abilitado el bit TMR0IE &+;T):;<7>, 0 el bit
0IE &+;T):;<=>,
+. Re"istros asociados
2. F%#cio#es asociadas e# C18
Todas las funciones asociadas al T+M.R0 se encuentran en el arc4ivo <timers.4>
.#emplo 16 )onfiguraci-n como6 temporizador 16bits1 interrrupci-n 4abilitada1 sin
preescaler6
:penTimer0&T+M.RB+;TB:; C T0BS:DR).B+;T C T0B16E+T C T0B"SB1B1 ,F
+;T):;bits.G+.H1F // 9abilitaci-n general de interrupciones
+;T):;bits.".+.H1F // 9abilitada interrupci-n de perifricos
"ara controlar el Timer0 se utilizan ademAs las funciones6
void )loseTimer0 &void,F // es4abilita el Timer0
unsigned int ReadTimer0 &void,F // @eer valor
void IriteTimer0 & unsigned int timer0,F // .scribir valor
)uando el Timer0 se desborda pone a uno la bandera <+;T):;bits.TMR0+2>. Se puede c4e/uear
este bit para conseguir retardos precisos1 recargando el T+M.R0 0 esperando a /ue se desborde.
.#emplo de uso6 !4ile&+;T):;bits.TMR0+2HH0,F // .sperar desbordamiento
"ara ver todas las posibilidades de configuraci-n leer el documento6
J"+)182 "erip4eral @ibrar0 9elp ocument.c4mK situado en ..Lmplabc18Lv5.(Ldoc
2.1 E3e'(4o de co#$i"%raci&# 5'odo co#tador6
.#emplo 36 )onfiguraci-n como6 contador 8bits1 sin interrupci-n1 flanco de ba#ada1 sin preescaler6
:penTimer0&T+M.RB+;TB:22 C T0BS:DR).B.MT C T:B.G.B2'@@ C T0B8E+T C T0B"SB1B1 ,F
.#emplo 56 )onfiguraci-n como6 contador 16bits1 sin interrupci-n1 flanco subida1 preescaler 16(6
:penTimer0&T+M.RB+;TB:22 C T0BS:DR).B.MT C T:B.G.BR+S. C T0B16E+T C T0B"SB1B( ,F
.n modo contador si ponemos a cero el registro &IriteTimer0&0%00,F,1 cada vez /ue se produce
un flanco de subida/ba#ada en el pin R'( se incrementa en una unidad el registro asociado.
Si tenemos fi#ado un preescaler J16"RK el registro se incrementarA en una unidad cada J"RK
flancos recibidos en R'(. "or e#emplo1 para un preescaler de 16( cada cuatro flancos de
subida/ba#ada se incrementa en una unidad el registro del Timer0.

)uando el Timer0 alcanza el valor de 0%2222 &16bits, o 0%22 &8bits,1 un nuevo flanco provocarA su
desbordamiento 0 /ue la bandera <+;T):;bits.TMR0+2> se ponga a uno. )uando la bandera se
pone a uno se puede producir una interrupci-n si stas estAn 4abilitadas.
"ara ver todas las posibilidades de configuraci-n leer el documento6
J"+)182 "erip4eral @ibrar0 9elp ocument.c4mK situado en ..Lmplabc18Lv5.(Ldoc
8. E3e'(4os de 4ect%ra * escrit%ra
"ara leer el contenido del T+M.R0 &modo 16bits, se utiliza la funci-n6 ReadTimer0&,F
.#emplo6
unsigned int valorF // eclarar una variable de 16 bits
valorHReadTimer0&,F // 'signamos el valor leNdo a la variable
"ara escribir un valor en el registro TMR0 se utiliza la funci-n6
void IriteTimer0 & unsigned int timer0,F
.#emplo6
unsigned int valorH1700F // eclarar una variable de 16 bits
IriteTimer0 &valor,F // 'signamos el valor 1700 al timer
)omo regla general para conseguir un retardo de JR.TK micro segundos6
IriteTimer0 &08OalorBrecarga,F
onde6 OalorBrecargaH PR.T / &T)Q R "R..S)'@.R,S
.#emplo6 "ara conseguir un retardo de 50ms con un preescaler de 16( &Mtal630M4z,
OalorBrecarga H &50.000/&0.3R(,, H 5=700
7. Procedi'ie#to "e#era4 5I6
"ara conseguir un retardo determinado utilizando el Timer 0 como temporizador de
16 bits 4a0 /ue determinar primero el valor del preescaler &en caso de necesitarlo,
"R..S)'@.R R.T'R: M'M+M:
&2H30M4z,
161 &Sin preescaler, 67756R013H1511ms
163 67756R013R3H36131ms
16( 67756R013R(H731(3ms
168 67756R013R8H10(186ms
1616 67756R013R16H30T1=3ms
1653 67756R013R53H(1T1((ms
166( 67756R013R6(H858186ms
16138 67756R013R138H16==1=3ms
16376 67756R013R376H55771((ms &R,
&R, Oalor del retardo mA%imo U 5157 segundos para preescaler de 376
10. Procedi'ie#to "e#era4 5II6
"ara conseguir un retardo de R.T microsegundos con el Timer 0 como temporizador
de 16 bits
1V. 2i#ar el valor del preescaler1 seg?n la tabla anterior1 para /ue
&R.T'R: MWM+M: > R.T,
3V. )alcular el valor de recarga usando la e%presi-n6
OalorBrecargaH&R.T / &0.3000R"R.S)'@.R,, X 30M4z
OalorBrecargaH&R.T / &0.0855R"R.S)'@.R,, X (8M4z
5V. "rogramar el c-digo siguiendo los tres pasos bAsicos6
Reset bandera T+M.R0 H> +;T):;bits.TMR0+2H0F
Recargar T+M.R0 H> IriteTimer0&08OalorBrecarga,F
.sperar desbordamiento H> !4ile&+;T):;bits.TMR0+2HH0,F
7. Pro"ra'a de e3e'(4o
Dtilizar el m-dulo Timer0 como temporizador de 16bits con preescaler para generar
un retardo de 6(0ms 0 realizar un programa /ue muestre un contador binario en
los cuatro bits de menor peso del ":RTE. Mostrar en el lcd el te%to /ue aparece en
la figura.
.o4%ci&#
;o olvidar a$adir despus de la cabecera6 Yinclude <timers.4>
.i'%4aci&#