Está en la página 1de 21

B

U
A
P

Benemrita Universidad Autnoma de Puebla


Facultad de Ciencias de la Electrnica
Maestra en Ingeniera Electrnica,
Opcin Instrumentacin Electrnica

Prctica 5
Reloj digital y despliegue de mensaje mediante el uso de
redireccionamiento indirecto

Presentan:
Nancy Elizabeth Gonzlez Sierra
Jess Alberto Ordaz Rivera
Rafael Guadalupe Coxca Gutirrez

Asignatura:
Sistemas Programables

Catedrtico:
M.C. Ricardo lvarez Gonzlez

27 de Marzo de 2015

ndice General

OBJETIVOS.......................................................................................................... 4

Objetivo General......................................................................................... 4

Objetivo Especficos................................................................................... 4

MARCO TERICO................................................................................................. 5

Introduccin............................................................................................... 5

Uso de Timers en un PIC............................................................................. 5

Timer0........................................................................................................ 7

DESARROLLO...................................................................................................... 9
RESULTADOS..................................................................................................... 13
Cdigo Implementado con el apuntador........................................................................15
CONCLUSIONES................................................................................................ 19
BIBLIOGRAFA................................................................................................... 19

ndice de Figuras
Figura 1. Diagrama de bloques del Timer contador 0 en modo de 8 bits
............................................................................................................................ 8
Figura 2. Simulacin del circuito Contador.................................................9
Figura 3. Cdigo a desplegar para el display ctodo comn (0-9)..........9
Figura 4. Configuracin del valor mnimo del apuntador........................10
Figura 5. Asignacin del valor de precarga..............................................10
Figura 6. Lectura del valor a desplegar.....................................................10
Figura 7. Configuracin del valor mximo del apuntador.......................11
Figura 8. Rutina de conteo descendente y verificacin de ndices del
conteo.............................................................................................................. 12
Figura 9. Rutina de interrupciones.............................................................12
Figura 10. Circuito implementado para el contador Ascendente Descendente.................................................................................................. 13
Figura 11. Comportamiento del contador Ascendente...........................14
Figura 12. Comportamiento del contador Descendente.........................14

OBJETIVOS

Objetivo General

Implementar un contador ascendente-descendente que despliegue en valor decimal los


dgitos del 0 al 1000, mediante el uso de 4 display de siete segmentos respectivamente,
implementando dicho comportamiento a travs del PIC18F4550 y el uso del Timer0, en
lenguaje ensamblador.

Objetivo Especficos
1. Considerar el bit B0 del puerto B del PIC18F4550 como entrada de interrupcin
externa mediante un push-botton, y configurar el puerto D como salida para cada
segmento de los 4 display, y el puerto C para el multiplexado de los mismos.
2. Considerar los segmentos que deben estar activos en el display (en este caso se
utilizar el de ctodo comn) para representar la numeracin decimal, de 0 a 9. Para
una representacin extendida de 0 al 1000.
3. Emplear el estado del push-botton mediante la interrupcin generada para
cambiar el sentido de la cuenta: ascendente o descendente.
4. Describir una rutina en cdigo ensamblador utilizando tabla de bsqueda, as como
el timer0 y el multiplexado de los displays, para la realizacin de sub-rutinas de
conteo y para acceder a estos valores mediante instrucciones de lectura de tabla para
mandarlos al puerto D.
5. Simular el circuito fsico que implementar en la prctica.
6. Realizar las conexiones pertinentes para la entrada de la interrupcin externa, las
salidas de los segmentos y multiplexado de los displays.
7. Emplear el prototipo del contador ascendente-descendente.

MARCO TERICO

Introduccin

El uso del lenguaje ensamblador le permite al programador indicarle al computador


exactamente cmo llevar a cabo una tarea especfica usando la menor cantidad de
instrucciones. Aun cuando el cdigo generado por los compiladores con opcin de
optimizacin es eficiente, la optimizacin manual puede resultar en una mejora sustancial
en trminos de rendimiento y consumo de memoria.
El lenguaje ensamblador es usualmente utilizado en las siguientes circunstancias:

Mejorar la eficiencia de una rutina especfica que se ha transformado en un cuello


