You are on page 1of 21

ESCUELA SUPERIOR POLITCNICA DEL LITORAL

FIEC
Laboratorio de Microcontroladores

PRCTICA #5
Contadores

Alumnos:

Maritza Isabel Chvez Tigrero


Jos Daniel Plas Segura

Paralelo: 8

Grupo: 2

Fecha de Presentacin:
5/12/2014

1.- Enunciado del proyecto


En este programa se utilizan displays de 7 segmentos para su uso en
contadores de uno y dos dgitos adems de esto se utiliza la tcnica de
multiplexado por divisin de tiempo.
2.- Diagrama de Bloques

3.- Diagrama de Flujo funcional del Programa principal y de las


subrutinas.
PROGRAMA 1
INICIO

Definicin de variables para el


contador y display

Se realizaa el seteo de puertos

Se carga en OPTION_REG =00000111

Se carga TMRO con .127


Se carga contador con 100

Subrutina TABLA y se muestra el


cero inicial

Se incrementa las unidades

Ingresa al lazo mudo

Se desborda el TMR0

INTER

PORTB = PORTB + 1

Enceramos banderas

PROGRAMA 2

INICIO

Configuracin de puertos
PORTB y PORTC como salidas
digitales

Se carga en
OPTION_REG=00000111

Se carga TMR0 con .127


Se carga contador con100

Subrutina TABLA muestra el


cero inicial

Se carga el valor de uni_cod al PORTB

INTER

Se incrementa las
unidades
No
Unidades = 9
Si

Si

Incrementa decenas
No
Decenas = 9

PROGRAMA 3

Inicio

Seteo de bancos y puertos

Configurar RB0 como entrada


PORTC y PORTD como salida

Registro OPTION_REG = b00000111'

PORTD=b00000001'

Ingresamos al lazo LOOP

COUNTER = .20

TMR0 = 1

Si
PORTC = PORTC +1

TMR0 = 0

Externo

No

4.- Descripcin del algoritmo o estrategia utilizada.


PROGRAMA 1
1. Usamos la directiva CBLOCK para variables a partir de 0x20H, las cuales son; contador,
unidades, uni_cod.
2. Se realiza el seteo de bancos y puertos.
3. Se configura PORTB como salida.
4. Seteo del registro OPTION_REG.
5. Se selecciona el pre-escalador 256, con una frecuencia de 4MHz con lo que
obtendremos una interrupcin cada 10mS.
6. Encera el PORTB y las unidades.
7. Se carga el TIMER0 con el valor .217 y el contador con 100.
8. Se habilitan las banderas de interrupciones.
9. Para mostrar el cero inicial se llama a la tabla con el valor de 0 en el registro de
trabajo W.
10. El valor encriptado de 7 segmentos es guardado en unid_cod y luego se lo ponemos al
PORTB.
11. Se incrementa las unidades.
12. Se ingresa al lazo mudo LOOP esperando que el TIMER0 se desborde y se ejecute la
subrutina.

PROGRAMA 2
1. Usamos la directiva CBLOCK para variables a partir de 0x20H, las cuales son; contador,
unidades, uni_cod, dec_dod.
2. Se realiza el seteo de bancos y puertos.
3. Se configura PORTB, PORTC como salida.
4. Se encera las variables unidades y decenas.
5. Seteo del registro OPTION_REG.
6. Se selecciona el pre-escalador 256, con una frecuencia de 4MHz con lo que
obtendremos una interrupcin cada 10mS.
7. Se carga el TIMER0 con el valor .217 y el contador con 100.
8. Se habilitan las banderas de interrupciones en el registro INTCON.
9. Se ingresa el lazo mudo LOOP hasta que el TIMER0 se desborde y se ejecute la
subrutina.

PROGRAMA 3
1. Usamos la directiva CBLOCK para variables a partir de 0x20H, las cuales son; contador,
unidades, uni_cod, dec_dod, sel.
2. Se realiza el seteo de bancos y puertos.
3. Se configura PORTB, PORTC como salida.
4. Se encera las variables unidades y decenas.
5. Seteo del registro OPTION_REG.
6. Se selecciona el pre-escalador 256, con una frecuencia de 4MHz con lo que
obtendremos una interrupcin cada 10mS.
7. Se carga el TIMER0 con el valor .217 y el contador con 100.
8. Se habilitan las banderas de interrupciones en el registro INTCON.
9. Se ingresa el lazo mudo LOOP hasta que el TIMER0 se desborde y se ejecute la
subrutina.

