Vous êtes sur la page 1sur 5

Ejemplos con Microcontroladores PIC Subprograma BIN16BCD (versin 2) Este subprograma recoge el contenido de las posiciones BIN_ALTO, BIN_BAJO

y descompone dicho nmero binario de 16 bits en sus 5 dgitos decimales (expresados en BCD) y los almacena en tres posiciones denominadas BCD2, BCD1 y BCD0.

Nmero

15

BIN_ALTO

8 7

BIN_BAJO

BCD2 BCD1 BCD0

0 Unid.mil Decenas

Dec. mil Centenas Unidades

El procedimiento que se va a seguir va a ser mediante sucesivas divisiones enteras por 10.000, 1.000, 100 y 10, obteniendo en cada caso el dgito decimal correspondiente: Nmero = Dec. mil *10.000 + Un. mil *1.000 + Centenas *100 + Decenas *10 + Unidades

Resto_1

Nmero Resto_1

10.000 Dec. mil


Resto_1 = Un. mil *1.000 + Centenas *100 + Decenas *10 + Unidades

Resto_1 Resto_2

1.000 Un. mil

Resto_2

Resto_2 = Centenas *100 + Decenas *10 + Unidades

Resto_2 Resto_3

100 Centenas

Resto_3

Resto_3 = Decenas *10 + Unidades

Resto_3 10 Unidades Decenas


ATE-Universidad de Oviedo

1 de 5

Ejemplos con Microcontroladores PIC El microcontrolador no dispone de la operacin de divisin en su juego de instrucciones, por ese motivo la divisin entera se va a realizar viendo cuntas veces podemos restarle el divisor al dividendo. Se realizarn las restas:

dividendo - divisor resultado - divisor resultado - divisor resultado Hasta que el resultado sea menor que el divisor

El nmero de veces que sea posible hacer la resta representa el cociente y el resultado final es el resto de la divisin entera:

dividendo - n divisor = resto


Resta de dos nmeros de 16 bits en binario Para realizar las divisiones de los resultados parciales por 10.000, 1.000 e incluso por 100 necesitaremos realizar la resta de dos nmeros de tamao 16 bits ya que con 8 bits no alcanzamos el rango total de los posibles valores. La resta se realiza sumando al minuendo el complemento a 2 del sustraendo en 16 bits: MINUENDO - SUSTRAENDO = MINUENDO + 216 - SUSTRAENDO = = 216 + MINUENDO - SUSTRAENDO Si MINUENDO SUSTRAENDO se produce acarreo y si se desprecia se obtiene el resultado positivo de la resta Si MINUENDO < SUSTRAENDO no se produce acarreo, el resultado es negativo y se obtiene el complemento a 2 del mdulo del resultado Luego explorando el acarreo (bit de carry) podemos conocer si el resultado es positivo o negativo y actuar en consecuencia

ATE-Universidad de Oviedo

2 de 5

Ejemplos con Microcontroladores PIC El microcontrolador realiza las operaciones de resta en complemento a 2 con 8 bits:

subwf Reg

->

Reg - W = Reg + 28 - W

Consideramos el minuendo y el sustraendo (ambos de 16 bits) divididos en dos registros de 8 bits:

Minuendo Sustraendo Resto

15

MINU_ALTO

8 7

MINU_BAJO

15

SUSTRA_ALTO SUSTRA_BAJO RESTO_ALTO


8 7

8 7

15

RESTO_BAJO

y la operacin de resta de los dos nmeros de 16 bits se traduce en dos operaciones de resta de dos nmeros de 8 bits: MINUENDO - SUSTRAENDO = = (MINU_ALTO 28 + MINU_BAJO) - (SUSTRA_ALTO 28 + SUSTRA_BAJO) = = (MINU_ALTO 28 + MINU_BAJO) + 216 - (SUSTRA_ALTO 28 + SUSTRA_BAJO) = = 216 + (MINU_ALTO - SUSTRA_ALTO)28 + (MINU_BAJO - SUSTRA_BAJO) 2 Operacin 1 Operacin