de botella.
Obtener acceso a funciones de bajo nivel del procesador para realizar tareas que no
son soportadas por los lenguajes de alto nivel.
Escribir manejadores de dispositivos para comunicarse directamente con hardware
especial tales como tarjetas de red.
Trabajar en ambientes con recursos limitados puede requerir el uso del lenguaje
ensamblador pues el cdigo ejecutable puede ser menor que el generado por el
compilador.
Los lenguajes ensamblador tienen sus aplicaciones muy reducidas, se centran
bsicamente en aplicaciones de tiempo real, control de procesos y de dispositivos
electrnicos. [1].

Uso de Timers en un PIC

La mayora de los microcontroladores tienen uno o varios timers. Estos son muy tiles para
medir el tiempo que ha pasado entre dos eventos, establecer tareas para ejecutarse a
intervalos regulares, etc. Dependiendo del modelo y tipo de los PICs cuentan con un
nmero variable de timers.
Entonces, cul es la diferencia entre un contador y un contador de tiempo? Ambos
componentes pueden contar eventos. La distincin viene realmente de cmo se utiliza estos
mdulos. Por ejemplo, podramos contar el nmero de veces que un botn pulsador es
presionado por conectarlo a la entrada de un mdulo / contador del temporizador.

Se describir con cierto detalle el timer0 (TMR0). Los dems son muy similares, aunque
siempre conviene tomar como referencia el manual correspondiente, sobre todo porque
algunos de ellos estn asociados a otras tareas y puede que no estn disponibles para su uso
general si se estn usando ciertos perifricos.
Describiremos los registros asociados para configurar el temporizador. La idea es ser
capaces por nuestra cuenta de reproducir dichas rutinas lo que puede ser importante si lo
que queremos hacer no se puede hacer exactamente con las rutinas suministradas.
La configuracin de los timers est basada en ciclos del oscilador.
De manera especfica, para hacer uso de los timers, en primer lugar, se requiere una fuente.
Est bien podra ser un reloj sncrono proporcionada por un oscilador o un suceso que no es
tan peridica tal como un botn pulsador conectado a la clavija de entrada TIMERx reloj
(TxCKI).
A continuacin, tendr que ser almacenado en alguna parte el valor actual. En el rango
medio del microcontrolador PIC, este ser un registro de 8 a 16 bits que se encuentra en la
memoria de datos, dependiendo de cul de los tres mdulos de temporizador / contador se
utiliza. Un valor binario en este registro se incrementar en uno dependiendo de un flanco
seleccionado de una transicin de la seal. Por ejemplo, si hemos configurado el mdulo
para incrementar en el flanco negativo de la seal, el registro de valor aumentara en uno
cada vez que se encuentra una transicin de alto a bajo en la fuente.
Por ltimo, cada uno de los tres temporizador / contadores tiene al menos un escalador.
Estos escaladores pueden venir antes (prescaler) o despus (postscaler) el valor del registro
de temporizador / contador. Un escalador funciona dividiendo una seal de entrada por un
valor especfico. Por ejemplo, si tenemos una seal de entrada peridica con una frecuencia
de 1.000 Hz (1000 Hz = 1.1 mS) y se pasa a travs de un pre-escalador se establece en 2: 1,
el valor en el registro del temporizador valor / contador incrementara por 1 por cada dos
transiciones de lgica de la seal o a una frecuencia de 500 Hz. La seal se hace ms lenta.
Un timer no es ms que un contador cuya entrada est conectada al reloj del sistema. De
hecho, la mayora de los timers pueden reconfigurarse como contadores. En ese caso, en
lugar de contar algn pulso de una entrada, cuenta pulsos de reloj, dicho de otra manera su
funcionamiento es descrito como temporizador.
Por defecto la seal que van a contabilizar los timers corresponde a la frecuencia del
oscilador dividida por cuatro. Por lo tanto en realidad cuentan ciclos mquina, no ciclos de
reloj. Con un reloj de 20 Mhz tendramos una frecuencia de ciclos mquina de 20/4 = 5
MHz, por lo que un ciclo mquina corresponde a 0.2 usec. En principio, el contador del
timer se incrementar cada 0.2 microsegundos o 5 veces en 1 usec.