Fuente en lenguaje ensamblador con comentarios en las lneas de cdigo que


considere fundamentales
PARTE 1
;**********************************************************
;
CONTADOR CON DISPLAY DE SIETE SEGMENTOS
;
USANDO EL TMR0 COMO BASE DE TIEMPO DE 10ms
;
PARA CONTAR CADA SEGUNDO
;**********************************************************
;
NOMBRE:
p5a_1d.asm
;
FECHA:
21/06/2010
;
VERSION:
1.00
;
PROGRAMADOR:
Carlos Valdivieso
;**********************************************************
;
DESCRIPCION:
;Se trata de incrementar un contador cada segundo y mostrar
;su valor en el display. Se programa el tmr0 para que genere
;una interrupcin cada 0.01 seg. (10 mS) que se repetir 50
;veces con el objeto de activar el conteo cada 500 mS. Use reloj de
4MHz.
;**********************************************************
;DIRECTIVAS
LIST
INCLUDE

p=16F887
P16F887.INC

;Tipo de microcontrolador
;Define los SFRs y bits del
;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC


;Setea parmetros de
;configuracin
errorlevel

-302

;Deshabilita mensajes de
;advertencia por cambio
bancos

;La directiva "cblock 0X20...endc" reserva espacios de memoria a


partir de 0x20
CBLOCK
contador
unidades
uni_cod
ENDC

0X020
;Cuenta 100 interrupciones
;registro de unidades
;Cdigo de 7 segmentos de unidades

;INICIO DE PROGRAMA
ORG
0x00
GOTO
MAIN
ORG
0x04
GOTO
INTERRUPCION

;Vector de RESET
;Vector de interrupcin

INTERRUPCION
decfsz
goto
movf
call
movwf
movf
movwf
INCF
movlw
subwf
btfss
goto
clrf

contador,f
Seguir
unidades,w
tabla
uni_cod
uni_cod,w
PORTB
unidades,f
.10
unidades,w
STATUS,2
cont
unidades

cont
movlw
movwf

.100
contador

Seguir
movlw

.217

movwf
bcf
RETFIE

TMR0
INTCON,T0IF

;Repone el contador con 100

;"~.39" es el complemento a 256


;equivale a ".217"
;Repone el TMR0 con 217
;Repone flag del TMR0
;Retorno de interrupcin

MAIN
;SETEO DE PUERTOS
BANKSEL
ANSEL
CLRF
ANSEL
CLRF
ANSELH
BANKSEL
TRISB
CLRF
TRISB

;Selecciona el Bank1
;PORTB configurado como salida

;PROGRAMACION DEL TMR0


banksel
OPTION_REG
movlw
b'00000111'
movwf
OPTION_REG
;INICIALIZACION
BANKSEL
CLRF
clrf

;Decrementa el contador 100 veces


;No, todava
;Ya ocurrieron 100 int de 10ms(1000ms)

PORTB
PORTB
unidades

;Programa TMR0 como temporizador


;con preescaler de 256
;Selecciona el Bank 0

;El valor calculado para cargar en TMR0 es de 217 con un preescaler


;de 256 y a una frecuencia de 4MHz, para obtener una interrupcin
;cada 10mS.
movlw
movwf
movlw
movwf

.217
TMR0
.100
contador

;Valor decimal 217


;Carga el TMR0 con 217
;Cantidad de interrupciones a contar
;N de veces a repetir la interrupcin

;PROGRAMACION DE INTERUPCION
movlw b'10100000'
movwf INTCON
;Activa la interrupcin del TMR0
;MOSTRAR CERO INICIAL
clrw
call
tabla
movwf uni_cod
movf
uni_cod,w

movwf PORTB
INCF
unidades,f
Loop
nop
goto

Loop

; TABLA DE CONVERSION
tabla
ADDWF

RETLW

RETLW
0x06
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW

END

PCL,F

; PCL + W -> PCL


; El PCL se incrementa con el
; valor de W proporcionando un
; salto
0x3F
; Retorna con el cdigo del 0
; Retorna con el cdigo del 1
0x5B
; Retorna con el cdigo del 2
0x4F
; Retorna con el cdigo del 3
0x66
; Retorna con el cdigo del 4
0x6D
; Retorna con el cdigo del 5
0x7D
; Retorna con el cdigo del 6
0x07
; Retorna con el cdigo del 7
0x7F
; Retorna con el cdigo del 8
0x67
; Retorna con el cdigo del 9
; Fin del programa fuente

