Está en la página 1de 9

Universidad Tecnológica de Tulancingo

Ingenierı́a en Mecatrónica
Microcontroladores

Reporte

Contador de 0 a 255 en Hexadecimal

Arturo Hernández Romero

Grupo: Mecatrónica 51-B


Profesor: Gildardo Godinez Garrido

09/02/2018
CONTADOR HEXADECIMAL ÍNDICE

Índice
1. Introducción III

2. Marco teórico III

3. Desarrollo V

4. Conclusión IX

Microcontroladores II de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 2 MARCO TEÓRICO

1. Introducción
A lo largo de las prácticas elaboradas en lenguaje ensamblador, se han podido iden-
tificar diferentes comandos, diferentes funciones en el programa, diferentes maneras de
arreglar el código y ordenarlo. En el presente reporte de práctica se presentará el proce-
so llevado a cabo en la elaboración de un contador de cero a doscientos cincuentaicinco.
Se presentará la metodologı́a utilizada durante la elaboración del programa en MPLAB,
un diagrama de flujo para la mejor comprensión del algoritmo implementado en el códi-
go del programa,la explicación del circuito fı́sico y una breve introducción sobre lo que
es el conteo en el sistema hexadecimal.

2. Marco teórico
De manera breve, es necesario abordar lo que son los registros de la memoria del mi-
crocontrolador que utilizamos, dado que gran parte de las instrucciones que se utilizan,
requieren que el usuario tenga conocimiento de que registros manipula o pide durante
el programa.

Figura 1: Memoria del PIC

Es necesario hacer mención que el registro de la memoria se divide en dos, en el ban-


co cero y el banco uno. El banco cero es el banco en el que se puede realizar el programa
y manipularlo de la manera que a uno le convenga, el banco uno permite al usuario rea-
lizar la declaración de entradas y salidas del programa. Inicialmente para realizar esto,

Microcontroladores III de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 2 MARCO TEÓRICO

se debe cambiar del banco inicial al banco deseado, y luego regresar al de origen. Por
ejemplo, para pasar del banco cero al banco uno, se deberá escribir el siguiente comando:

BSF STATUS,RP0
BCF STATUS,RP1

Y posteriormente se hace la declaración de entradas y de salidas, para esto se ocu-


pará el registro L y el registro W. L será un valor que el usuario desee mandar a otro
espacio, en este caso al registro de trabajo que es W, posteriormente el valor almacena-
do en W, moverlo al registro TRISA y TRISB, estos registros indican que puerto será
manipulado. Con esto, en el programa quedarı́a lo siguiente:

MOVLW b’00001111’
MOVWF TRISA
MOVLW b’00000000’
MOVWF TRISB

Con estas instrucciones, se le indicó al puerto B que las terminales A0, A1, A2 y A3 han
sido declaradas como entradas, y el puerto B es solo salida. Ahora es necesario regre-
sar al banco cero para poder trabajar con el programa, para lo cuál se realiza lo siguiente:

BCF STATUS,RP0
BSF STATUS,RP1

Con esto, ya se puede trabajar con el programa.


Es necesario también explicar de manera breve lo que son los Status, contienen varios
bits de estado de la unidad central, el estado aritmético de la ALU, el estado del reset y
un par de bits de selección de página denominados RP1 y RP0. Ocupa la posición 03h
del banco 0 y la 83h del banco. Algunos de estos bits los podemos cambiar manualmente
a través del programa. Otros no los activamos nosotros, si no que los activa automáti-
camente el PIC cuando se dan ciertos procesos. Estos bits se llaman flags (banderas).
Para hacernos una idea práctica una bandera se levanta (se pone a 1) cuando ha pasado
algo, al igual que ocurre en el fútbol con los linieres. Será necesario de igual manera
entender lo que es el conteo en hexadecimal. El sistema hexadecimal es el sistema de
numeración posicional que tiene como base el 16. Su uso actual está muy vinculado a la
informática y ciencias de la computación donde las operaciones de la CPU suelen usar
el byte u octeto como unidad básica de memoria; y debido a que un byte representa
255 valores posibles, y esto puede representarse como como el cien en base 16, entonces
dos dı́gitos hexadecimales corresponden exactamente a un byte.
En principio, dado que el sistema usual de numeración es de base decimal y, por ello,
sólo se dispone de diez dı́gitos, se adoptó la convención de usar las seis primeras le-
tras del alfabeto latino para suplir los dı́gitos que faltan. El conjunto de sı́mbolos es el
siguiente:
S = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F (1)

Microcontroladores IV de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 3 DESARROLLO

Se debe notar que A=10, B=11, C=12, D=13, E=14, F=15, posterior al final de esa
secuencia, sigue el 10 en base 16, luego 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C,
1D, 1E, 1,F, 20.. y en secuencia que se puede notar de mejor manera en la siguiente
tabla.

Figura 2: Tabla de multiplicar en hexadecimal

3. Desarrollo

Figura 3: Circuito de contador hexadecimal

A continuación se explicará el proceso de elaboración de dicho contador, el cuál