Timer0

Este perifrico puede funcionar como timer, teniendo como base de tiempo, el ciclo interno
de ejecucin de instrucciones Fosc/4, pero tambin puede funcionar como contador,
contando los impulsos que le llegan por el pin RA4 en su funcin alterna T0CKI (Timer 0
Clock Input).
Tenemos 4 registros asociados al TMR0:
T0CON: el ms importante de cara a la configuracin del timer:

T0CON.TMR0ON (bit 7)

arranca (1) o para (0) el TIMER

T0CON.T08bit

(bit 6)

selecciona modo 8 bits (1) o 16 bits (0)

T0CON.T0CS

(bit 5)

selecciona modo TIMER (0) o contador externo (1)

T0CON.T0SE

(bit 4)
en caso de contador externo decide si cuenta en
flanco subida (0) o bajada (1).

T0CON.PSA

(bit 3)

T0CON.PS0-2

(bits 2-0) bits que definen el valor del divisor previo, desde 1
:2 (000) hasta 1:256 (111)

uso (0) o no (1) de un divisor (prescaler) previo.

TMR0L y TMR0H: permiten acceder (lectura/escritura) al valor del contador (TMR0L


para el byte menos significativo y TMR0H para el ms significativo).
INTCON: Bits para activar la interrupcin asociada al Timer0 (ver la entrada sobre
interrupciones).
Las decisiones importantes de cara a la configuracin del timer son:
Uso de contador de 8 o 16 bits. Si se escoge 8 bits solo se usa TMR0L como contador y
obviamente se resetear cada 256 incrementos. Esto es importante tambin de cara a las
posibles interrupciones asociadas, ya que la interrupcin del TIMER0 se produce al pasar
por 0 el contador.
Si queremos hacer ms lento el contador podemos usar el prescaler, que no es ms que un
divisor previo que hace que slo se cuenten 1 de cada N ciclos. N puede ser 1 (sin
prescaler), 2, 4, 8, etc. En ese caso hay que poner a 0 el bit PSA (usar PRESCALER) y
poner el valor correspondiente en los bits asociados. La frmula es simplemente que divisor
N deseado ser = 2^(bits_PS+1).

Una vez en marcha el timer podemos consultar su valor accediendo a los registros TMR0L
y TMR0H. El byte alto TMR0H no es el verdadero byte alto del contador sino un buffer de
dicho valor. La razn de esto es asegurar la consistencia al hacer lecturas/escrituras de un
contador de 16 bits en un procesador de 8 bits.
El registro T0CON controla todos los aspectos de la operacin del mdulo, incluida la
seleccin de preescaler. Es a la vez de lectura y escritura.
La interrupcin se genera al desbordarse el Timer contemplando el valor de precarga.

Figura 1. Diagrama de bloques del Timer contador 0 en modo de 8 bits

DESARROLLO
En una etapa inicial se procedi a realizar la simulacin del circuito a implementar,
mediante el uso del cdigo que describira el comportamiento del reloj y el despliegue del
mensaje dinmico rotatorio, mediante el uso de cuatro displays y rutinas de
direccionamiento indirecto como se muestra en la Figura 2.

Figura 2. Simulacin del circuito Contador

De manera inicial se configura el oscilador interno a 4MHz, as como se activa el timer0 en


el registro ITCON y se prende el timer en 8 bits, y un prescaler de 256 mediante el registro
T0CON.
Guardamos los valores para los cdigos de los nmeros a desplegar por parte del reloj en la
memoria ROM con direccin 0x300, as como los valores del mensaje a desplegar; para
este caso: HOLA FCE BUAP , como se muestra en la figura.

Figura 3. Cdigo a desplegar para el display (0-9) y mensaje dinmico

Para realizar el direccionamiento indirecto, de manera incial se tenia que pasar los datos
guardados en ROM a RAM, los cuales se pasaran a la direccin 0x200, esto quiere decir
que se guardaran en el banco 2 mediante el apuntador LFSR0.

Mediante el uso de la instruccin tblrd*+ se realiza el incremento de la lectura de la tabla


