Sei sulla pagina 1di 100

ENSAMBLADOR

LENGUAJE MQUINA
Los Microcontroladores solo entienden el lenguaje formado por unos y ceros. Este lenguaje permite expresar cualquier instruccin en sistema binario. Los cdigos de este lenguaje que forman las instrucciones se llaman cdigos de mquina.

Cdigo de mquina= 11111000111010 Instruccin= suma 58 al registro de trabajo W y guarda el resultado en este mismo registro W En ocasiones la codificacin en binario resulta incomoda, por lo que se usa la codificacin en hexadecimal para facilitar la interpretacin de los cdigos de mquina.

LENGUAJE ENSAMBLADOR
El lenguaje de mquina no es adecuado para su uso por el hombre, por lo que se maneja un lenguaje ensamblador. Este consta de una serie de nemnicos que son grupos de caracteres alfanumricos que simbolizan las rdenes o tareas a realizar con cada instruccin. Los nemnicos son establecidos mediante las inciales del nombre de la instruccin en ingls. En el ejemplo anterior la instruccin suma 58 al registro de trabajo W y guarda el resultado en este mismo registro W, se expresa en lenguaje ensamblador como addlw d58 iniciales de Add Literal to W. Y que resulta ms prctico que el lenguaje de mquina 11111000111010.

PROGRAMA ENSAMBLADOR

Es un software que traduce los nemnicos y smbolos alfanumricos del programa escrito mediante el lenguaje ensamblador a cdigo mquina, para ser ejecutado e interpretado por el Microcontrolador. El programa escrito en lenguaje ensamblador recibe el nombre de cdigo fuente, archivo fuente o fichero fuente. Tiene una extensin *.asm. Este archivo al ser traducido a cdigo mquina (lo ejecuta el programa ensamblador), proporciona un fichero con extensin *.hex. Este fichero se graba en la memoria de programa mediante un quemador o grabador de Micros. El ensamblador ms utilizado para los PIC es el MPASM, que trabaja dentro del software MPLAB IDE.

FICHERO EJECUTABLE O HEXADECIMAL *.hex Sirve para grabar memoria de programa del PIC y ejecutarlo

FICHERO LISTABLE. *.lst. Informacin del programa: cdigo fuente, mquina, direcciones de instruccin, errores, etc.

ENSAMBLADO FICHERO FUENTE *.asm

FICHERO DE ERRORES. *.err Contiene errores durante el ensamblado

CDIGO FUENTE

Est compuesto por una sucesin de lneas de programa. Cada lnea de programa suele estar compuesta por 4 campos o columnas separados por uno o ms espacios o tabulaciones. Estos son:

1.

2.

3. 4.

Campo de etiquetas Campo del cdigo de operacin. Campo de operandos y datos Campo de comentarios

CODIGOS************************************************************************************************************************************************ ********* ORG 0 ;El programa comienza en la direccin 0 de la ;memoria de programa.

Inicio

bsf
clrf movlw movwf bcf movlw MOVWF

STATUS,RP0
TRISB b'00011111' TRISA STATUS,RP0 0 CONTADOR

;Acceso al Banco 1
;Las lneas del Puerto B se configuran como salidas.

;Las 5 lneas del Puerto A se configuran como entradas. ;Acceso al Banco 0.

Principal MOVF CALL MOVWF CALL INCF MOVF XORLW BTFSS GOTO clrf GOTO RETARDO_X DECFSZ GOTO DECFSZ GOTO RETURN END ;Fin del programa. LOOPS,1 RETARDO_X LOOPS2,1 RETARDO_X CONTADOR,W T_SEC PORTB RETARDO_X CONTADOR,1 CONTADOR,0 03 STATUS,Z Principal CONTADOR Principal

ETIQUETAS

1.

2.

La primer columna es el campo de etiquetas. Estas son expresiones alfanumricas escogidas por el usuario. Su funcin es identificar una determinada instruccin del programa. Asignando a esa etiqueta el valor de la direccin de memoria correspondiente a dicha instruccin. Esto facilita la ubicacin de una direccin mediante la etiqueta, como es el caso de la instruccin goto a principal. Las normas que tiene que cumplir son las siguientes: Debe empezar por letras y luego admite letras, nmeros y el carcter subrayado o guin bajo. Ejemplo: Bucle_1 No se pueden insertar espacios o tabulaciones antes de la etiqueta, sino es considerada como instruccin.

3.

No se pueden utilizar expresiones reservadas para la utilizacin del ensamblador.


Instrucciones: goto, sleep, etc Nombres de registros SFR: STATUS, PCL,etc. Nombres de bits de SFR: C,Z,DC,RP0,ETC Directivas del ensamblador: END, ORG, LIST, etc.

CDIGO DE OPERACIN
La

