Ensamblador Pic16f877a
Ensamblador Pic16f877a
Ensamblador Pic16f877a
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.
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
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.
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.
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
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.
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.
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
HEXADECIMAL
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
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
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
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.
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.
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.
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)
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 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.
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.
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
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
CONDIC IN?
SI/NO LAZO CON CONDICIN DE TESTEO
NO/SI
DECREMENTA EL CONTADOR
CONTAD OR=0?
SI
NO
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
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 ....
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
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
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
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.
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.
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
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.
DESPLIEGUE LOS DIEZ DIGITOS DECIMALES Y ALGUNAS LETRAS DEL ALFABETO MEDIANTE UNA MATRIZ DE LEDS DE 7X5.
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
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
3 2 1