;CALCULO DEL VALOR A CARGAR EN TMR0 A 4MHz


;PARA OBTENER TEMPORIZACION DE 10 MILISEGUNDOS
;CON PREESCALADOR DE 1:256
;Temporizacin=(4Tosc)(256-ValorTMR0)(preescalador)
;0.010=(4Tosc)(256-ValorTMR0)(256)
;ValorTMR0=217

PARTE 2
;**********************************************************
;
CONTADOR DE DOS DIGITOS CON DISPLAY DE SIETE SEGMENTOS
;
USANDO EL TMR0 COMO BASE DE TIEMPO DE 10ms(10x100)
;
PARA INCREMENTAR SU VALOR CADA SEGUNDO DE 00-99
;**********************************************************
;
NOMBRE:
p5b_2d.asm
;
FECHA:
21/06/2010
;
VERSION:
1.00
;
PROGRAMADOR:
Carlos Valdivieso
;**********************************************************
;
DESCRIPCION:
;Se trata de incrementar un contador cada segundo y mostrar
;su valor en dos displays. Uno para unidades y otro para
;decenas. El tmr0 se programa para que genere una
;interrupcin cada 0.01 seg. (10 mS) que se repetir 100
;veces con el objeto de activar el conteo cada 1000 mS.
;Use un reloj de 4MHz.
;**********************************************************
;DIRECTIVAS
LIST
INCLUDE

p=16F887
P16F887.INC

;Tipo de microcontrolador
;Define los SFRs y bits del
;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC


;Setea parmetros de
;configuracin
errorlevel

-302

;Deshabilita mensajes de
;advertencia por cambio
;bancos

CBLOCK
0X020
contador
;Cuenta 100 interrupciones
unidades
uni_cod
decenas
dec_cod
ENDC
;**********************************************************
;PROGRAMA
ORG
0x00
;Vector de RESET
GOTO
MAIN
ORG
0x04
;Vector de interrupcin
GOTO
Interrupcion ;Va a rutina de interrupcin
;DURANTE LA INTERRUPCION SE CUENTAN 100 INTERRUPCIONES
;PARA COMPLETAR 10x100=1000ms.
Interrupcion
movf
unidades,w
call
tabla
movwf uni_cod
movf
uni_cod,w
movwf PORTB
movf
decenas,w
call
tabla
movwf dec_cod
movf
dec_cod,w
movwf PORTC
decfsz
contador,f
;Cuenta espacios de 10ms
goto
Seguir
;An, no son 100 interrupciones
INCF
unidades,f
;Ahora s 10x100=1000ms=1seg
movlw .10
subwf unidades,w
btfss STATUS,2
goto
cont
clrf
unidades
incf
decenas
movlw .10
subwf decenas,w
btfss STATUS,2
goto
cont
clrf
decenas
cont
movlw .100
movwf contador
Seguir
bcf
INTCON,T0IF
movlw .217
movwf TMR0
retfie

;Precarga contador con 100


;Repone flag del TMR0
;Repone el TMR0 con ~.39
;Retorno de interrupcin

MAIN
;SETEO DE PUERTOS
BANKSEL
ANSEL
CLRF
ANSEL
CLRF
ANSELH
BANKSEL
TRISB
CLRF
TRISB
CLRF
TRISC
;INICIALIZACION
BANKSEL
CLRF
CLRF
CLRF
CLRF

PORTB
PORTB
PORTC
unidades
decenas

;Selecciona el Bank1
;PORTB configurado como salida
;PORTC configurado como salida
;Selecciona el Bank0
;Borra latch de salida de PORTB
;Borra latch de salida de PORTC

;El valor calculado para cargar en TMR0 es de 217 con un


;preescaler de 256 y a una frecuencia de 4MHz, para obtener
;una interrupcin cada 10mS. Clculo al final del ejercicio.
;PROGRAMACION DEL TMR0
banksel
OPTION_REG
movlw
b'00000111'
movwf
OPTION_REG
BANKSEL
TMR0
movlw
.217
movwf
TMR0

;TMR0 como temporizador


;con preescaler de 256
;Valor decimal 217
;Carga el TMR0 con 217

;PROGRAMACION DE INTERRUPCION
movlw
b'10100000'
movwf
INTCON
;Activa la interrupcin del TMR0
movlw .100
;Cantidad de interrupciones a contar
movwf contador
;N de veces a repetir la interrupcin
Loop
nop
goto

Loop