consiste básicamente en una ilusión óptica, debido a que cada display enciende y apaga
25 veces, cada secuencia de encendido y apagado lo realiza en un periodo de 20 mili-
segundos; esta determinación se realizó mediante un cáluclo que involucra a los dos
retardos que se tiene para encender y apagar de 20 mili-segundos, donde ambos sumados
dan un resultado de 40ms, eso significa que el trayecto de encender y apagar cada display
tarda ese tiempo, entonces para que en la ilusión óptica se viera la secuencia como si

Microcontroladores V de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 3 DESARROLLO

fuera un segundero, la operación a realizar fue dividir un segundo entre 40 ms, lo cuál
da un resultado de 25, entonces eso determinó que el proceso de encendido y apagado
entre los dos displays fuera de 25 veces.
Como se dijo anteriormente el contador se hizo de 0 a 255 con base 16, por lo tanto el
contador se deberı́a reiniciar cuando en ambos displays se muestre la F.
A continuación se presenta el código del programa para su mejor entendimiento.

Microcontroladores VI de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 3 DESARROLLO

El presente programa, inicialmente se declaran las variables a utilizar, dado que se


utilizan dos displays, es necesario crear una variable para las decenas y otra para las
unidades, osea una variable por display, mas una variable para realizar la secuencia de
encendido y apagado de cada uno para poder apreciar la ilusión óptica.
Posterior a la declaración de entradas y salidas, se coloca inicialmente en cada variable
el valor de cero.
En el inicio del programa, se empieza con la inicialización de la secuencia, una vez que se
incrementa, mandará un pulso alto a la terminal A0 del puerto A, en dicha terminal se
controla el display donde se representan las decenas. Posteriormente se debe represen-
tar el valor de las decenas en el display, para ello se carga el registro W con el valor que
se tenga en decenas; que inicialmente es cero, después por medio del comando çall”se
manda llamar a la subrrutina Tabla, donde estan almacenados los valores que mostrará
el display, en tabla, primero llega a la instrucción del contador del programa, ası́ que si
inicialmente el valor es cero, después de dicha instrucción, pasa a la siguiente lı́nea de
código donde se muestra el valor que deberá ser mandado al puerto B, en este caso dice
b’11000000’, significa que en los bits que dice cero, mandará un pulso bajo a la terminal
del puerto B correspondiente, y si esta en uno, mandará un pulso positivo.
Ahora ese valor regresa a la siguiete lı́nea de donde se llamó a la subrrutina, y en esta
lı́nea moverá el valor que regresó de la tabla al Puerto B, se llama un retardo para que
se mantenga encendido el display, y por medio de la siguiente instrucción se apagará el
display de decenas y se activará el de las unidades.
Lo que sigue es checar si la secuencia de encendido y apagado de cada display ya se
realizó, por ello, el valor que tenga ”sec”, deberá ser enviado al registro de trabajo, y
para determinar si ya encendió y apagó las 25 veces, al valor de w se le restará 25, y para
que se cumpla lo deseado, el resultado de dicha resta deberá ser cero, si la condición
no se cumple, entonces el valor actual de las unidades será representado en el display
por medio de las siguientes instrucciones que resultan parecidas a la representación de
las decenas, pero si la condición se cumple, entonces incrementará en uno el valor de la
variable üni se reseteará la secuencia de encendido y apagado, mas aparte se mostrará
2

Microcontroladores VII de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 3 DESARROLLO

el valor nuevo de las unidades en el display. Lo siguiente será incrementar el valor de


las decenas, pero esto será posible solo si las unidades ya contaron hasta ”F”, entonces
se debe hacer una cuestión donde indique que efectivamente ya se contó hasta dicho
valor, para ello se hizo lo siguiente.
El valor actual de üni”se moverá al registro de trabajo, y al igual que en instrucciones
anteriores, a dicho valor se le restó un valor que al final pudiera cumplir con la condición
de que el resultado fuera cero, en este caso 16, si la condición no se cumplió, entonces
mandará el código al inicio y no se incrementará nada, pero si la condición se cumple,
entonces el valor de las decenas incrementará una unidad, y las unidades se reiniciarán
en cero. Por último se realizó una instrucción para resetear el contador una vez que
decenas y unidades mostraran ”F”, para ello se utilizó la misma metodologı́a que para
reiniciar las unidades, y una vez que se resetearan ambas variables, el programa volverı́a
a empezar.

A continuación se mostrará una imagen del circuito en fı́sico y posterior a ello un


diagrama de flujo para mayor comprensión del algoritmo del programa.

Figura 4: Diagrama de flujo de Decodificador

Microcontroladores VIII de IX Mecatrónica 51-B


CONTADOR HEXADECIMAL 4 CONCLUSIÓN

Figura 5: Diagrama de flujo de Decodificador

4. Conclusión
Como conclusión del presente reporte, se puede obtener que la elaboración de esta
práctica permite el mayor entendimiento de las instrucciones y comandos del software
MPLAB vistas hasta el momento, además del refuerzo de conocimientos base que con
el paso del tiempo se suelen olvidar.

Microcontroladores IX de IX Mecatrónica 51-B

También podría gustarte