DIV

Instrucciones  �ndex 

Divisi�n

Con un argumento

Divide el valor del acumulador (Acc) por el del argumento

    DIV arg     ;Es lo mismo que Acumulador = Acumulador / arg

 

El argumento puede ser una variable analógica o una constante.

Con dos argumentos

Divide las variables arg1 y arg2, y el resultado queda en el acumulador aritm�tico AAcc. Ambos argumentos deben ser del mismo tipo (entero, largo o real). La ejecuci�n es condicional. Disponible a partir del CP121 BIOS 2.60 hasta 2.64, CP122 BIOS 2.10 hasta 2.13, CP123 BIOS 2.20 hasta 2.23 y CP124 BIOS 1.06

    DIV arg1, arg2

Ejemplo:

    LD 1            ;Permiso de ejecuci�n

    DIV sng0, sng1  ;AAccR = sng0 / sng1

    DIV AAccR, sng2 ;AAccR = AAccR / sng2

 

    LD 1            ;Permiso de ejecuci�n

    DIV arg0, arg1  ;AAcc = arg0 / arg1

    DIV AAcc, arg2  ;AAcc = AAcc / arg2

 

Es necesario comprobar los resultados de cada operaci�n para tener certeza de que no se superen los l�mites de los tipos de datos, pues esto resultar�a en valores err�neos. Supongamos un caso de tres variables con un valor de 30000:

    LD 1               ;Permiso de ejecuci�n

    MUL arg1, arg2     ;AAcc = 900000000, que es menor que 2147483648 (231)

    MUL AAcc, arg3     ;AAcc deber�a tener 2.7 x 1013, pero tiene cualquier otro a causa del desbordamiento

Con tres argumentos

A partir del CP121 2.70, CP122 2.20, CP123 2.30, CP125 1.10, varias instrucciones de dos argumentos son reemplazadas por tres argumentos. El comportamiento de cada uno resulta en la siguiente forma:

    DIV arg1, arg2, arg3               equivale a                arg1 = arg2 / arg3

El primer argumento (arg1) debe ser de 32bit mientras que el resto (arg2 y arg3) pueden combinarse 16bit, 32bit y constantes. Solo para el tipo real todos deben ser del mismo tipo. Ver tipo de dato.  La ejecuci�n es condicional.

Para CP220, CP127, CP128  

Tiene mas combinaciones posibles. La regla es que el resultado (arg1) es de un tipo igual o mayor al mayor de los argumentos (arg2 y arg3). Ejemplo: si se suma un real con un entero, el resultado ser� en real. Las variantes son:

 arg1    arg2      arg3

int16 = int16  / int16
int16 = cte16  / int16
int16 = int16  / cte16
int32 = int16  / int16
int32 = cte16  / int16
int32 = int16  / int32
int32 = int32  / int32
int32 = int32  / int16
int32 = int16  / cte16
int32 = int16  / cte32
int32 = cte32  / int16
int32 = cte32  / int32
int32 = int32  / cte32

real = real   / real
real = real   / int16
real = int16  / real
real = real   / int32
real = int32  / real
real = real   / cte16
real = cte16  / real
real = real   / cte32
real = cte32  / real
real = real   / cteReal
real = cteReal / real

En Ladder el orden cambia, ya que el arg1 = arg2 + arg3 se representa como:

 arg2

+arg3

 arg1

quedando el arg1 al final en vez de al principio. Esto ocurre con ADD, DIV, FAVG, FIFO, FILL, MOD, MUL, SCALE, STDVT y SUB.