Professional Documents
Culture Documents
INGENIERA ELECTRNICA
SISTEMAS DIGITALES
MODULO TMR0
Es un mdulo que se encuentra en el PIC que se puede usar como temporizador o como contador de eventos.
Cuando se emplea como contador de eventos se aplican los pulsos al pin RA4/TOCKI. En este tipo de
programacin se dice que trabaja como T0CKI.
Cuando se emplea como temporizador (TIMER) la entrada de valores la hace el oscilador (en nuestro caso
ser un XTAL).
PORTB
N
0
1
2
3
4
5
6
7
8
9
RB7
X
X
X
X
X
X
X
X
X
X
X
RB6
g
0
0
1
1
1
1
1
0
1
1
RB5
f
1
0
0
0
1
1
1
0
1
1
RB4
e
1
0
1
0
0
0
1
0
1
0
RB3
d
1
0
1
1
0
1
1
0
1
1
RB2
c
1
1
0
1
1
1
1
1
1
1
RB1
b
1
1
1
1
1
0
0
1
1
1
RB0
a
1
0
1
1
0
1
1
1
1
1
EQU b'00000110'
EQU 0xF8
EQU 0x0A
EQU 0x20
ORG 0x000
NOP
NOP
GOTO INICIO
INICIO
bsf
STATUS,RP0
; Ir banco 1
1
bcf
movlw
movwf
movlw
movwf
clrf
movlw
INGENIERA ELECTRNICA
STATUS,RP1
CONF_ADCON1
ADCON1
0xFF
TRISA
TRISB
CONF_OPT
;PORTA entrada
;PORTB salida
; w F8
REGISTRO OPTION_REG
1
VALOR BINARIO
SISTEMAS DIGITALES
EN DECIMAL
15
NOMBRE DEL BIT #RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
nmero de bit
EN HEXADECIMAL
movwf
bcf
bcf
clrf
OPTION_REG
STATUS,RP0
STATUS,RP1
TMR0
movf
movwf
movlw
xorwf
btfss
goto
TMR0,W
TEMP
LIMITE
TEMP,W
STATUS,Z
SIGUE
; W=TMR0 00
; TEMP=W 00, TEMP tendr el valor de progreso de cuenta del TMR0
; W=10 El valor de cuentas que debe hacerse, XOR lo compara
TEMP para saber si este ya es =10, lo que har que
; W XOR TEMP con
clrf
clrf
TMR0
TEMP
; Z=1, SI, TMRO vale 10, > 9, se pone acero otra vez el TMR0=0
; Temp = 0, tambin se pone a cero TEMP
BUCLE
SIGUE
movf
call
movwf
goto
TEMP,W
DISPLAY
PORTB
BUCLE
; W=TEMP
; Decodifica el valor de DISPLAY
; Escribe el valor en PORTB
; Salta a la etiqueta bucle
DISPLAY
addwf PCL,f
retlw b'01000000' ;0
retlw b'01111001' ;1
retlw b'00100100' ;2
retlw b'00110000' ;3
retlw b'00011001' ;4
retlw b'00010010' ;5
retlw b'00000010' ;6
retlw b'01111000' ;7
retlw b'00000000' ;8
retlw b'00010000' ;9
END
TAREA: Modificar el programa de modo que:
a) Por el PORTC se vaya mostrando en otro DISPLAY, durante la cuenta, el texto:
UTP-2015-2
b) Al mismo tiempo por el PORTD se activan 2 motores M1 y M2, de modo que ambos giran en sentido
contrario, pero invierten su giro con cada trmino de cuenta de 0-9.
c) Disear el control de proceso indicado por el profesor, trabajo que ser presentado en hardware la prxima
clase.
DOCENTE: ING. Luis Pacheco Cribillero
INGENIERA ELECTRNICA
SISTEMAS DIGITALES
LABORATORIO 2:
INGENIERA ELECTRNICA
SISTEMAS DIGITALES
Como vemos el generar el retardo no es tan difcil si consideramos este procedimiento desde luego que nos
faltara definir una funcin que nos indique cuando el TMR0 ha generado las 256 cuentas.
Antes de dar la forma final al programa vamos a examinar ese punto.
Existe un bit T0IF (Timer 0 Interrup Flag) que se pone a 1 siempre que hay un desborde en el Registro TMR0
es decir cuando pasa de 255 a 0. Esta caracterstica nos puede ayudar mucho ya que una vez producido el
desborde el bit T0IF permanece en 1. Es necesario resetear el bit T0IF.
Y lo ms importante es que debemos cargar el TMR0 con el valor apropiado para conseguir el retardo
deseado. Suponga que necesita un retardo de 10us. Entonces nuestro algoritmo sera:
1. T0IF = 0
2. Colocar TMR0 a 246
3. Esperar a que T0IF sea 1.
Puede llamar la atencin que no hayamos cargado el TMR0 a 245. Observe:
TMR0
246
247
248
249
250
251
252
253
254
255
0
10
Cuenta
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
T0IF=1
Como se puede apreciar si cargamos el TMRO con 246
10 ciclos de instruccin (10 us) ms tarde
obtendremos el retardo necesario si revisamos el valor de T0IF. Para fines prcticos equivale a restar el retardo
del valor del mdulo del contador TMR0 que es 256, y no de 255 que es el ltimo valor de cuenta del contador.
Por tanto no existe una sino mltiples soluciones, entonces considerando este ltimo punto y la frmula:
Retardo= 4*Tosc*TMR0*Preescaler*Bucle.
Observe el siguiente cuadro (considere que los valores siempre deben ser enteros):
Ciclo de
TMR0
Preescaler
Bucle
Retardo
instruccin
1
1 us
256
256
15
983040 us
2
1us
256
256
16
1048576 us
3
1us
122
128
64
999424 us
La tabla muestra que los primeros valores que calculamos no han sido tan exactos. Si empleamos la opcin 3
estaramos ms cerca al segundo.
Luego, de acuerdo a estas consideraciones el registro OPTION_REG deber configurarse as:
Opcin
x
1
x
1
T0CS
0
T0SE
0
PSA
1
PS2
1
PS1
1
PS0
0
CONTA EQU 0x20; Variable CONTA en direccin 0x20 hexadecimal de memoria RAM
ORG 0x00
nop
nop
GOTO
INICIO
bsf STATUS,RP0
bcf STATUS,RP1
clrf TRISA
clrf TRISB
clrf TRISC
clrf TRISD
clrf TRISE
movlw
movwf
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTC
DOCENTE: ING. Luis Pacheco Cribillero
; Ir banco 1
; PORTA salida
; PORTB salida
; PORTC salida
; PORTD salida
; PORTE salida
b'11000110'
; Configuracin del mdulo TMR0
OPTION_REG ; Preescaler = 128
; Ir banco 0
; PORTC = 0
4
INGENIERA ELECTRNICA
SISTEMAS DIGITALES
_bucle
call _retardo
incf PORTC,F
goto _bucle
_retardo
movlw
movwf
d'64'
CONTA
clrf
movlw
movwf
INTCON
d'134'
TMR0
btfss
goto
decfsz
goto
return
end
_espera1
; Deshabilitar interrupciones
; Cargar el valor de TMR0 para 122 cuentas
; (Complemento)
_espera