; TABLA DE CONVERSION
tabla
ADDWF

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END

PCL,F

; PCL + W -> PCL


; El PCL se incrementa con el
; valor de W proporcionando un
; salto
0x3F
; Retorna con el cdigo del 0
0x06
; Retorna con el cdigo del 1
0x5B
; Retorna con el cdigo del 2
0x4F
; Retorna con el cdigo del 3
0x66
; Retorna con el cdigo del 4
0x6D
; Retorna con el cdigo del 5
0x7D
; Retorna con el cdigo del 6
0x07
; Retorna con el cdigo del 7
0x7F
; Retorna con el cdigo del 8
0x67
; Retorna con el cdigo del 9
; Fin del programa fuente

;CALCULO DEL VALOR A CARGAR EN TMR0 A 4MHz


;PARA OBTENER TEMPORIZACION DE 10 MILISEGUNDOS
;CON PREESCALADOR DE 1:256
;Temporizacin=(4Tosc)(256-ValorTMR0)(preescalador)
;0.010=(4Tosc)(256-ValorTMR0)(256)
;ValorTMR0=217

Parte 3

;**********************************************************
;
CONTADOR DE DOS DIGITOS MULTIPLEXADO CON DISPLAY DE
;
SIETE SEGMENTOS USANDO EL TMR0 COMO BASE DE TIEMPO
;
DE 10ms (10x100) PARA INCREMENTAR SU VALOR CADA
;
SEGUNDO DE 00-99
;**********************************************************
;
NOMBRE:
p5c_2dm.asm
;
FECHA:
21/06/2010
;
VERSION:
1.00
;
PROGRAMADOR:
Carlos Valdivieso
;**********************************************************
;
DESCRIPCION:
;Se trata de incrementar un contador cada segundo y mostrar
;su valor en dos displays colocados en el puerto B usando la
;tcnica de multiplexacin. Uno para unidades y otro para

;decenas. Los displays se refrescan cada 20ms. El tmr0 se


;programa para que genere una interrupcin cada 0.01 seg.
; (10 mS) que se repetir 100 veces con el objeto de activar
;el conteo cada 1000 mS. Use un reloj de 4MHz.
;**********************************************************
;DIRECTIVAS
LIST
INCLUDE

p=16F887
P16F887.INC

;Tipo de microcontrolador
;Define los SFRs y bits del
;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC


;Setea parmetros de
;configuracin
errorlevel

-302

;Deshabilita mensajes de
;advertencia por cambio bancos

CBLOCK 0X020
contador
;Cuenta 100 interrupciones
unidades
uni_cod
decenas
dec_cod
sel
ENDC
;**********************************************************
;PROGRAMA
ORG
0x00
;Vector de RESET
GOTO
MAIN
ORG
0x04
;Vector de interrupcin
GOTO
Interrupcion ;Va a rutina de interrupcin
;DURANTE LA INTERRUPCION SE CUENTAN 100 INTERRUPCIONES
;PARA COMPLETAR 10x100=1000ms.
Interrupcion
movf
sel,w
;Se mueve a si mismo para afectar
bandera
btfss STATUS,2
;sel=0 refresca dig1; sel=1 refresca
dig2
goto
dig2
dig1
movf
unidades,w
call
tabla
movwf uni_cod
movf
uni_cod,w
bsf
PORTA,0
bsf
PORTA,1
movwf PORTB
bcf
PORTA,0
comf
sel,f
goto
dec
dig2
movf
decenas,w
call
tabla
movwf dec_cod
movf
dec_cod,w
bsf
PORTA,0
bsf
PORTA,1
movwf PORTB
bcf
PORTA,1
comf
sel,f
dec
decfsz
contador,f
goto
Seguir
interrupciones
INCF
unidades,f

;cuenta espacios de 10ms


;An, no son 100
;Ahora s 10x100=1000ms=1seg

movlw
subwf
btfss
goto
clrf
incf
movlw
subwf
btfss
goto
clrf

.10
unidades,w
STATUS,2
cont
unidades
decenas
.10
decenas,w
STATUS,2
cont
decenas

cont
movlw .100
movwf contador
Seguir
bcf
INTCON,T0IF
movlw ~.39
movwf TMR0
retfie
MAIN
;SETEO DE PUERTOS
BANKSEL
ANSEL
CLRF
ANSEL
CLRF
ANSELH
BANKSEL
TRISA
CLRF
TRISA
CLRF
TRISB
;INICIALIZACION
BANKSEL
PORTA
CLRF
PORTB
CLRF
PORTC
clrf
clrf
clrf