segunda columna se llama cdigo de operacin, que especifica la tarea a realizar por el Microcontrolador. Suele ser una instruccin del Microcontrolador que se traduce a cdigo mquina por el ensamblador. Ejemplo: sleep

El lenguaje de mquina 00000001100011.

OPERANDOS
La tercera columna es el campo de operandos o datos. Contiene los operandos para el campo de instrucciones. Ejemplo movwf PORTB, donde PORTB es el operando. Este campo puede tener uno o ms operandos separados por comas. Dependiendo de la instruccin puede ser nmeros o etiquetas que representan constantes o direcciones. Es importante respetar la ortografa de los SFR que se establece en el fichero P16F84.INC, proporcionado por Microchip. Este fichero establece porp ejemplo que al Puerto B hay que llamarle PORTB, al registro de estados STATUS.

COMENTARIOS
La ltima columna es el campo de comentarios de los programas. Son elementos que permiten al usuario (programador) documentar su programa, aclara la interpretacin de instrucciones, facilita la correccin y modificacin que lo mejore. Los comentarios se extienden por varias lneas y siempre deben comenzar con punto y coma (;). No necesita tener espacios o tabulaciones que lo separen del campo anterior, e incluso puede empezar en la primera lnea. El ensamblador ignora todo el texto que contiene la lnea despus del punto y coma, lo interpreta como comentario y no produce cdigo de mquina.

NORMAS DE ESTILO PARA EL ARCHIVO FUENTE

Los ensambladores permiten que cada lnea pueda ser escrita en forma libre, puede haber cualquier nmero de espacios entre dos campos de una lnea y se pueden ocupar maysculas o minsculas a criterio propio. Pero es importante respetar las siguientes normas: Respete la designacin de registros. Se deben respetar las columnas. Para mejor legibilidad del programa, utilice tabuladores para las columnas de cada campo. Numere las filas, esto permite dar seguimiento y deteccin de errores. El editor lo numera en forma automtica. Los espacios en blanco no son significativos en ningn campo, como tampoco las lneas en blanco ni los tabuladores, solo dan forma al texto Los nemnicos de las instrucciones se escriben en minusculas: Ejemplo movlw d15 El nombre de la etiqueta debe aclarar en lo posible el funcionamiento del programa. Ejemplo: MotorRota Derecha

1. 2.

3.

4.

5.

6.

CONSTANTES NMERICAS Y ALFANUMRICAS


El

ensamblador MPASM soporta los sistemas de numeracin decimal, hexadecimal, octal, binario, y el cdigo alfanumrico ASCII. En la siguiente tabla se muestra como se representa cada uno. La constantes hexadecimales (A-F) deben ir precedidas de un cero para no confundirlas con una etiqueta. Ejemplo movlw 0FAh

TIPO DECIMAL

SINTAXIS D<cantidad> d<cantidad> .<cantidad>

EJEMPLO movlw D109 movlw d109 movlw .109

HEXADECIMAL

H<cantidad> h<cantidad> 0x<cantidad> <cantidad>H <cantidad>h


O<cantidad> o<cantidad> B<cantidad> b<cantidad> A<carcter> a<carcter> <carcter> <string>

movlw H6D movlw h6D movlw 0x6D movlw 6DH movlw 6Dh
movlw O155 movlw o155 movlw B01101101 movlw b01101101 movlw AM movlw aM movlw M DT Estudia DPE

OCTAL BINARIO ASCII

STRING O CADENA DE CARACTERES

EL REPERTORIO DE INSTRUCCIONES

1. 2.

3.
4. 5. 6. 7.

El repertorio del PIC16F877A est compuesto por 35 instrucciones que pueden ser agrupadas para su estudio en los siguientes grupos. Instrucciones de carga Instrucciones de bit Instrucciones aritmticas Instrucciones lgicas Instrucciones de salto Instrucciones para manejo de subrutinas Instrucciones especiales

1.

2.

3.

4.

Las principales caractersticas del repertorio de instrucciones del PIC16F877A son: Es un juego reducido de 35 instrucciones simples y rpidas La mayora de las instrucciones se ejecutan en 4 ciclos de reloj (ciclo de instruccin), menos las de salto que requieren 8 ciclos ( 2 ciclos de instruccin). Las instrucciones son ortogonales. Casi todas las instrucciones pueden usar cualquier operando. Todas las instrucciones tienen la misma longitud, 14 bits y todos los datos son de 8 bits.

INSTRUCCIONES DE CARGA
Las instrucciones de transferencia de datos tienen como finalidad transferir el contenido de un registro fuente (f) a un registro destino (d) o bien cargar el destino con una constante. En el PIC todos los datos residen en posiciones de la memoria de datos y el registro W. Para explicar las instrucciones comnmente se usa una nomenclatura basada en parntesis y flechas. (W) (PORTB): Significa el contenido del registro W se transfiere al puerto B (2Bh) (W): Significa el contenido de la posicin 2Bh de RAM de datos se transfiere al registro de trabajo W 2Bh (W): Significa el registro de trabajo se carga con el dato 2Bh (no tiene parentesis).

