Tecnicas De Programacion
Enviado por Izsabhella • 18 de Septiembre de 2012 • 382 Palabras (2 Páginas) • 436 Visitas
Movimiento de datos
El juego de instrucciones reducido, y su tamaño de 14 bits, hacen que el PIC16F84A tenga una serie de restricciones. Por un lado no se pueden especificar dos registros dentro de una instrucción. Cada registro necesita 7 bits para especificar la dirección, pero también hay que especificar el código de la instrucción y qué hacer con ella. La solución es realizar todo a través del registro de trabajo o w que no necesita dirección y está situado dentro de la CPU del microcontrolador. Una transferencia de un registro a otro necesitaría dos instrucciones. Supongamos que tenemos que transferir un dato al puerto B:
MOVF DATO, W ; copia el contenido del registro DATO en W
MOVWF PORTB ; copia el contenido de W en el Puerto B
Nota: En todos los ejemplos consideramos que w = 0 y que f = 1, esto significa que MOVF DATO, W es lo mismo que MOVF DATO, 0
La primera instrucción tiene la forma MOVF f,d que copia el registro f en el destino especificado por d (w en este caso). La segunda instrucción simplemente mueve cualquier dato contenido en w en el registro f, que en este caso es el puerto B.
El registro DATO permanece invariable en la primera instrucción y w permanece invariable en la segunda, de manera que estas instrucciones se parecen más a una copia que a un movimiento de datos.
Las instrucciones con literales no tienen espacio para contener la dirección de un registro, por eso debemos utilizar el registro de trabajo w para cargar un registro con un literal y también se necesitan dos instrucciones.
MOVLW 0xAA ; coloca el valor 10101010 en W
MOVWF DATO ; copia W en el registro DATO
Esto mismo se aplica cuando se usan operaciones booleanas, de suma y de resta entre literales y registros. Todas necesitan dos instrucciones:
MOVLW k ; copia el literal en W
SUBWF f,d ; copia el resultado de restar W de f en d
Supongamos que queremos poner a cero el nibble inferior
MOVLW 0xF0 ; ponemos una mascara ('11110000')
ANDWF DATO, f ; el resultado de DATO AND 0xF0 se coloca en DATO
Las instrucciones de un solo operando son fáciles de entender:
• CLRF f, Pone todos los bits del registro f a cero
• CLRW, Pone todos los bits de W a cero
• BCF f,b, Pone a cero el bit b del registro f
• BSF f,b, Pone a cero el bit b del registro f
...