ubicada en ROM con direccin inicial de 0x300, y cuyos valores se encuentra en el registro
TABLAT, valores los cuales son asignados al registro virtual POSTINC0, propia del
direccionamiento indirecto y mediate el cual se realiza un incremento. De esta manera se
comienza a pasar cada dato de las tabla en ROM a la memoria RAM mediante el uso de
FSR0. Y para saber hasta cuando a finalizado de pasar los datos de una memoria a otra, se
realiza la operacin XOR del valor FSR0 con un 34 en dicimal, lo que significa el
nmero de caracteres o datos a guardar como se muestra en la figura.

Figura 4. Traspaso de datos de la memoria ROM a RAM.

Posteriormente, para realizar la lectura de los datos ya guardados en RAM, mediante el uso
del direccionamiento indirecto, se le asigna el valor de la direccin en que se encuentra el
primer carcter del mensaje a desplegar, para que de esta manera el corrimiento comience
desde la letra H, del mensaje HOLA BUAP FCE .
Para el despliegue de los caracteres en cada uno de los 4 de los displays de 7 segmentos, se
realiza una rotacin, con motivo de rotar el bit de encendido de cada uno de estos, lo cual
significara la multiplexin de los displays a la velocidad que permita engaar al ojo
humano, y de esta manera visualizar los caracteres esperados.

10

El despliegue total de cada uno de los caracteres, se realiza mediante la instruccin definida
nicamente para el direccionamiento indirecto PLUSW, la cual nos permite ir realizando
la suma de la direccin base 200 con el incremento de contletrero y llegar de esta
manera a la direccin final del dato a desplegar como se observa en la figura.

Figura 5. Lectura de direccionamiento indirecto

Se realiza la lectura del apuntador, una vez verificada la bandera de interrupcin, as como
la asignacin del ndice para cada uno de los displays del reloj como se muestra en la
figura.

Figura 6. Lectura del apuntador

11

Finalmente, el desplegado de cada carcter para el reloj nuevamente se realiza mediante la


rotacin del bit de encendido del puerto A, una vez determinado el ndice de unidades de
minutos, decenas de minutos, unidades de horas y decenas de horas como se muestra en la
figura.
Teniendo en cuenta algunas restricciones descritas en otras subrutinas para el valor inicial
de la hora, as como la cuenta de limite superior de carcter a desplegar para cada caso, sea
el despliegue de los minutos u horas.

Figura 7. Desplegado de datos

12

