Instrucciones Booleanas. El 8051 contiene un completo procesador Booleano (por bits), el cual permite ejecutar instrucciones de limpieza, establecimiento o complementación de un solo bit, y operaciones de AND y OR entre bits, las principales instrucciones son: ANL <dest.byte>, <orig.byte>: Y lógico. ANL realiza la operación lógica Y entre la variable origen y la variable destino. Los indicadores no se modifican. Cuando el operando destino es el acumulador, el operando origen puede ser un registro, una dirección directa, una dirección indirecta por registro o un dato inmediato. Cuando el operando destino es una dirección directa, el origen debe ser bien un dato inmediato o bien el acumulador. Ejemplo.- Instrucción ANL <destino.byte>,<origen.byte> El acumulador contiene 0C3H (11000011 B) y el registro R0 contiene 0AAH (10101010 B). La instrucción ANL A,R0 colocará el valor 82H (10000010 B) en el acumulador. ANL C, <orig.bit>: Y lógico entre el bit y el indicador de acarreo. Si el valor del bit origen es un 0 lógico, el indicador de acarreo C se pone a 0. Si el valor del bit es 1, el estado del indicador de acarreo no se modifica. El signo "/" delante del operando origen es interpretado por el ensamblador como complemento lógico. En tal caso, la operación realizada es un Y lógico entre el inverso del bit origen y el indicador de acarreo, pero el estado del bit origen no se modifica Ejemplo.- Instrucción ANL C,<origen.bit>. En el ejemplo que sigue, el indicador de acarreo se pone a 1 si y sólo si P1.0 = 1, ACC.7 = 1 y OV = 1. ANL C,P1.0 ANL C,ACC.7 ANL C,OV ;Cargar una E/S en el indicador C ;Y lógico con el bit 7 del acumulador ;Y lógico con el bit de OV. ORL <dest.byte>,<orig.byte>: O lógico. Se realiza un O lógico entre el byte origen y el byte destino. El resultado es colocado en el operando destino. No se modifica ningún indicador. Los dos operandos pueden presentarse en 6 combinaciones de modos de direccionamiento. Cuando el acumulador actúa como operando destino, el operando origen puede ser un registro, una dirección directa, un direccionamiento indirecto por registro o un dato inmediato; cuando el acumulador actúa como operando destino, el operando origen puede ser un registro, una dirección directa, un direccionamiento indirecto por registro o un dato inmediato; cuando el operando destino es una dirección directa, el operando origen puede ser el acumulador o un dato inmediato. Ejemplo.- Instrucción ORL <destino.byte>,<origen.byte> Ing. Celedonio E. Aguilar Meza 47
El acumulador contiene el valor 0C3H (11000011 B) y R0 contiene el valor 55H (01010101 B). Después de la ejecución de la instrucción ORL A,R0 el acumulador recibirá el valor 0D7H (11010111 B). ORL C, <orig.bit>: O lógico de bits. Pone a 1 el indicador de acarreo si el bit origen está a 1. El indicador de acarreo es utilizado como "acumulador" por el procesador lógico. El signo "/" que eventualmente precede al bit operando indica que la operación O debe efectuarse con el inverso del estado de este bit. El bit origen no es modificado por esta operación. Ejemplo Instrucción ORL C,<origen.bit> Poner a 1 el indicador de acarreo C si P1.0 = 1, o si ACC.7 = 1, o si OV = 0. MOV C,P1.0 ;cargar el indicador de acarreo con P1.0 ORL C,ACC.7 ;O lógico con ACC.7 ORL C,/OV ;O lógico con el complemento de OV XRL <dest.byte>,<orig.byte>: O lógico exclusivo. Se realiza un O exclusivo entre el byte origen y el byte destino. El resultado es colocado en el operando destino. No se modifica ningún indicador. Los dos operandos pueden presentarse en 6 combinaciones de modos de direccionamiento. Cuando el acumulador actúa como operando destino, el operando origen puede ser un registro, una dirección directa, un direccionamiento indirecto por registro o un dato inmediato; cuando el operando origen puede ser el acumulador o un dato inmediato. Ejemplo Instrucción XRL <destino.byte>,<origen.byte> El acumulador contiene el valor 0C3H (11000011 B) y R0 contiene el valor 0AAH (10101010 B). Después de la ejecución de la instrucción XRL A,R0 el acumulador recibirá el valor 69H (01101001 B).Cuando el operando destino es una dirección directa, esta instrucción permite invertir bits de la RAM interna o de los registros físicos. Los bits que se invierten son determinados por un byte de máscara que puede ser una constante en el programa o el resultado de un cálculo realizado sobre el acumulador. La instrucción XRL P1,#00110001 B invierte los bits 0, 4 y5 del puerto P1. Ing. Celedonio E. Aguilar Meza 48
ANL C,bit ; C C.AND. bit ANL C,/bit ; C C.AND..NOT. bit ORL C,bit ; C C.OR. bit ORL C,/bit ; C C.OR..NOT. bit CLR A ; A 0 CLR C ; C 0 CLR bit ; bit 0 SETB C ; C 1 SETB bit ; bit 1 CPL A ; A.NOT.A CPL C ; C.NOT. C CPL bit ; bit.not. bit RL A ; A ROT IZQ A RR A ; A ROT DER A RLC A ; A ROT IZQ A, CON C RRC A ; A ROT DER A, CON C CLR A: Puesta a cero del acumulador. Todos los bits del acumulador se ponen a 0. No se modifica ningún indicador. Ejemplo.- Instrucción CLR A El acumulador A vale 5CH (01011100 B). La instrucción da al acumulador el valor 00H (00000000 B). CLR bit: Puesta a cero de un bit. Se borra (se pone a 0) el bit especificado. No se modifica ningún indicador (salvo, en su caso, el acarreo). Esta instrucción puede actuar sobre el indicador de acarreo o sobre un bit direccionable directamente (en RAM interna). Ejemplo.- La instrucción CLR P1.2 Si el buffer del puerto 1 vale 5DH (01011101 B), a instrucción da al Buffer el valor 69H (01011001 B). CPL A: Complemento del acumulador. Se invierten (complemento a 1) todos los bits del acumulador. Los bits a 1 se ponen a 0 y viceversa. No se modifica ningún indicador. Ejemplo.- Instrucción CPL A Si el acumulador A vale 5CH 01011100 B), después de la instrucción el acumulador tendrá el valor A3H (10100011 B). Ing. Celedonio E. Aguilar Meza 49
CPL bit: Complemento de un bit. Se invierte el bit indicado. No se modifica ningún indicador (salvo, en su caso, el de acarreo). Esta instrucción puede actuar sobre el indicador de acarreo o sobre los bits direccionables directamente. Ejemplo.- Instrucción CPL bit El puerto 1 tiene el valor 5DH (01011101 B). La secuencia CPL P1.1 CPL P1.2 da a este puerto el valor 5BH (01011011 B). SETB bit: Puesta a 1 de un bit. Las instrucciones SETB ponen a 1 el bit especificado por el operando. Ejemplo.- Instrucción SETB bit El indicador de acarreo está a 0. El puerto P1 vale 34H (00110100 B). La secuencia SETB C SETB P1.0 pone el indicador de acarreo a 1 y da al puerto P1 el valor 35H (00110101 B). RL A: Rotación a la izquierda. Los 8 bits del acumulador se desplazan una posición a la izquierda. El bit 7 se coloca en la posición menos significativa (bit 0). Esta operación no modifica ningún indicador. Ejemplo.- Instrucción RL A El acumulador contiene el valor 8BH (10001011 B). La instrucción da al acumulador el valor 17H (00010111 B). Ing. Celedonio E. Aguilar Meza 50
RR A: Rotación a la derecha. Los 8 bits del acumulador se desplazan un lugar a la derecha. El bit 0 se coloca en la posición más significativa (bit 7). Esta operación no modifica ningún indicador. Ejemplo.- La Instrucción RR A El acumulador contiene el valor 8BH (10001011 B). La instrucción da al acumulador el valor 0C5H (11000101 B). RLC A: Rotación a la izquierda incluyendo C. Los 8 bits del acumulador se desplazan una posición a la izquierda. El bit 7 se coloca en el indicador de acarreo, y el contenido de éste en la posición menos significativa (bit 0). Esta operación solo modifica el acarreo C y P. Ejemplo.- Instrucción RLC A El acumulador contiene el valor 8BH (10001011 B) y el acarreo C vale 0. La instrucción da al acumulador el valor 16H (00010110 B) y C=1. RRC A: Rotación a la derecha incluyendo C. Los 8 bits del acumulador se desplazan un lugar a la derecha. El bit 0 se coloca en el indicador de acarreo, y el contenido de éste en la posición más significativa (bit 7). Esta operación solo modifica el acarreo C y P. Ejemplo.- La Instrucción RRC A El acumulador contiene el valor 8BH (10001011 B) y el acarreo C vale 0. La instrucción da al acumulador el valor 62H (01100010 B) y C=1. Ing. Celedonio E. Aguilar Meza 51
SWAP A: Permutación de los 4 bits altos del acumulador con los 4 bits bajos. La instrucción "SWAP A" intercambia los 4 bits más significativos del acumulador con los 4 bits menos significativos. Esta instrucción reemplaza con ventaja a 4 instrucciones de rotación. Ejemplo.- La Instrucción SWAP A El acumulador contiene el valor 0C5H (11000101 B). La instrucción da al acumulador el valor 5CH (01011100 B). Ing. Celedonio E. Aguilar Meza 52
INSTRUCCIONES DE LOGICA BOOLEANA NEMONICO DESCRIPCION BYTES PERIODOS OSCILADOR ANL A,Rn AND entre un registro y el acumulador. 1 12 ANL A,data AND entre un registro RAM y el acumulador. 2 12 ANL A, @ Ri AND entre el contenido de un registro direccionado por Ri y el acumulador. 1 12 ANL A,#data AND entre un valor o dato constante y el acumulador. 2 12 ANL data,a AND entre el acumulador y un registro RAM. 2 12 ANL data,#data AND entre un registro RAM y un valor o dato constante. 3 24 ANL C,bit AND entre el BIT de acarreo y un BIT de un registro de RAM 2 24 ANL C,/bit AND entre el BIT complementado del acarreo y un BIT de un registro RAM. 2 24 ORL A,Rn OR entre un registro y el acumulador. 1 12 ORL A,data OR entre un registro RAM y el acumulador. 2 12 ORL A,@Ri OR entre el contenido d un registro direccionado por Ri y el acumulador 1 12 ORL A,#data OR entre un valor o dato constante y el acumulador. 2 12 ORL data,a OR entre el acumulador y un registro RAM. 2 12 ORL data,#data OR entre un registro RAM y un valor o dato constante 3 24 ORL C,bit OR entre el BIT de acarreo y un BIT de un registro RAM. 2 24 ORL C,/bit OR entre el BIT complementado del acarreo y un BIT de un registro RAM 2 24 XRL A,Rn O EXCLUSIVA entre un registro y el acumulador. 1 12 XRL A,data O EXCLUSIVA entre un registro RAM y el acumulador. 2 12 XRL A,@Ri O EXCLUSIVA entre el contenido de un registro direccionado por Ri y el acumuladot 1 12 XRL A,#data O EXCLUSIVA entre un valor o dato constante y el acumulador. 2 12 XRL data,a O EXCLUSIVA entre el acumulador y un registro RAM. 2 12 XRL data,#data O EXCLUSIVA entre un registro RAM y un valor o dato constante. 3 24 SETB C Fuerza el acarreo a 1. 1 12 Ing. Celedonio E. Aguilar Meza 53
SETB bit Fuerza un BIT de un registro RAM a 1. 2 12 CLR A Fuerza el acumulador a OOH. 1 12 CLR C Fuerza el acarreo a O. 1 12 CLR bit Fuerza a un BIT de un registro RAM a 0. 2 12 CPL A Complementa el acumulador. 1 12 CPL C Complementa el acarreo. 1 12 CPL bit Complementa un BIT de un registro RAM. 2 12 RL A Rotación del acumulador un BIT hacia la izquierda. 1 12 RLC A Rotación del acumulador un BIT hacia la izquierda con acarreo. 1 12 RR A Rotación del acumulador un BIT hacia la derecha. 1 12 RRC A Rotación del acumulador un BIT hacia la derecha con acarreo. 1 12 SWAP A Intercambio de nibbles en el acumulador. 1 12 Ing. Celedonio E. Aguilar Meza 54