;Carga contador con 100


;Repone flag del TMR0
;Repone el TMR0 con ~.39
;Retorno de interrupcin

;Selecciona el Bank3
;Selecciona el Bank1
;PORTA configurado como salida
;PORTB configurado como salida
;Selecciona el Bank0

PORTA

;Borra latch de salida de

PORTB

;Borra latch de salida de

unidades
decenas
sel

;PROGRAMACION DEL TMR0


banksel
OPTION_REG
;Selecciona el Bank1
movlw
b'00000111' ;TMR0 como temporizador
movwf
OPTION_REG
;con preescaler de 256
BANKSEL
TMR0
;Selecciona el Bank0
movlw
.217
;Valor decimal 217
movwf
TMR0
;Carga el TMR0 con 217
;PROGRAMACION DE INTERRUPCION
movlw b'10100000'
movwf INTCON
;Activa la interrupcin del
TMR0
movlw .100
;Cantidad de interrupciones a
contar
movwf contador
;N de veces a repetir la
interrupcin
Loop
nop
goto

Loop

; TABLA DE CONVERSION
--------------------------------------------------------tabla
ADDWF

PCL,F

; PCL + W -> PCL

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END

; El PCL se incrementa con el


; valor de W proporcionando un
; salto
0x3F
; Retorna con el cdigo del 0
0x06
; Retorna con el cdigo del 1
0x5B
; Retorna con el cdigo del 2
0x4F
; Retorna con el cdigo del 3
0x66
; Retorna con el cdigo del 4
0x6D
; Retorna con el cdigo del 5
0x7D
; Retorna con el cdigo del 6
0x07
; Retorna con el cdigo del 7
0x7F
; Retorna con el cdigo del 8
0x67
; Retorna con el cdigo del 9
; Fin del programa fuente

6.- Copia impresa del circuito armado en PROTEUS para la simulacin en el


momento de su ejecucin
PROGRAMA 1

PROGRAMA 2

PROGRAMA 3

Voltaje de activacin de los displays.

7.- Conclusiones

En los proyectos que desarrollamos a lo largo de esta prctica vimos que


es mejor trabajar con los temporizadores TIMER que con las
interrupciones por retardos ya que estos nos dan una mejor precisin al
momento de requerir un tiempo especfico entre cada interrupcin y
para crear contadores son muy esenciales.

Si se trabaja con varios displays la tcnica del multiplexado por divisin


de tiempo resulta muy til ya que permite que la comunicacin entre el
pic y los displays sea en el mismo puerto y que se muestre en pantalla
varios dgitos a la vez, con esto se logra un ahorro de pines y que los
otros puertos del pic queden libres para su uso normal.

Para la correcta visualizacin de los nmeros en los displays se utilizaron


tablas de conversin que lo que hacen es a partir del nmero en
hexadecimal asignarle su correspondiente cdigo en 7-segmentos, se
podra utilizar una tcnica similar en el caso de querer visualizar letras
en una matriz de leds.

8.- Recomendaciones

No olvidar cambiar el estado de las bandera en el registro INTCON ya


que si no lo hacemos entonces el programa no va a funcionar como lo
esperamos, una cosa adicional es que cuando usamos el TIMER0
debemos darnos cuenta que el pic no trabaje en modo bajo consumo de
energa.

Tener en cuenta al momento de armar el circuito simulado en PROTEUS,


ya que es muy comn que aparezcan ciertos errores como lo son, poner
mal la etiqueta en el cable que usamos o peor an no hacer bien el
contacto entre los diferentes dispositivos que utilizamos con frecuencia.

Tener en cuidado con los cambios bancos, cuando se quiera usar un


registro primero se tiene que estar en el banco correspondiente de
dicho registro caso contrario habr error, en este caso usamos
BANKSELF este busca el banco donde se encuentra el registro.

A la hora de elegir los displays en proteus tener en cuenta el tipo de


lgica que se utilizara para la visualizacin de los dgitos ya que de una
forma o la otra los displays sern nodo comn o ctodo comn y lo
mismo para los displays de dos dgitos tener en cuenta que algunos
funcionan con DC y otros con AC.

ANEXO DE RESPUESTAS A PRCTICA 4