RESULTADOS
Se realiz la implementacin del circuito, empleando el PIC18F4550, 4 transistores, 4
display`s de 7 segmentos (ctodo comn), un push botton, y una fuente de alimentacin
como se muestra en la Figura 10. Se prob el funcionamiento del contador ascendentedescendente a travs de la interrupcin del bit RB0 mediante el push botton, y el encendido
de los 4 displays, para que de esta manera se desplegar un nmero de 4 dgitos, unidades,
decenas, centenas y millares.
Para el despliegue de los 4 dgitos del contador ascendente descendente, se realiz una
rutina de multiplexado de los transistores, cuyo valor de retardo era de aproximadamente 1
milisegundo, tiempo suficiente para engaar al ojo humano, y de esta manera visualizar
el despliegue del valor en decimal para las unidades, decenas, centenas y millares del
contador; seleccionando el comportamiento ascendente o descendente a travs de la
activacin de la interrupcin externo mediante el push botton como se muestra en la Figura
10 .

Figura 8. Circuito implementado para el contador Ascendente - Descendente.

Cabe mencionar que para el despliegue de los valores del display se utiliz los perifricos
del puerto D, dado el caso de multiplexado, se utiliz el puerto C, en el cual se realiz un
inspeccin para la seleccin de perifricos de salida, ya que algunos de manera especfica
estn reservados para su uso en la comunicacin USB, razn por la cual no se pueden
referenciar como perifricos de salida.
13

Se procedi a realizar las pruebas pertinentes del conteo ascendente y descendente a travs
de la activacin de la interrupcin, optimizando el cdigo mediante el uso del timer0 y
apuntadores para el despliegue de los valores decimales del contador.
De manera inicial, al prender la fuente de voltaje se pudo observar que el conteo se
encontraba en forma ascendente, incrementndose por unidad desde el 0, con un retardo
aproximado de un segundo, teniendo un valor inicial igual con 0000, y se verifica su
comportamiento ascendente como se muestra en la Figura 11.

Figura 9. Comportamiento del contador Ascendente

Posteriormente al oprimir el botn correspondiente a la activacin de la interrupcin se


pudo observar que el conteo se encontraba en forma descendente, decrementndose por
unidad, con un retardo aproximado de un segundo, pasando por la transicin del valor
mnimo 0000 y un valor mximo de conteo igual con 9999, con lo cual se verific su
comportamiento descendente como se muestra en la Figura 12.

14

Figura 10. Comportamiento del contador Descendente

Cdigo Implementado con el apuntador.


;************************************************************************************
LIST
P=18F4550
;directiva para definir el procesador
#include <P18F4550.INC> ;definiciones de variables especificas del procesador
CONFIG
FOSC =INTOSC_XT
;INTERNO oscillator, XT used by USB
CONFIG
BOR=OFF
;BROWNOUT RESET APAGADO
CONFIG
PWRT= ON
;TIMER DE ENCENDIDO ACTIVO
CONFIG
WDT= OFF
;TEMPORIZADOR VIGIA APAGADO
CONFIG MCLRE=OFF ;RESET APAGADO
CONFIG
PBADEN=OFF
CONFIG
LVP=OFF
;*************************************************************************************
;Definiciones de variables
CBLOCK
0x000 ; ejemplo de definicin de variables en RAM de acceso
ium
;ndice de unidades minutos
idm
;ndice de decenas minutos
iuh
;ndice de unidades horas
idh
;ndice de decenas horas
cum
cdm
cuh
cdh

;cdigo de 7 segmentos de unidades


;cdigo de 7 segmentos de decenas
;cdigo de 7 segmentos de centenas
;cdigo de 7 segmentos de millares

cont
csegundero
CRL
flags
contletrero
repetir
max
ENDC

;contador para el retardo


;contador de segundos
;contador para activar el letrero
;0=int timer;1=int ext;2=Dir;3=seg
;contador a sumar al letrero
;rotacin maxima del letrero
;Posicion de inicio del letrero
;fin del bloque de constant

15

;**************************************************************************************
ORG 0x0000
goto
inicio
;direccionamos al inicio
org
0x08
;vector de alta prioridad
goto
INT
;ramifica servicio interrupcin T0
org
0x18
;vector de baja prioridad
goto
INTBAJA
;ramifica servicio interrupcin T0
;********************CONFIGURACIN************************************************
org
0x0020
inicio
bsf
OSCCON,4,0
bsf
OSCCON,5,0
bcf
OSCCON,6,0
;Oscilador interno a 4 MHz
movlw 0xE0
movwf INTCON,0
;Activamos INT0 Timer0
bsf
RCON,IPEN,0 ;habilitamos prioridades de interrupcin
movlw 0x0F
movwf ADCON1,0
;Puertos Digitales
clrf
PORTD,0
clrf
TRISD,0
;Puerto D Configurado como salida
clrf
LATA,0
;Escribimos directamente en el puerto A
clrf
TRISA,0
;puerto a como salida
clrf
repetir,0 ;repeticiones desde 0
clrf
contletrero,0
movlw d'14'
movwf max
movlw 0x18
movwf INTCON3,0
;habilitamos int1,int2 en baja prioridad
movlw 0xD7
movwf T0CON,0
;Timer on, 8 bits, prescaler x 256
clrf
TBLPTRL,0
movlw 0x03
movwf TBLPTRH,0
clrf
TBLPTRU,0
;Apuntador tblptr=0x000300
clrf
csegundero
clrf
flags,0
clrf
CRL,0
precarga
movlw d'134'
movwf TMR0L,0
;valor de precarga para 1 seg
clrf
WREG,0
movlw 0x00
movwf TBLPTRL
;direccin inio de mensaje
LFSR FSR0,0x0200
NEXT
tblrd*+
movff TABLAT,POSTINC0
movf FSR0L,W,0
xorlw d'34'
BTFSS STATUS,Z,0
BRA NEXT
clrf
ium
;reloj inicia en 12:00pm
clrf
idm
movlw 0x02
movwf iuh
movlw 0x01
movwf idh
bsf
seg,0

16

direccionar

btfss
flags,2,0 ;verifica que mostrar en los displays
bra
lee
bra
sig
;***********************************************************************************
;*****************LECTURA DIRECCIONAMIENTO INDIRECTO*************************
DespInd
bcf
flags,1,0
;limpia bandera int ext
movff max,contletrero ;valor a iniciar del mensaje
movlw 0x10
movwf PORTA,0
LFSR FSR0, 200h
clrf
repetir,0
;reinicia para empezar a rotar
sig

bcf
LFSR
movf
rrcf
movff
call

flags,1,0
;limpia bandera int ext
FSR0, 200h
contletrero,W,0 ;valores a mostrar
PORTA,1,0
;rotar a la derecha
PLUSW0,PORTD
retardo

incf
incf

repetir,1,0
contletrero,1,0

movf repetir,W,0
xorlw 0x04
;rotar 4 veces maximo
btfsc
STATUS,Z
bra
DespInd
goto
checar
;direcciona para verificar las banderas
;********************LECTURA APUNTADOR*****************************************
lee
bcf
flags,1,0 ;limpia bandera int ext
movff ium,FSR0L
;ajusta apuntador
movff INDF0,cum
;codigo unidades tiene cdigo 7 segmentos
movff
movff

idm,FSR0L
INDF0,cdm

;ajusta apuntador
;codigo decenas tiene cdigo 7 segmentos

movff
movff

iuh,FSR0L
INDF0,cuh

;ajusta apuntador
;codigo centenas tiene cdigo 7 segmentos

movff
movff

idh,FSR0L
INDF0,cdh

;ajusta apuntador
;codigo millares tiene cdigo 7 segmentos

goto
loop
;******************DESPLEGADO*****************************************************
loop
movlw 0x01
movwf PORTA,0
movff cum,PORTD
;despleagamos el valor de cuni en el display
call
retardo
;retardo 1ms
rlcf
PORTA,1,0
;rotar a la izquierda
movff cdm,PORTD
;despleagamos el valor de cdec en el display
call
retardo
;retardo 1ms
rlcf
PORTA,1,0
;rotar a la izquierda
movff cuh,PORTD
;despleagamos el valor de ccen en el display
call
seg
call
retardo
;retardo 1ms
movf idh,W,0
;compara si las horas estan en unidades
xorlw 0x00
;si es asi no enciende el primer display

17

btfsc
STATUS,Z,0
goto
checar
rlcf
PORTA,1,0
;rotar a la izquierda
movff cdh,PORTD
;despleagamos el valor de cmil en el display
call
retardo
;retardo 1ms
;*************************************************************************************
;********************TESTEO DE INTERRUPCIONES*************************************
checar
btfsc
flags,1,0
;Se verifica si existe una ineterrupcin externa
goto
direccionar
btfss
flags,0,0
;verifica si se ha desbordado el timer 0
bra
direccionar
bcf
flags,0,0
;********************RUTINA DE TIEMPO***********************************************
btg
flags,3,0
incf
csegundero,F,0
movf csegundero,W,0
xorlw 0x78
;compara si el segundero ha cambiado 120 veces
btfss
STATUS,Z,0
bra
CL
clrf
csegundero
;reicinicia segundero
call
incremento
bra
dir
CL
btfsc
flags,2,0
bra
letrero
incf
CRL,F,0
;inc contador para para mostrar letrero
movf CRL,W,0
;si es igual a seis se cambia el direccionamiento
xorlw 0x06
btfsc
STATUS,Z,0
call
BitDir
dir
btfss
flags,2,0
bra
direccionar
bra
DespInd
;*********************DIRECCIONAR*********************************************
BitDir
bsf
flags,2,0
return
;********************INCREMENTO MENSAJE************************************
letrero
incf
max,f,0
;incrementa para iniciar a multiplexar con otra letra
movf max,w,0
xorlw 0x1C
btfsc
STATUS,Z
call
borrar
;borra si max llega al maximo de inicio a desglosar
bra
sig
borrar
clrf
max,0
;reinicia max
clrf
CRL
;reinicia con crl para comenzar a contar los segundos
para activar
movlw d'14'
movwf max
bcf
flags,2,0
return
;********************INCREMENTO RELOJ***************************************
incremento
movf idh,W,0
xorlw 0x02
btfsc
STATUS,Z,0
goto
IncDis2
IncDis1
incf
ium,F,0
movf ium,W,0

18

xorlw 0x0a
btfss
STATUS,Z,0
;verifica lmite superior de tabla de las unidades
return
clrf
ium,0
incf
idm,F,0
movf idm,W,0
xorlw 0x06
btfss
STATUS,Z,0
;verifica lmite superior de tabla de las decenas
return
clrf
idm,0
horas
incf
iuh,F,0
movf iuh,W,0
xorlw 0x0a
btfss
STATUS,Z,0
;verifica lmite superior de tabla de las centenas
return
clrf
iuh,0
;_________________________________________________________________________________
incf
idh,F,0
return
IncDis2
incf
ium,F,0
movf ium,W,0
xorlw 0x0a
btfss
STATUS,Z,0
;verifica lmite superior de tabla de las unidades
return
clrf
ium,0
incf
idm,F,0
movf idm,W,0
xorlw 0x06
btfss
STATUS,Z,0
;verifica lmite superior de tabla de las decenas
return
clrf
idm,0
horas2
incf
iuh,F,0
movf iuh,W,0
xorlw 0x04
btfss
STATUS,Z,0
;verifica lmite superior de tabla de las centenas
return
clrf
iuh,0
clrf
idh,0
return
;********************DESPLEGAR SEGUNDERO************************************
seg
bsf
PORTD,7
btfsc
flags,2,0
return
btfsc
flags,3,0
bcf
PORTD,7
return
;*********************INT ALTA**************************************************
INT
btg
flags,0,0
bcf
INTCON,TMR0IF,0
movlw d'134'
movwf TMR0L,0
retfie
;********************INT BAJA****************************************************
INTBAJA
bsf
flags,1,0
btfss
INTCON3,INT1IF,0
;Limpiamos bandera de interrupcin
goto
int2

19

bcf
INTCON3,INT1IF,0
;Limpiamos bandera de interrupcin
movf idh,W,0
xorlw 0x02
btfsc
STATUS,Z,0
goto
test
call
horas
retfie
test
call
horas2
retfie
;__________________________________________________________________________________
int2
btfss
INTCON3,INT2IF,0
goto
INTBAJA
bcf
INTCON3,INT2IF,0
call
incremento
retfie
;**********************RETARDO**************************************************
retardo
movlw d'40'
movwf cont,0
nada
nop
decfsz cont,F,0
bra
nada
return
;************************************************************************************
org
0x300
;DB directiva que Define Byte
DB
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xB8,0x80,0x98,0xC0,0xF9,0xA4
DB 0X89,0XC0,0XC7,0X88,0xff,0X8E,0XC6,0X86,0XFF,0x83,0xC1,0x88,0x8C,0XFF,0xFF,0xFF,0xFF
END

CONCLUSIONES
Es de gran importancia para el desarrollo de algoritmos conocer todos los recursos con los
que cuenta el microcontrolador PIC18F4550,puesto que se puede reducir y simplificar
significativamente el cdigo si se resuelven de distintas maneras el mismo problema,
proponiendo algn algoritmo que nos facilite el proceso de resolver el problema.
De esta manera el mtodo de tablas de bsqueda en memoria reduce de forma considerable
las lneas de cdigo, simplificndolo, en comparacin con la tcnica de goto calculado y el
mtodo de saltos, sin embargo, una desventaja, es que las operaciones de incremento y
decremento solo existen para los dos en su forma pos decremento y pos incremento,
volviendo inexacto el conteo, ya que realizan la operacin despus de enviar los datos.

20

BIBLIOGRAFA
[1] https://sites.google.com/site/lenguajedemicroprocesadores/contact-us
[2] Hoja de especificaciones del PIC18F4550.
[3] Enrique Palacios, Fernando Ramiro. Microcontrolador PIC16F84: desarrollo de
proyectos. Editorial ALFAOMEGA. Primera edicin. Mxico, 2004. 318 pp.
[4] http://tecnoface.com/tutoriales

21

También podría gustarte