INSTRUCCIONES DE CARGA

El contenido del registro W se borra ( se carga con b00000000 ) y la bandera Z se activa a 1. Est instruccin se considera tambin como aritmtica.

El contenido del registro f se borra (se carga con b00000000 y la bandera Z se activa a uno. Tambin es considerada aritmtica.

El registro W se carga con el valor de los 8 bits de la constante k. Ninguna bandera se afecta. movlw k

El contenido del registro f se carga en el registro destino dependiendo del valor de d. Si d=0 el destino es el registro W, si d=1 el destino es el propio registro f. La bandera Z se activa si el resultado de la operacin es cero. movf f,d

Carga el contenido del registro W al registro f, Ninguna bandera es afectada. movwf f

INSTRUCCIONES BIT

Est instrucciones ponen a nivel lgico 0 1un determinado bit de un registro de la memoria de datos. Pone a cero el bit b del registro f. bcf f,b

Pone a uno el bit b del registro f. bsf f,b

INSTRUCCIN GOTO K

Es una instruccin de salto incondicional (Unconditional Batch) que produce un salto a la direccin del programa indicada por k. La constante k es la direccin de destino del salto, es decir, la direccin de memoria a partir de la cual se comenzara a leer el programa. Est instruccin carga la constante k en el contador de programa PC.

DIRECTIVAS

Para ensamblar un programa, se requiere cierta informacin en forma de directivas, que son comandos insertados en el programa que controla el proceso de ensamblado. No son instrucciones del PIC y por tanto no tienen cdigo de mquina. Algunas son obligatorias en los programas y otras opcionales, se escriben en la segunda columna y en maysculas, aunque no es obligatorio.

DIRECTIVA END

Indica el fin del programa (End Program Block). Es la nica directiva obligatoria e indica al programa ensamblador donde debe detener el proceso, se posiciona en la ltima lnea del fichero fuente. Todas las lneas posteriores a esta directiva no son tomadas en cuenta.

CODIGOS************************************************************************************************************************************************ ********* ORG 0 ;El programa comienza en la direccin 0 de la ;memoria de programa.

Inicio

bsf
clrf movlw movwf bcf movlw MOVWF

STATUS,RP0
TRISB b'00011111' TRISA STATUS,RP0 0 CONTADOR

;Acceso al Banco 1
;Las lneas del Puerto B se configuran como salidas.

;Las 5 lneas del Puerto A se configuran como entradas. ;Acceso al Banco 0.

Principal MOVF CALL MOVWF CALL INCF MOVF XORLW BTFSS GOTO clrf GOTO RETARDO_X DECFSZ GOTO DECFSZ GOTO RETURN END ;Fin del programa. LOOPS,1 RETARDO_X LOOPS2,1 RETARDO_X CONTADOR,W T_SEC PORTB RETARDO_X CONTADOR,1 CONTADOR,0 03 STATUS,Z Principal CONTADOR Principal

DIRECTIVA EQU
<label> EQU <expr> Es una directiva de asignacin. El valor de <expr> es asignado a la etiqueta <label>. Usualmente las asignaciones con esta directiva van al principio del programa (antes de las instrucciones)
VALOR_CARGA EQU d147 Asigna el valor de 147 a la etiqueta VALOR_CARGA

DIRECTIVA ORG
[<label>] ORG <expr> Esta directiva indica al programa ensamblador la direccin de memoria de programa a partir de la cual deben ensamblarse las instrucciones del cdigo fuente. ORG 0x4
La etiqueta [<label>] es voluntaria, por eso los corchetes.

DIRECTIVA _ _ CONFIG
_ _CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

Est directiva fue analizada a detalle en la instruccin de registro e indica: No hay proteccin de cdigo (_CP_OFF) No se habilita el Wathdog (_WDT_OFF) Se habilita el reset mediante Power-Up Timer (_PWRTE_ON) Se utiliza el oscilador por cristal de cuarzo (_XT_OSC) Es importante resaltar que _ _CONFIG se inicia con dos subrayados (guin bajo), no con uno.

LIST P=16F877A Indica el tipo de procesador utilizado. INCLUDE <P16F877A.INC>

Seala el fichero donde se localizan las etiquetas que nombran a los diferentes registros y el valor que le corresponde a cada uno. Este fichero muestra la forma de nombrar los registros, se localiza en el directorio principal del programa ensamblador. Su contenido se observa en la pag 73-76, de la bibliografa.

INSTRUCCIONES DE SUMA
La suma se realiza mediante aritmtica binaria pura sin signo y afecta el estado de las banderas del registro STATUS de la siguiente forma: L a bandera Z (Zero). El bit Z se pone a 1 si el resultado de la operacin es cero (b00000000) y se pone Z a 0 si el resultado tiene cualquier otro valor. La bandera C (Carry). Si hay un acarreo en el bit 7, es decir, si el resultado es mayor b11111111 (255 en decimal) el bit C se activa a 1, en caso contrario resulta C=0. La bandera DC (Digit Carry). Si hay un acarreo del bit 3 al 4, es decir que la suma de las dos mitades (nibbles) menos significativa (bits 0 a 3) resulta mayor que 15 (b1111), el bit DC se pone a 1, en caso contrario se pone a 0.

1 6 3 (decimal) 10100011 (binario) + 79 (decimal) + 01001111 (binario) 242 (decimal) 11110010 (binario) A 3 (Hex) + 4 F (Hex) F 2 (Hex)

Las banderas se afectan de la siguiente forma:


C=0 DC = 1 Z=0

2 0 9 (decimal) 11010001 (binario) + 5 6 (decimal) + 00111000 (binario) 265 (decimal) 00001001 (binario) D 1 (Hex) + 3 8 (Hex) 0 9 (Hex) Las banderas se afectan de la siguiente forma: C=1 DC = 0 Z=0 En este ejemplo se supero el valor mximo de 255 (decimal) y el bit C se activa a 1.El resultado obtenido b00001001 (9 en decimal) no corresponde al valor correcto que es 265. Si se aade el bit C se obtiene b100001001 que es 265. Se puede afirmar que la bandera C es el noveno bit del registro de trabajo y por lo tanto del resultado.

INSTRUCCIONES DE SUMA

addlw k. Suma el contenido del registro W con la literal o constante k. Almacena el resultado en W. Si se produce acarreo C se pone a 1.

addwf f,d. Suma el contenido del registro W al contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. Si se produce acarreo la bandera C sepone a 1.

INSTRUCCIONES DE RESTA
La resta se realiza sumando, en binario puro sin signo, el registro f (o el literal k) ms el complemento a dos del contenido del registro W. Al realizar la resta en 8 bits con signo el resultado, no puede exceder de +127 ni de (-128). La bandera C indica si el resultado es positivo (C se pone a 1) o es negativo ( C se pone a 0). Pueden ocurrir tres casos: Si el resultado es positivo distinto de cero, C=1 y Z=0 Si el resultado es cero, C=1 y Z=1 Si el resultado es negativo, C=0 y Z=0.

sublw k. Resta en (complemento a 2) el contenido de la constante k menos el contenido del registro W y almacena el resultado en W.

subwf f,d. Resta (en complemento a 2) el contenido del registro f menos el contenido del registro W. Almacena el resultado en W si d es cero y en f si d es uno.

INSTRUCCIONES ARITMETICAS
decf f,d. El contenido del registro f se decrementa en una unidad. Almacena el resultado en W si de d=0 (en cuyo caso f no varia) y en el registro f si d=1. La bandera Z=1 si el resultado de la operacin es cero.

incf f,d. El contenido del registro f se incrementa en una unidad. Almacena el resultado en W si d=0 (f no varia) y en el registro f si d=1. La bandera Z se activa a 1 si el resultado de la operacin es cero, es decir, si hay desbordamiento al pasar de b11111111 a b00000000

INSTRUCCIONES LGICAS
andlw k. Efecta la operacin AND lgica entre el contenido del registro W y la constante k. Almacena el resultado en W. La bandera Z se activa a 1 si el resultado de la operacin es cero.

andwf f,d. Efecta la operacin AND lgica entre el contenido del registro W y el contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. La bandera Z se activa a 1 si el resultado de la operacin es cero.

comf f,d. Realiza un complemento del registro f bit a bit, invirtiendo su valor, es decir, cambia los unos por los ceros y viceversa. Almacena el resultado en W si d=0 y en el registro f si d=1. La bandera Z se activa a 1 si el resultado de la operacin es cero.

iorlw k. Efecta la operacin OR lgica entre el contenido del registro W y la constante k. Almacena el resultado en W. La bandera Z se activa a 1 si el resultado de la operacin es cero.

iorwf f,d. Efecta la operacin OR lgica entre el contenido del registro W y el contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. La bandera Z se activa a 1 si el resultado de la operacin es cero.

rlf f,d. Rotacin de un bit a la izquierda del registro f pasando por el bit de acarreo C. El desplazamiento es cerrado, formando un anillo con el bit C (Carry) del registro STATUS. Si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en W. El contenido del Carry pasa a la posicin del bit de menor peso y el bit de mayor peso pasa al Carry.

rrf f,d. Rotacin de un bit a la derecha del registro f pasando por el bit de acarreo C. El desplazamiento es cerrado, formando un anillo con el bit C (Carry) del registro STATUS. Si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en W. El contenido del Carry pasa a la posicin del bit de mayor peso y el bit de menor peso pasa al Carry.

swapf f,d. Los cuatro bits de mas peso del registro f se intercambian con los 4 bits de menos peso del mismo registro f. Almacena el resultado en W si d es cero y en f si d es uno.

xorlw k. Realiza la funcin OR-EXCLUSIVA entre el contenido del registro W y la literal o constante k de 8 bits. Almacena el resultado en W. La bandera Z se activa a 1 si el resultado de operacin es cero.

xorwf f,d. Efecta la operacin OR-EXCLUSIVA entre el contenido del registro W y el contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. La bandera Z se activa a 1 si el resultado de la operacin es cero.

INSTRUCCIONES ESPECIALES
INCREMENTAR UN REGISTRO EN UNA UNIDAD
incf Contador,F

INCREMENTAR UN REGISTRO EN UN VALOR n. movlw addwf d7 Operando,F

DECREMENTAR UN REGISTRO EN UNA UNIDAD decf Contador,F

DECREMENTAR UN REGISTRO EN UN VALOR n movlw subwf 15 Operando,F

INCREMENTAR W. El registro de trabajo W no ocupa una posicin en la memoria RAM de datos, por tanto no se opera con la instruccin incf, por lo que hay que hacer lo siguiente.

addlw

0x01
sublw 0x01

DECREMENTAR W.

COMPLEMENTAR W INVIRTIENDO SUS BITS. Se aprovecha la operacin lgica XOR que complementa un bit al realizar operacin con uno. xorlw b11111111

PONER A CERO VARIOS BITS DEL REGISTRO W SIN ALTERAR EL RESTO. Se usa la operacin lgica AND, colocando un 0 en los bits a cambiar en los dems se pone 1. andlw b10101010 (Mascara)

PONER A UNO VARIOS BITS DEL REGISTRO W SIN ALTERAR EL RESTO. Se usa la operacin lgica OR, colocando un 1 en los bits a cambiar en los dems se pone 0. iorlw b10101010 (Mascara)

INVERTIR VARIOS BITS DE W SIN ALTERAR EL RESTO. Se usa la operacin lgica XOR, poniendo un 1 en los bits a cambiar , en los restantes se pone un 0. Si se desea invertir los 3 bits mas significativos se procede de la siguiente forma: xorlw b11100000

SALTOS CONDICIONALES
SALTOS EN FUNCIN DE UN BIT Instruccin btfsc f,b. Si el bit b del registro f es 1 la instruccin que sigue a est se ejecuta normalmente. Si el valor del bit b es 0 la instruccin que sigue a sta se ignora y salta.

Instruccin btfss f,b. Si el bit b del registro f es 0 la instruccin que sigue a est se ejecuta normalmente. Si el valor del bit b es 1 la instruccin que sigue a sta se ignora y salta.

SALTOS EN FUNCIN DE UN REGISTRO.


Instruccin decfsz f,d. Esta instruccin decrementa en una unidad el contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. Si el resultado es distinto de cero la instruccin que sigue se ejecuta normalmente. Si el resultado es cero la instruccin que sigue a esta se ignora i se salta.

Instruccin incfsz f,d. Esta instruccin incrementa en una unidad el contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. Si el resultado es distinto de cero la instruccin que sigue se ejecuta normalmente. Si el resultado es cero la instruccin que sigue a esta se ignora y se salta.

COMPARACIN ENTRE REGISTROS


COMPROBAR QUE UN REGISTRO VALE 0 Para saber si un registro vale 0, se carga el registro sobre si mismo mediante la instruccin movf, lo que permite posicionar a la bandera Z. Es decir; recordemos que la bandera Z pasa a 1 (en el programa lo visualizamos cuando pasa a mayscula) si el resultado de la operacin es cero.

movf btfss goto


EsCero .. .. Noescero ..

Registro,F STATUS,Z Noescero

COMPROBAR IGUALDAD ENTRE REGISTROS Aprovechamos la instruccin subwf o tambin la operacin lgica xorwf. Observe el ejemplo.

movf Registro1,W subwf Registro2,W btfsc STATUS,Z goto Iguales NoIguales . . Iguales

xorwf Registro2,W

COMPROBAR QUE UN REGISTRO ES MAYOR O MENOR QUE OTRO. Para este caso se restan los registros. Ejemplo siendo A y B los registros se dan las siguientes opciones:
Operacin(A-B) A>B
A<B A=B

Resultado POSITIVO
NEGATIVO

Banderas C=1 y Z=0


C=0 y Z=0 C=1 y Z=1

movf RegistroB,W CERO subwf RegistroA,W btfss STATUS,C goto Menor

MAYORIGUAL

.. ..
MENOR ..

LAZOS O BUCLES

Es una aplicacin de los saltos condicionales. Son fragmentos que se repiten un nmero finito o infinito de veces.
CARGA EL CONTADOR INSTRUCCIO NES INSTRUCCIONE S INSTRUCCIONES

LAZO REPTCIN INFINITA

CONDIC IN?
SI/NO LAZO CON CONDICIN DE TESTEO

NO/SI

DECREMENTA EL CONTADOR

CONTAD OR=0?
SI

NO

LAZO DE REPETICIN INFINITA

Es un salto incondicional a una posicin anterior del programa conformado de repeticin infinita, sin posibilidad de tomar otro camino. Utiliza la instruccin goto.
Principal .. goto Principal

LAZO CON CONDICIN DE TESTEO

Se utiliza una instruccin de testeo para controlar la ejecucin del bucle. Para este caso la repeticin de lazo es finita, pero no se puede precisar el nmero de veces que se repite. . NoEsIgual . movf PORTA,W sublw 0x56 btfss STATUS,Z goto NoEsIgual EsIgual ....

LAZO QUE SE REPITE UN NMERO CONOCIDO DE VECES


Las instrucciones decfsz e incfsz se utilizan generalmente en combinacin con una instruccin de salto goto para el diseo de lazos de instrucciones que deben repetirse una cantidad determinada de veces. Se hace decrementando un registro hasta que toma un determinado valor. En este caso, s se conoce el nmero de veces que se repite el bucle. . movlw NUM_VECES movwf Contador Lazo . . decfsz Contador,F goto Lazo . .

SALTO INDEXADO

El salto indexado es una tcnica que resuelve problemas que pueden ser expresados mediante una tabla de verdad. En el PIC16F84 se basa en la utilizacin de la instruccin addwf PCL,F, de este modo, la direccin de salto se consigue sumando al contador de programa (PCL) un valor de desplazamiento almacenado en el registro de trabajo W. En el salto indexado, la direccin de salto se consigue sumando a un registro base (PCL) un valor de desplazamiento almacenado en un registro ndice que es el registro de trabajo W. A este valor de desplazamiento se le domina tambin offset. Al ejecutar la instruccin addwf PCL,F el registro base (PCL) debe estar cargado con la primera direccin de la tabla, apuntando de esta manera al origen de sta.

Disee un programa que despliegue la palabra H O L A en el display del entrenador, cada letra ser desplegada mediante una de las cuatro combinaciones de una tabla de verdad. Estas combinaciones sern asignadas en el entrenador mediante el dipswitch que esta en el PORTA. Por ejemplo la combinacin 0 0 corresponde a la letra H y ser disparada cuando los dos switchs (RA0,RA1) del PORTA estn en 0 0, la combinacin 0 1 de la tabla de verdad corresponde a la la letra O y ser disparada cuando los dos switchs (RA0,RA1) del PORTA estn en 0 1 y as sucesivamente. Observe el ejemplo.

SUBRUTINAS

En ocasiones es necesario repetir una serie de instrucciones en diversas partes del programa, por lo que hay que estar incluyendo dichas instrucciones constantemente, lo que provoca una mayor utilizacin de la memoria ROM de programa del microcontrolador.

PROCESOX

PROCESOX

PROCESOX PROG.PRINCP. (Sin Subrutinas)

La solucin mas efectiva que permite ahorrar memoria se obtiene si este grupo de instrucciones que se repite aparece una sola vez en el programa, pero con la capacidad para ser ejecutado en diferentes puntos donde se requiera. A esto se le llama SUBRUTINA. Para poder manejar las subrutinas es necesario primero un mecanismo o instruccin que me permita llegar a ella conocido como llamada a la subrutina, esta instruccin es call. Una vez ejecutada la subrutina debemos tener otra instruccin que me permita regresar a donde se quedo el programa antes de la llamada a la subrutina. Esta instruccin es return que permite regresar a una instruccin despus de la instruccin call (llamada a subrutina). ProcesoX
Call ProcesoX

return

Call Procesox

Call ProcesoX PROOG.PRINCIP. (Con Subrutinas)

SUBRUTINAS ANIDADAS
Cuando una subrutina llama a otra subrutina se produce un anidamiento de subrutinas. Cada call sucesivo sin que intervenga un return crea un nivel de anidamiento adicional.
PROGRAMA SUBRUTINA 1 SUBRUTINA 2 SUBRUTINA

Proceso1

Proceso2

Proceso3

Call Proceso1 X1

call Proceso2 X2

call Proceso3

return

return

return

X1

X2 X1

X3 X2 X1

SUBRUTINAS DE RETARDO

CICLO DE MQUINA

El tiempo que tarda en ejecutarse un programa depende de la frecuencia del oscilador conectado al microcontrolador y del nmero de ciclos mquina ejecutados. Un ciclo de mquina es la unidad bsica de tiempo que utiliza el microcontrolador. Para el PIC16F84 el ciclo de mquina equivale a 4 ciclos de reloj, por lo tanto el tiempo que tarda en producirse un ciclo de mquina es 4 veces el perodo del oscilador.

CICLO RELOJ

CICLO DE MQUINA 1 CICLO DE MQUINA = 4 CICLOS DE RELOJ

Las instrucciones en el Microcontrolador PIC16F84 necesita un ciclo mquina para ejecutarse, excepto las de salto (goto, call, return, etc) que necesitan de dos ciclos mquina. El tiempo que tarda el microcontrolador en ejecutar una tarea viene dado por la siguiente expresin: TIEMPO = 4 1 cm

f
Ejemplo: Calcular la duracin de 1 ciclo de mquina para un PIC16F84 que utiliza un cristal de 4MHz.

TIEMPO= (4) 1

(1) = 1 s

4MHz Ejemplo: En un PIC16F84 y cristal de 4 MHz se desea generar un retardo de 1.5ms. Calcular el nmero de ciclos mquina. TIEMPO = 4 1 cm > cm = TIEMPO f f 4 = 1500 s 4MHz = 1500 4

INSTRUCCIN NOP

La instruccin nop (No Operation) no realiza operacin alguna. En realidad, consume un ciclo de mquina sin hacer nada. Se utiliza para hacer gastar tiempo al microcontrolador sin alterar el estado de los registros ni de los flags.

RETARDO MEDIANTE LAZO SIMPLE

En muchas aplicaciones y proyectos con PICs, resulta necesario generar tiempo de espera, denominado tiempo de retardo. Estos intervalos pueden conseguirse mediante una subrutina de retardo, basada en un lazo simple de algunas instrucciones que se repiten tantas veces como sea necesario, hasta conseguir el retardo pretendido. Como el tiempo de ejecucin es conocido, lo nico que hay que hacer es calcular el valor inicial que debe tener el registro R_ContA, que acta como contador del nmero de iteraciones en el lazo, para obtener el tiempo de retardo deseado. Es fcil deducir que el valor de la constante K cargado inicialmente en el contador R_ContA vendr dado por la siguiente ecuacin, donde el tiempo viene expresado en s:

TIEMPO=5+4K

K = TIEMPO 5 4

Calcular el valor de la constante K, para obtener una subrutina de retardo de 500 s. K = TIEMPO - 5 = 500 - 5 = 123.7 4 4

As pues se elige K=123, obtenindose un tiempo de retardo real de: TIEMPO = 5 + 4K = 5 + 4(123) = 497 s

El ajuste fino para los 500 s exactos se conseguira aadiendo 3 instrucciones nop al principio de la subrutina de retardo.

EJERCICIOS: 1.- El led conectado a la lnea 0 del puerto de salida se enciende durante 200 ms y se apaga durante el mismo tiempo; realice el programa correspondiente y calcule el valor de K para obtener el tiempo de la subrutina. 2.- Despliegue en el display de 7 segmentos los nmeros del 0-9 y las letras en mayuscula de la AF. Utilice una tabla para manejar el display, una subrutina para que al desplegar los caracteres aparezcan solo por 1 segundo cada uno y se repita constantemente.

PROYECTOS A REALIZAR MEDIDOR DE NIVEL DE LIQUIDOS Disear un prototipo para controlar el nivel del depsito de lquido de la figura 9-9 de la pag. 140 de la biliografa utilizada. El programa de control debe ser implementado mediante el microcontrolador PIC16F628A. Los sensores que se deben utilizar para controlar el nivel de liquido deben ser tipo bumper, verifique su funcionamiento en la pag. 535 de la bibliografa utilizada. Utilice bombas de corriente alterna como la de las peceras que sern activadas mediante circuitos de potencia con triacs y controladas por los pulsos que salen del microntrolador en el PORTB.

BARRA DE LEDS ULTRABRILLANTES


Controlar mediante el PIC16F628 una barra luces secuenciales. La secuencia es determinada por el equipo de trabajo, el nmero de secuencias o formas en las que deben prender los leds tambin sern determinadas por el equipo. Cada una de las salidas de las secuencias de luces va a ser controlada por el PORTB. Se deben controlar el tiempo o velocidad de secuencias de las luces mediante 2 switchs conectados en el PORTA, uno de ellos incrementara la velocidad o tiempo de la secuencia y otro la disminuye.

MENSAJES EN LCD

Desplegar el siguiente mensaje en un LCD controlado por el microntrolador PIC16F628A.


MICROCONTROLADOR PIC16F628 La configuracin para controlar el LCD debe ser mediante 8 bits. El mensaje debe ser ingresado letra a letra de izquierda a derecha y mantenerse finalmente en la pantalla.

MICROROBOT RASTREADOR

Realizar un sistema de control para construir un microrobot reactivo, gobernado por el microcontrolador PIC16F628, que sea capaz de seguir una lnea negra sobre un fondo blanco. A este tipo de microrobot se les denomina rastreadores. Se utilizan dos sensores CNY70 cuya funcionalidad la puede verificar en captulo 32 de la bibliografa utilizada en el seminario. Un circuito integrado L293B que sirve como drivers para controlar los motores. Dos motores de 5 VCD.

CHAPA ELECTRNICA MEDIANTE EL PIC16F628


DESARROLLE UNA CHAPA ELECTRNICA MEDIANTE UN TECLADO MATRICIAL DE 4X4. LA ASIGNACIN DE UNA CLAVE DE 4 DIGITOS ACTIVARA EL CERROJO O ELECTROIMN DE UNA CHAPA.

MATRIX DE LEDS MEDIANTE EL PIC16F628

DESPLIEGUE LOS DIEZ DIGITOS DECIMALES Y ALGUNAS LETRAS DEL ALFABETO MEDIANTE UNA MATRIZ DE LEDS DE 7X5.

CONTADOR SINCRNO BASE 100 MEDIANTE EL PIC16F628


DESARROLLE UN CONTADOR SINCRNO BASE 100 MEDIANTE EL PIC16F628, UTILIZANDO DISPLAYS JUMBO PARA OBSERVAR EL CONTEO. REALICELO EN FORMA ASCENDENTE Y DESCENDETE.

RELOJ DIGITAL MEDIANTE EL PIC16F628


DESARROLLE UN RELOG DIGITAL EN FORMA CRICULAR. DEBE MOSTRAR LAS HORAS Y MINUTOS. POR EJEMPLO 07:00, LOS DOS PUNTOS SE DEBEN MOSTAR MEDIANTE 2 LEDS QUE SE ILUMINAN POR SEGUNDO. MOSTAR EL SEGUNDERO MEDIANTE 60 LEDS QUE VAN PRENDIENDO UNO A UNO, COLOCADOS EN FORMA CIRCULAR UNO POR CADA GRADO DE LA CIRCUNFERENCIA.

DESPLIEGUE DE MENSAJE EN DISPLAY 7 SEGMENTOS


DESPLIEGUE EN UN CONJUNTO DE DISPLAYS LAS SIGLAS I.P.N. DEBEN MOSTARSE EN FORMA SECUENCIAL UNA A UNA CON EL PUNTO DECIMAL. AL FINAL DEBEN QUEDARSE FIJA LAS TRES LETRAS, UTILICE DISPLAY JUMBO PARA OBSERVAR EL MENSAJE.

VISUALIZADOR LCD

Las pantallas de cristal liquido o display LCD (Liquid Crystal Display) tienen la capacidad de mostrar cualquier carcter alfanmerico, para ser representar la informacin que produce cualquier equipo electrnico. La pantalla consta de una matriz de caracteres (5x7 puntos) distribuido en una, dos o cuatro lneas de 16, 20 y hasta 40 caracteres por lnea. El proceso de visualizacin es gobernado por un microcontrolador en configuracin de 4 bits o 8 bits.

CARACTERISTICAS GENERALES

El LCD utilizado ser el LM016L, que es un modulo LCD de dos lneas de 16 caracteres cada una. Es ideal para desplegar pequea informacin. Consumo muy reducido del orden de 7.5 Mw. Pantalla de caracteres ASCII, dems de los caracteres japoneses Kanji, caracteres griegos y smbolos matemticos. Desplazamiento de los caracteres hacia la izquierda o a la derecha. Memoria de 40 caracteres por lnea de patilla, visualizndose 16 caracteres por lnea. Movimiento del cursor y cambio de su aspecto. Conexin con bus de 4 bits o 8 bits.

ARQUITECTURA INTERNA

14

LM016L

VDD 2
6 4 5 E RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 14 13 12 11 10 9 8 7 VSS 1 VLC 3

La alimentacin es de +5VCD. La regulacin de contraste se realiza mediante el voltaje obtenido al dividir los 5 V con una resistencia ajustable de 10k y aplicrselo al pin VLC. El ocasiones se puede eliminar la resistencia y se conecta VLC a masa, logrando el mximo contraste de forma permanente.

SEAL DBO..DB7 E

DEFINICIN Data Bus Enable

PINES 7..14 6

FUNCIN Bus deDatos E=0, LCD no habilita E=1 LCD habilita R/W=0, escribe en LCD R/W=1, lee el LCD R/S=0, Modo Comando R/S=1, Modo Carcter Tensin para ajustar el contrast Alimentacin +5V Masa

R/W

Read / Write

RS

Register Select

VLC VDD VSS

Liquid Crystal driving Voltaje Power Supply Voltaje Ground

3 2 1

Potrebbero piacerti anche