INTEGRANTE 1: Maritza Isabel Chvez Tigrero
INTEGRANTE 2: Jos Daniel Plas Segura
PARALELO: 8
GRUPO: 2
RESPONDER
1) Se trata de mostrar valores de segundos minutos utilizando
como DISPLAY para los segundos 6 LEDS del puerto A, para los
minutos 6 LEDS del puerto B.
Deber simularlo a velocidad normal y a velocidad rpida para
poder observar el correcto funcionamiento.
Use un reloj de 4MHz.

LIST
INCLUDE

p=16F887
P16F887.INC

;Tipo de microcontrolador
;Define los SFRs y bits del
;P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_XT_OSC


;Setea parmetros de
;configuracin
errorlevel

-302

;Deshabilita mensajes de
;advertencia por cambio
;bancos

CBLOCK
0X020
contador
;Cuenta 100 interrupciones
unidades
uni_cod
decenas
dec_cod
disp
ENDC
;*********************************************************************
;PROGRAMA
ORG
0x00
;Vector de RESET
movlw .0
movfw disp
GOTO
MAIN
ORG
0x04
;Vector de interrupcin
GOTO
Interrupt
;Va a rutina de interrupcin
;DURANTE LA INTERRUPCION SE CUENTAN 100 INTERRUPCIONES
;PARA COMPLETAR 10x100=1000ms.
Interrupt
movf
unidades,w
incf
disp,f
movwf uni_cod
movf
uni_cod,w

movwf
movf
incf
movwf
movf
movwf
decfsz
goto
INCF
movlw
subwf
btfss
goto
clrf
incf
movlw
subwf
btfss
goto
clrf

PORTB
decenas,w
disp,f
dec_cod
dec_cod,w
PORTC
contador,f
Seguir
unidades,f
.60
unidades,w
STATUS,2
cont
unidades
decenas
.60
decenas,w
STATUS,2
cont
decenas

;Cuenta espacios de 10ms


;An, no son 100 interrupciones
;Ahora s 10x100=1000ms=1seg

cont
movlw .100
movwf contador

;Precarga contador con 100

Seguir
bcf
INTCON,T0IF
movlw .217
movwf
TMR0
retfie

;Repone flag del TMR0


;Repone el TMR0 con ~.39
;Retorno de interrupcin

MAIN
;SETEO DE PUERTOS
BANKSEL
CLRF
CLRF
BANKSEL
CLRF
CLRF

ANSEL
ANSEL
ANSELH
TRISB
TRISB
TRISC

;INICIALIZACION
BANKSEL
CLRF
CLRF
CLRF
CLRF

PORTB
PORTB
PORTC
unidades
decenas

;Selecciona el Bank1
;PORTB configurado como salida
;PORTC configurado como salida
;Selecciona el Bank0
;Borra latch de salida de PORTB
;Borra latch de salida de PORTC

;El valor calculado para cargar en TMR0 es de 217 con un


;preescaler de 256 y a una frecuencia de 4MHz, para obtener
;una interrupcin cada 10mS. Clculo al final del ejercicio.
;PROGRAMACION DEL TMR0
banksel
OPTION_REG
movlw
b'00000111' ;TMR0 como temporizador
movwf
OPTION_REG
;con preescaler de 256
BANKSEL
TMR0
movlw
.217
;Valor decimal 217
movwf
TMR0
;Carga el TMR0 con 217
;PROGRAMACION DE INTERRUPCION
movlw b'10100000'
movwf INTCON
movlw .100
movwf contador
Loop
nop
goto

Loop

;Activa la interrupcin del TMR0


;Cantidad de interrupciones a contar
;N de veces a repetir la interrupcin

; TABLA DE CONVERSION
tabla
ADDWF

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END

PCL,F

0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
0x08
0x09

;
;
;
;
;
;
;
;
;
;

; PCL + W -> W
; El PCL se incrementa con el
; valor de W proporcionando un
; salto
Retorna con el cdigo del 0
Retorna con el cdigo del 1
Retorna con el cdigo del 2
Retorna con el cdigo del 3
Retorna con el cdigo del 4
Retorna con el cdigo del 5
Retorna con el cdigo del 6
Retorna con el cdigo del 7
Retorna con el cdigo del 8
Retorna con el cdigo del 9
; Fin del programa fuente

;CALCULO DEL VALOR A CARGAR EN TMR0 A 4MHz


;PARA OBTENER TEMPORIZACION DE 10 MILISEGUNDOS
;CON PREESCALADOR DE 1:256
;Temporizacin=(4Tosc)(256-ValorTMR0)(preescalador)
;0.010=(4Tosc)(256-ValorTMR0)(256)
;ValorTMR0=217

You might also like