Si el resultado de la 1 operacin es positivo, hay acarreo pero si es negativo, no hay acarreo (se debe una) y hay que compensar en la 2 operacin sumando uno a la parte alta del sustraendo, que es lo mismo que quitar una a la parte alta del minuendo

Si el resultado de esta 2 operacin genera acarreo es porque el resultado global es nulo o positivo y si no se genera acarreo, el resultado es negativo y aparece en complemento a 2

ATE-Universidad de Oviedo

3 de 5

Ejemplos con Microcontroladores PIC Algoritmo: Se ponen a cero las posiciones BCD2, BCD1 y BCD0 Se van a obtener en primer lugar las decenas de mil por sucesivas restas de d10000 Se carga BIN_ALTO en MINU_ALTO y BIN_BAJO en MINU_BAJO Se carga d10000 = 0x2710 entre SUSTRA_ALTO y SUSTRA_BAJO Se llama a subprograma RESTA16 que realiza la resta en 16 bits Si el bit de carry ( C ) qued a 1 es que el resultado es >= 0 Incrementamos las decenas de mil y seguimos restando: Pasamos RESTO_ALTO a MINU_ALTO Pasamos RESTO_BAJO a MINU_BAJO Volvemos a la llamada al subprograma de resta Si no, qued a cero el bit de carry es que el resultado es < 0 y Pasamos a las unidades de mil Se carga d1000 = 0x03E8 entre SUSTRA_ALTO y SUSTRA_BAJO Se llama a subprograma RESTA16 que realiza la resta en 16 bits Si el bit de carry ( C ) qued a 1 es que el resultado es >= 0 Incrementamos las unidades de mil y seguimos restando: Pasamos RESTO_ALTO a MINU_ALTO Pasamos RESTO_BAJO a MINU_BAJO Volvemos a la llamada al subprograma de resta Si no, qued a cero el bit de carry es que el resultado es < 0 y Pasamos a las centenas Se carga d100 = 0x0064 entre SUSTRA_ALTO y SUSTRA_BAJO Se llama a subprograma RESTA16 que realiza la resta en 16 bits Si el bit de carry ( C ) qued a 1 es que el resultado es >= 0 Incrementamos las centenas y seguimos restando: Pasamos RESTO_ALTO a MINU_ALTO Pasamos RESTO_BAJO a MINU_BAJO Volvemos a la llamada al subprograma de resta Si no, qued a cero el bit de carry es que el resultado es < 0 y Pasamos a las decenas Se carga d10 = 0x0A en W Se realiza la resta, ahora con 8 bits: MINU_BAJO - W Si el bit de carry ( C ) qued a 1 es que el resultado es >= 0 Incrementamos las decenas y seguimos restando: Pasamos el resultado de W a MINU_BAJO Seguimos restando Si no, qued a cero el bit de carry porque el resultado es < 0 y Lo que queda en el minuendo (MINU_BAJO) son ya las unidades, que se cargan en la posicin correspondiente de BCD0
ATE-Universidad de Oviedo

4 de 5

Ejemplos con Microcontroladores PIC Algoritmo subprograma de resta en 16 bits:

Minuendo Sustraendo Resto


15

MINU_ALTO
8 7

MINU_BAJO
0

SUSTRA_ALTO SUSTRA_BAJO RESTO_ALTO


8 7

15

RESTO_BAJO

Recoge SUSTRA_ALTO y se lo pasa a W De W a una posicin AUXILIAR Realiza la operacin MINU_BAJO - SUSTRA_BAJO El resultado se guarda en RESTO_BAJO Si el carry qued a 0 es porque el resultado es negativo y llevamos una en el byte alto Incrementamos la posicin AUXILIAR donde estaba la parte alta del sustraendo Realizamos la operacin MINU_ALTO - SUSTRA_ALTO El resultado se guarda en RESTO_ALTO Retorno de subprograma

ATE-Universidad de Oviedo

5 de 5