Micro3

Post on 27-Jun-2015

367 views 3 download

Transcript of Micro3

Microcontroladores

Instrucciones Aritméticas

(add Literal to W). Suma el contenido del registro W con el literal o constante k. Almacena el resultado en W. Si se produce acarreo el flag C se pone a 1.

Ejemplo 1:Antes instrucción:Después instrucción:

addlw 0x4F (W) = 0xA3 C = ¿? (W) = 0xF2 C = 0

addlw k

Ejemplo 2:Antes instrucción:Después instrucción:

Instrucciones de Suma

addlw 0x38 (W) = 0xD1 C = ¿? (W) = 0x09 C = 1

(add W and f). 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 el flag C se pone a 1.

Ejemplo 1:Antes instrucción:Después instrucción:

addwf PORTA,W (W) = 0x17 (PORTA) = 0xC2 y C = ¿? (W) = 0xD9 (PORTA) = 0xC2 y C = 0

addwf f,d

Instrucciones de Suma

Ejemplo 2:Antes instrucción:Después instrucción:

addwf contador,f (W) = 0xD1 (contador) = 0x38 y C = ¿? (W) = 0xD1 (contador) = 0x09 y C = 1

La resta se realiza sumando, en binario puro sin signo, el registro f (o el literal k) mas el complemento de 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). El flag de Carry indica si el resultado es positivo (C se pone a 1) o es negativo (C se pone a 0). Pueden ocurrir 3 resultados.

Instrucciones de Resta

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

Ejemplo 1:Antes instrucción:Después instrucción:

sublw 0x03 (W) = 0x01 C = ¿? y Z = ¿? (W) = 0x02 C = 1 y Z = 0

sublw k

Instrucciones de Resta

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

Ejemplo 2:Antes instrucción:Después instrucción:

sublw 0x02 (W) = 0x02 C = ¿? y Z = ¿? (W) = 0x00 C = 1 y Z = 1

sublw k

Instrucciones de Resta

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

Ejemplo 3:Antes instrucción:Después instrucción:

sublw 0x02 (W) = 0x03 C = ¿? y Z = ¿? (W) = 0xFF C = 0 y Z = 0

sublw k

Instrucciones de Resta

(Subtract W to f). Resta en complemento a 2 el contenido del registro f menos el contenido del registro W . Almacena el resultado en W si d = 0 y en el registro f si d = 1.

Ejemplo 1:Antes instrucción:Después instrucción:

subwf Reg1,F Reg1 = 0x03 (W) = 0x02 C = ¿? y Z = ¿?Reg1 = 0x01 (W) = 0x02 C = 1 y Z = 0

subwf f,d

Instrucciones de Resta

(Subtract W to f). Resta en complemento a 2 el contenido del registro f menos el contenido del registro W . Almacena el resultado en W si d = 0 y en el registro f si d = 1.

Ejemplo 2:Antes instrucción:Después instrucción:

subwf Reg1,F Reg1 = 0x02 (W) = 0x02 C = ¿? y Z = ¿?Reg1 = 0x00 (W) = 0x02 C = 1 y Z = 1

subwf f,d

Instrucciones de Resta

(Subtract W to f). Resta en complemento a 2 el contenido del registro f menos el contenido del registro W . Almacena el resultado en W si d = 0 y en el registro f si d = 1.

Ejemplo 3:Antes instrucción:Después instrucción:

subwf Reg1,F Reg1 = 0x01 (W) = 0x02 C = ¿? y Z = ¿?Reg1 = 0xFF (W) = 0x02 C = 0 y Z = 0

subwf f,d

Instrucciones de Resta

(Decrement f). El contenido del registro f se decrementa en 1 unidad . Almacena el resultado en W si d = 0 (en cuyo caso f no varia) y en el registro f si d = 1. El flag Z se activa a 1 si el resultado de la operación es 0.

Ejemplo 1:Antes instrucción:Después instrucción:

decf contador,F (contador) = 0x01 y Z = ¿?(contador) = 0x00 y Z = 1

decf f,d

Incrementar y Decrementar

Ejemplo 2:Antes instrucción:Después instrucción:

decf contador,W (contador) = 0x04 (W) = ¿? y Z = ¿?(contador) = 0x04 (W) = 0x03 y Z = 0

(Increment f). El contenido del registro f se incrementa en 1 unidad. Almacena el resultado en W si d = 0 (en cuyo caso f no varia) y en el registro f si d = 1. El flag Z se activa a 1 si el resultado de la operación es 0, es decir, si hay desbordamiento.

Ejemplo 1:Antes instrucción:Después instrucción:

incf contador,F (contador) = 0xFF y Z = ¿?(contador) = 0x00 y Z = 1

incf f,d

Incrementar y Decrementar

Ejemplo 2:Antes instrucción:Después instrucción:

incf contador,W (contador) = 0x01 (W) = ¿? y Z = ¿?(contador) = 0x01 (W) = 0x02 y Z = 0

Instrucciones Lógicas

(And Literal with W). Efectúa la operación AND lógica entre el contenido del registro W y la constante k. Almacena el resultado en W. El flag Z se activa a 1 si el resultado de la operación es cero.

Ejemplo 2:Antes instrucción:Después instrucción:

andlw b’01011111’ (W) = b’10100011’ y Z = ¿? (W) = b’00000011’ y Z = 0

andlw k

Instrucciones Lógicas

(And W with f). Efectúa la operación AND lógica 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. El flag Z se activa a 1 si el resultado de la operación es cero.

Ejemplo 1:Antes instrucción:Después instrucción:

andwf FSR,F (W) = b’0010111’ FSR = b’11000010 y Z = ¿? (W) = b’0010111’ FSR = b’00000010 y Z = 0

andwf f,d

Ejemplo 2:Antes instrucción:Después instrucción:

andwf FSR,W (W) = b’0010111’ FSR = b’11000010 y Z = ¿? (W) = b’0000010’ FSR = b’11000010 y Z = 0

Instrucciones Lógicas

(Complement f). Realiza un complemento del contenido del registro f bit a bit, invirtiendo su valor, es decir, cambia los unos por ceros y los ceros por uno. Almacena el resultado en W si d = 0 y en el registro f si d = 1. El flag Z se activa a 1 si el resultado de la operación es cero.

Ejemplo 1:Antes instrucción:Después instrucción:

comf Reg1,F (Reg1) = b’00010011’ y Z = ¿? (Reg1) = b’11101100’ y Z = 0

comf f,d

Ejemplo 2:Antes instrucción:Después instrucción:

comf Reg1,W (Reg1) = b’00010011’ (W) = ¿? y Z = ¿? (Reg1) = b’00010011’ (W) = b’11101100’ y Z = 0

Instrucciones Lógicas

(Inclusive OR Literal with W). Efectúa la operación OR lógica entre el contenido del registro W y la constante k. Almacena el resultado en W. El flag Z se activa a 1 si el resultado de la operación es cero.

Ejemplo 1:Antes instrucción:Después instrucción:

iorlw b’00110101’ (W) = b’00010011’ y Z = ¿? (W) = b’10111111’ y Z = 0

iorlw k

Instrucciones Lógicas

(Inclusive OR W with f). Efectúa la operación OR lógica entre el contenido del registro W y el contenido del registro f. Almacena el resultado en W si d = 0 y en registro f si d = 1. El flag Z se activa a 1 si el resultado de la operación es cero.

Ejemplo 1:Antes instrucción:

Después instrucción:

iorwf Resultado,W (Resultado) = b’00010011’ (W) = b’10010001’ y Z = ¿?

(Resultado) = b’00010011’ (W) = b’10010011’ y Z = 0

iorwf f,d

Instrucciones Lógicas

(Rotate Left f through Carry). Rotación 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 de estado o 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 posición del bit de menor peso y el bit de mayor peso pasa al Carry

rlf f,d

Instrucciones Lógicas

C

Registro f

(Rotate Right f through Carryf). Rotación 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 de estado o 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 posición del bit de menor peso y el bit de mayor peso pasa al Carry

rrf f,d

Instrucciones Lógicas

C

Registro f

(Swapf Nibbles in f). Los cuatro bits de mas peso del registro f se intercambian con los cuatro bits de menos peso del mismo registro f. Almacena el resultado en W si d = 0 y en registro f si d = 1.

Ejemplo 1:Antes instrucción:

Después instrucción:

swapf Reg1,W (Reg1) = 0xA5 y (W) = ¿?

(Reg1) = 0xA5 y (W) = 0x5A

swapf f,d

Instrucciones Lógicas

(Exclusive OR Literal with W). Realiza la función OR-Exclusiva entre el contenido del registro W y la constante k de 8 bits. El resultado se almacena en W. El flag Z se activa a 1 si el resultado de la operación es 0.

Ejemplo 1:Antes instrucción:

Después instrucción:

xorlw b’10101111’ (W) = b’10110101’ y Z = ¿?

(W) = b’00011010’ y Z = 0

xorlw k

Instrucciones Lógicas

(Exclusive OR W with f). Realiza la función OR-Exclusiva entre el contenido del registro W y el contenido del registro f. El resultado se almacena en W si d=0 o en el registro f si d=1. El flag Z se activa a 1 si el resultado de la operación es 0.

Ejemplo 1:Antes instrucción:

Después instrucción:

xorwf Reg,f

(Reg) = b’10101111’ (W) = b’10110101 y Z = ¿?

(Reg) = b’00011010’ (W) = b’10110101 y Z = 0

xorwf f,d

Instrucciones Lógicas

Para ahorrar energía los microcontroladores PIC disponen de la Sleep que les pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mínimos. En dicho estado se detiene el reloj principal y se congelan sus circuitos asociados.-.

Instrucciones Sleep

Modo de ahorro de energía

El oscilador del sistema deja de funcionar

El consumo baja a unos pocos uA

El TMR0 deja de funcionar

Saltos Condicionales

Producen un salto en función de que se cumpla o no una función. Estas instrucciones son el único medio para realizar bifurcaciones condicionales en un programa.

Saltos Condicionales

El repertorio de instrucciones del PIC16F84A incluye cuatro instrucciones de salto condicional clasificadas en dos grupos:

Aquellas que pueden producir un salto en función del estado de un bit. Son btfsc y btfss.

Aquellas que pueden producir un salto en función del contenido de un registro. Son decfsz y incfsz.

Saltos en función de un Bit

(Bit Test f, Skip if Clear). Esta instrucción puede actuar de dos formas:

btfsc f,b

Si el bit numero b del registro f es 1 la instrucción que sigue a esta se ejecuta normalmente.

Si el bit numero b del registro f es 0 la instrucción que sigue a esta se ignora y se salta.

Saltos en función de un Bit

(Bit Test f, Skip if Set). Esta instrucción puede actuar de dos formas:

btfss f,b

Si el bit numero b del registro f es 0 la instrucción que sigue a esta se ejecuta normalmente.

Si el bit numero b del registro f es 1 la instrucción que sigue a esta se ignora y se salta.

Saltos en función de un Registro

(Decrement f, Skip if 0). 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. Después de decrementar puede ocurrir dos casos:

decsz f,d

Si el resultado es distinto de 0 la instrucción que sigue a esta se ejecuta normalmente.

Si el resultado es 0 la instrucción que sigue a esta se ignora y se salta.

Saltos en función de un Registro

(Increment f, Skip if 0). 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. Después de Incrementar puede ocurrir dos casos:

incsz f,d

Si el resultado es distinto de 0 la instrucción que sigue a esta se ejecuta normalmente.

Si el resultado es 0 la instrucción que sigue a esta se ignora y se salta.

Directivas Importantes

(Define a Block of Constants), (End Constant Block). Asigna direcciones (generalmente de memoria RAM de datos) a muchas etiquetas. La lista queda enmarcada entre las directivas CBLOCK y ENDC.

CBLOCK y ENDC

CBLOCK 0x0C ;Las variables se posicionan a partir de 0x0C A ;La variable A ocupa la posición 0x0C B ;La variable B ocupa la posición 0x0D

C ;La variable C ocupa la posición 0x0E ENDC

Si la directiva no define ningún comienzo los valores asignados comenzaran el la posición 0, que corresponde a la zona SFR.

Directivas Importantes

(Define a Text Substitution Label). Esta directiva define una cadena de sustitución de texto. Donde quera que <name> se encuentre, en el ensamblador se sustituirá por [<string>]

#DEFINE

#DEFINE <name> [<string>]

#DEFINE LED PORTB,4

bsf LED

Ejemplos:

Directivas Importantes

#DEFINE#DEFINE <name> [<string>]

#DEFINE Banco0 bcf STATUS,5#DEFINE Banco1 bsf STATUS,5

InicioBanco1clrf TRISAmovlw b´11111111´movwf TRISBBanco0

Subrutinas

Conjunto de instrucciones al que se tiene acceso desde cualquier punto del programa principal. Es decir, es un subprograma que se ejecuta cada vez que el programa principal lo necesita.

PROCESO X

PROCESO X

PROCESO X

PROCESO X

PROCESO X

PROCESO X

PROCESO X:

RETURN

Subrutinas Anidadas

Programa Principal

CALL PROCESO 1

X1

Subrutina 1

PROCESO 1

CALL PROCESO 2

X2

RETURN

Subrutina 2

PROCESO 2

RETURN

PILA

X1

PILA

X2

X1

PILA

LA PILA

Zona de memoria que se encuentra separada tanto de la memoria de programa como de la de datos dentro del microcontrolador.

Su estructura es del tipo LIFO.

Manejo de Tablas

Instrucción “ retlw ”

Funciona de forma similar a return, produce el retorno de una subrutina pero con un valor en el registro W.

Formato Instrucción:

retlw k

Manejo de Tablas

Directiva DT

Para simplificar el uso de la instrucciones retlw el ensamblador MPASM facilita la directiva DT, que sustituye el empleo respectivo de muchas instrucciones retlw. Su sintaxis es:

Ejemplo:

DT “Hola”

retlw “H”retlw “o”retlw “l”retlw “a”

Manejo de un Display 7 seg

Manejo de un Display 7 seg

Subrutinas de Retardo

Ciclo de MaquinaEl tiempo que tarda en ejecutarse un programa depende de la frecuencia del oscilador y del numero de ciclos de maquina ejecutados. Un ciclo de maquina es la unidad básica de tiempo que utiliza el microcontrolador.Para el microcontrolador PIC16F84A el ciclo de maquina equivale a 4 ciclos de reloj, por lo tanto el tiempo que tarda en producirse un ciclo de maquina es igual a 4 veces el periodo del oscilador.

Las instrucciones del microcontrolador PIC16F84A necesitan 1 ciclo de maquina para ejecutarse, excepto las de salto (goto, call, btfss, btfsc, return, etc., que necesitan de 2 ciclos de maquina.

Subrutinas de Retardo

El tiempo que tarda microcontrolador en ejecutar una tarea viene fijado por la siguiente formula:

Tiempo = 41

fcm

Calcular la duración de 1 ciclo de maquina para el PIC16F84A

Tiempo = 41

4MHz

1 = 1us

Subrutinas de Retardo

En un sistema con Microcontrolador PIC16F84A y cristal de cuarzo de 4MHz se desea generar un retardo de 1.5 ms. Calcular el numero de ciclos de maquina necesarios.

Tiempo = 41

fcm

Solución:

Tiempo = 41

fcm Tiempo=

4fcm

1500us=4

4MHzcm = 1500

Operación NOP

No realiza ninguna operación.

Para una frecuencia de trabajo de 4MHz produce una temporización de 1 useg.

Retardos mediante lazo simple

Retardo_1ms ; La llamada call aporta 2 ciclos de maquina. movlw d'249‘ ; Aporta 1 ciclos máquina. Este es el valor de "K". movwf R_ContA ; Aporta 1 ciclos máquina.

R1ms_Bucle nop ; Aporta Kx1 ciclos máquina. decfsz R_ContA,F ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar). goto R1ms_Bucle ; Aporta (K-1)x2 ciclos máquina. return ; El salto de retorno aporta 2 ciclos máquina.;;En total estas subrutinas tardan:;2 + 1 + 1 + Kx1 + (K-1)x1 + 2 + (K-1)x2 + 2 = 5 + 4K = 1001 Ciclos de maquina

(para K = 249)

Retardos mediante lazos anidados

Retardo_200ms movlw d'200‘ movwf R_ContB

Retardo_1ms movlw d'249‘ movwf R_ContA

R1ms_Bucle nop decfsz R_ContA,F goto R1ms_Bucle

decfsz R_ContB,F goto Retardo_1ms

return

Retardo_100ms movlw d‘100‘ movwf R_ContB

Retardo_1ms movlw d'249‘ movwf R_ContA

R1ms_Bucle nop decfsz R_ContA,F goto R1ms_Bucle

decfsz R_ContB,F goto Retardo_1ms

return

TIMER 0 (TMR0)

El PIC16F84A dispone de un timer, el cual es un contador ascendente de 8 bits. El TMR0 se inicializa con un valor, que se incrementa con cada impulso de entrada hasta su valor máximo, después de lo cual se produce su desborde el cual es anunciado por el flag TOIF del registro INTCON.

Contador Ascendente

Carga Inicial del Contador

Impulsos de Entrada

Fin de Contaje

TIMER 0 (TMR0)

Los impulsos aplicados al TMR0 pueden provenir de los pulsos aplicados al pin TOCKI o de la señal de reloj interna (Fosc/4), lo que le permite actuar de dos formas diferentes:

Como contador de impulsos por el pin RA4/TOCKI

Como temporizador de tiempos

TIMER 0 (TMR0)

TOCS = 1 el TMR0 actúa como contador

TOCS = 0 el TMR= actúa como temporizador

El actuar de una o de otra forma depende del bit TOCS del registro OPTION

TIMER 0 como Contador

TOSE = 1 el flanco activo es descendente

El tipo de flanco activo se elige mediante el bit TOSE del registro OPTION

TOSE = 0 el flanco activo es Ascendente

TIMER 0 como Temporizador

Cuenta los impulsos de Fosc/4. Se usa para determinar intervalos de tiempos concretos. Estos tiempos tienen una duración conocida de un ciclo de maquina (4 veces el periodo de la señal de reloj).

Como se trata de un contador ascendente el TMR0 debe ser cargado con el valor de los impulsos que se desean contar restados 256 que es el valor de desbordamiento.

TIMER 0 registro del SFR

El TMR0 es un registro de propósito general ubicado en laposición 1 del área SFR de la RAM de datos. Puede ser leído y escrito.

Divisor de Frecuencia (Preescaler)

A veces es necesario controlar tiempos largos y aumentar la duración de los impulsos que incrementan el TMR0 . Para cubrir esta necesidad se dispone de un circuito programable llamado Divisor de Frecuencia o Preescaler que divide la frecuencia utilizada por diversos rangos.

En realidad el PIC16F84A dispone de dos temporizadores:

El TMR0, que actúa como temporizador principal

El Washdog, el cual vigila que el programa no se cuelgue

Divisor de Frecuencia (Preescaler)

El Preescaler puede aplicarse a uno de estos dos temporizadores. Cuando se asigna al TMR0 los impulsos pasan primero por el divisor de frecuencia y una vez aumentada su duración se aplican al TMR0.

El TMR0, que actúa como temporizador principalEl TMR0, que actúa como temporizador principal

El Washdog, el cual vigila que el programa no se cuelgueEl Washdog, el cual vigila que el programa no se cuelgue

Registro Relacionados con el TMR0

Registro OPTION

Registro INTCON

Registro Relacionados con el TMR0

Registro INTCON

1

0

TMR0 Overflow Interrupt Flag bit

Registro Relacionados con el TMR0

Registro OPTION

Selecciona la fuente de señal del TMR0

1

0Pulsos de reloj interno Fosc/4

TMR0 como Temporizador

Pulsos de reloj externo RA4/TOCKITMR0 como Contador

Registro Relacionados con el TMR0

Registro OPTION

Flanco ascendente a RA4/TOCKI

Selecciona flanco de la señal de entrada del TMR0

Flanco descendente a RA4/TOCKI1

0

Registro Relacionados con el TMR0

Registro OPTION

Asignación del Divisor de Frecuencia

1

0El divisor de frecuencia se

asigna al TMR0

El divisor de frecuencia se asigna al Watchdog

Registro Relacionados con el TMR0

Registro OPTION

Bits para seleccionar los valores del Preescaler o rango con el que actúa el divisor de frecuencia.

PS2 PS1 PS0 Divisor del TMR0 Divisor del WDT0 0 0 1:2 1:10 0 1 1:4 1:20 1 0 1:8 1:40 1 1 1:16 1:81 0 0 1:32 1:161 0 1 1:64 1:321 1 0 1:128 1:641 1 1 1:256 1:128

Ejemplo del TMR0 como contador

0 0 1 1 1 0 0 0

Otros Recursos

El WATCHDOG TIMER

Para que esta labor de vigilancia se lleve a cabo el WDT da un paseo por la CPU cada cierto tiempo, asegurándose que el programa funcione normalmente, de lo contrario el WDT ladra y provoca un reset.

El Perro Guardián

Vigila que el programa no se cuelgue y así dejen de ejecutarse las instrucciones.

Ciclo Infinito Espera de un acontecimiento que no se produce

El WATCHDOG TIMER

Consiste en la puesta a cero del WDT para comenzar nuevamente la cuenta, evitando así su desbordamiento y el reset que esto provoca. Esta puesta a cero se debe realizar por software mediante la instrucción clrwdt.

Refrezco del Perro Guardián

Habilitación del Watchdog Timer

Resistencias de Pull-Up

Permiten en entradas no utilizadas evitar el ingreso de señales falsas (ruido) que puedan provocar un mal funcionamiento del uC. En las salidas permiten asegurar de que no se supere la máxima corriente de alimentación que puede manejar el uC.

El PIC16F84A permite configurar una resistencia interna en cada una de las líneas del Puerto B, ahorrando estas necesarias resistencias externas cuando se utilizan pulsadores u otros dispositivos externos de lectura.

Resistencias de Pull-Up

Ground

Resistencias de Pull-Up

Resistor Port B Pull-Up Enable Bit

0

1

Habilita las resistencias de Pull-Updel Puerto B.

Deshabilita las resistencias de Pull-Updel Puerto B.

INTERRUPCIONES

INTERRUPCIONES

Una interrupción consiste en un mecanismo por el cual un evento interno o externo puede interrumpir la ejecución de un programa en cualquier momento. A partir de entonces se produce automáticamente un salto a una subrutina de interrupción, esta atiende inmediatamente el evento y retorna luego la ejecución del programa exactamente donde estaba en el momento de ser interrumpido.

Subrutina de Interrupción

Programa Principal

X1

004hProceso X(Subrutina de atención a la interrupción)retfie

Subrutina de Interrupción

El PIC16F84A dispone de 4 posibles fuentes de interrupción:

Interrupción INT. Por activación del pin RB0/INT.

Interrupción RBI. Por cambio de estado en una o varias de las 4 lineas de más peso RB7:RB4 del Puerto B.

Interrupción TOI. Por desbordamiento del Timer 0.

Interrupción EEI. Por la finalización de la escritura en la EEPROM de datos.

Interrupción INT. Por activación del pin RB0/INT.

Interrupción RBI. Por cambio de estado en una o varias de las 4 lineas de más peso RB7:RB4 del Puerto B.

Funcionamiento de una InterrupciónCuando se produce cualquiera de los sucesos indicados anteriormente se origina una petición de interrupción que si se acepta, origina el siguiente mecanismo hardware:

1º Salva el valor actual del contador de programa PC guardando su contenido en la pila.

El bit GIE del registro INTCON es puesto a cero lo cual prohibe cualquier otra interrupción.

El PC se varga con al valor 004h, que es la posición del vector de interrupción.

Comienza a ejecutarse el programa de atención a la interrupción que se encuentra a partir de la dirección 004h.

Funcionamiento de una Interrupción

Los bits de control localizados en el registro INTCON habilitan y configuran las interrupciones. Cada causa de interrupción actúa con dos flags.

FLAG DE SEÑALIZACIÓN

Indica si se ha producido o no la interrupción.

TOIF INTF RBIF EEIF

FLAG DE PERMISO

Indica si se ha producido o no la interrupción.

TOIE INTE RBIE EEIE

Funcionamiento de una Interrupción

GIE

Habilitación General

Vector de Interrupciones

POSICIÓN 004h

Sea cual sea la interrupción el contador de programa se carga con la dirección 004h.

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

Global Interruption Enable (Habilitación General de las Interrupciones)

Se inhabilita automáticamente cuando se reconoce un la interrupción para evitar que ninguna otra se produzca mientras se esta atendiendo a la primera. Al retornar de la interrupción con una instrucción retfie, el bit GIE se vuelve a activar a 1.

GIE = 0No autoriza interrupción de ningún tipo

GIE = 1Autoriza cualquier tipo de interrupción

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

EEPROM Write Complete Interrupt Enable (Habilitación de la Interrupción EEI)

Habilita la interrupción por escritura completada en la EEPROM de datos. Su flag se encuentra ubicado en el registro EECON1.

EEIE = 0Interrupción EEI deshabilitada

EEIE = 1Interrupción EEI habilitada

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

TMR0 Interrupt Enable bit (Habilitación de la Interrupción TOI)

Habilita la interrupción por desbordamiento del TMR0.

TOIE = 0Interrupción TOI deshabilitada

TOIE = 1Interrupción TOI habilitada

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

External INT Enable bit (Habilitación de la Interrupción externa INT)

Habilita la interrupción externa por el pin RB0/INT

INTE = 0Interrupción INT deshabilitada

INTE = 1Interrupción INT habilitada

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

RB Port Change Interrupt Enable (Habilitación de la Interrupción externa RBI)

Habilita la interrupción por cambio de estado de las líneas RB7:RB4 del puerto B.

RBIE = 0Interrupción RBI deshabilitada

RBIE = 1Interrupción RBI habilitada

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

TMR0 Overflow Interrupt Flag bit (indicación de la Interrupción por TMR0)

Indica que se ha producido una interrupción por desbordamiento del Timer 0.

TOIF = 0El TMR0 no se ha desbordado

TOIF = 1El TMR0 se ha desbordado

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

External Interrupt Flag bit(Indicación de la Interrupción externa INT)

Indica que se ha producido una interrupción externa por el pin RB0/INT

INTF = 0No hay interrupción externa

INTF = 1Hay interrupción externa

Registro INTCON

REGISTRO DE CONTROL DE INTERRUPCIONES

RB port change Interrump Flag (Indica la Interrupción externa RB7:RB4)

Indica que se ha producido una interrupción por cambio de estado de las líneas RB7/RB4

RBIF = 0No hay cambio de estado

RBIF = 1Hay cambio de estado

Registro OPTION

Interrupt Edge Select bit (Selector de flanco de la interrupción INT)

INTEDG = 0Interrupción por flanco descendente

INTEDG = 1Interrupción por flanco ascendente

RB0/INT RB0/INT

Instrucción retfie

Utilizada al final de una subrutina de interrupción es idéntica a un retorno de subrutina return. Ademas coloca automaticamente a 1 el bib GIE, volviendo a habilitar las interrupciones.

retfie idéntica return

Interrupción Externa INT

LIST P=16F84AINCLUDE <P16F84A.INC>

ORG 0goto InicioORG 4

goto ServicioInterrupcionInicio

bsf STATUS,RP0movlw b'00000001'movwf TRISBbcf OPTION_REG,INTEDGbcf STATUS,RP0movlw b'10010000'movwf INTCONclrf PORTB

Flanco de bajada

Se habilita INT y GIE

Interrupción Externa INT

Principalsleepgoto Principal

ServicioInterrupcionmovlw b'11111110'movwf PORTBcall Retardo_2smovlw b'00000000'movwf PORTBgoto FinInterrupcion

FinInterrupcionbcf INTCON,INTFretfieINCLUDE <RETARDOS.INC>END

Se baja el Flag

Registros Alterados

Durante la interrupción el único registro que se salvaguarda en la pila es el PC. La subrutina de atención a la interrupción puede

alterar el contenido de los registros del microcontrolador.

El contenido de los registros W y STATUS deben guardarse prinero.

Al iniciarla conviene guardar su valor y restaurarlos antes de la instrucción retfie.

Salvar Registros

CBLOCK 0x0CGuarda_WGuarda_STATUSGuarda_RegistroAGuarda_RegistroBENDC----------------------

movwf Guarda_Wmovf STATUS,Wmovwf Guarda_STATUSmovf RegistroA,Wmovwf Guarda_RegistroAmovf RegistroB,Wmovwf Guarda_RegistroB

movf Guarda_RegistroB,W movwf RegistroBmovf Guarda_RegistroA,Wmovwf RegistroAmovf Guarda_STATUS,Wmovwf STATUSmovf Guarda_W,Wbcf INTCON,INTF

Mover el registro W a otro registro corrompe el flag Z

Salvar Registros

movwf Guarda_Wswapf STATUS,Wmovwf Guarda_STATUSmovf RegistroA,Wmovwf Guarda_RegistroAmovf RegistroB,Wmovwf Guarda_RegistroBbcf STATUS,RP0

movf Guarda_RegistroB,W movwf RegistroBmovf Guarda_RegistroA,Wmovwf RegistroAswapf Guarda_STATUS,Wmovwf STATUS swapf Guarda_W,Fswapf Guarda_W,Wbcf INTCON,INTFretfie

Microchip recomienda

Manejo de LCDManejo de LCD

Visualizador LCD

Liquid Crystal Display

LM016L

Consumo Reducido, del orden de los 7,5 mW. Desplazamiento de caracteres derecha - izquierda

Memoria de 40 caracteres por línea de pantalla.

Movimiento del cursos y cambio de aspecto

Puede ser gobernado de dos formas:• Conexión con bus de 4 bits• Conexión con bus de 8 bits

LM016L

Alimentación de 5V

Regulación de contraste se realiza mediante el voltaje obtenido al dividir los 5V con una resistencia ajustable de 10k y aplicárselo al pin VEE. Este mismo pin a masa fija el máximo contraste.

Configuración de Conexionado

Función de los pines

DDRAM

Data Display RAM

Tiene una capacidad de 80 bytes, 40 por cada línea, de los cuales solo 32 se pueden visualizar

Línea 1Línea 2

TABLA CGROM

TABLA CGROM

TABLA CGROM

TABLA CGROM

TABLA CGROM

TABLA CGROM

0011

TABLA CGROM

0011

TABLA CGROM

0011

TABLA CGROM

0011

TABLA CGROM

00110011

TABLA CGROM

0011 0010

Bus de datos

CGROM

Memoria no volátil donde se almacena una tabla con los 192 caracteres que pueden ser visualizados.

Modos de Funcionamiento

El LM016L tiene 3 modos de funcionamiento

Modo Comando

Recibe instrucciones por el bus de datos.

Para trabajar en modo comando:

RS

R/W

Borrar Display Mover Cursor Desplazar Izquierda

= 0

= 0

Modos de Funcionamiento

El LM016L tiene 3 modos de funcionamiento

Modo Carácter o Dato

Recibe un carácter a escribir en la memoria DDRAMPara trabajar en modo comando:

RS

R/W

= 1

= 0

Modos de Funcionamiento

El LM016L tiene 3 modos de funcionamiento

Modo Lectura “Busy Flag” o LCD ocupada

En el bit 7 del bus de datos el LCD indica que esta ocupada.

Para ello se lee el bus de datos:

RS

R/W

= 0

= 1

Se debe esperar que Busy Flag (bit7) valga 0.

Configuración de Conexionado

Comandos de Control LCD

Comandos de Control LCD

Los comandos se envían a través del bus de datos. Para que el LCD los reconozca hay que poner la señal RS a nivel bajo.

Clear Display (00000001)

Borra la pantalla y devuelve el cursor a la posición inicial (posición 0 de la DDRAM)

Return Home (0000001x)

Cursor a la dirección de origen. Devuelve el cursor a la posición de origen de la DDRAM (dirección 00h) quedando intacto su contenido.

Comandos de Control LCD

Entry Mode Set (000001 I/D S)

Modo de entrada. Establece las caracteristicas de escritura de los datos Shift e Increment/Decrement:

S = 0

S = 1

La información visualizada no se desplaza al escribir un carácter.

La información visualizada se desplaza al escribir un carácter. La pantalla se desplaza en el sentido indicado por el bit I/D cuando el cursor llega al filo de la pantalla.

I/D = 1

I/D = 0

Comandos de Control LCD

Entry Mode Set (000001 I/D S)

Modo de entrada. Establece las caracteristicas de escritura de los datos Shift e Increment/Decrement:

Incremento automático de la posición del cursor. La posición de la DDRAM se incrementa automáticamente tras cada lectura o escritura a la misma.

Decremento de la posición del cursor. Se decrementa el puntero del a DDRAM.

B = 1B = 0

Comandos de Control LCD

Display Control (00001 D C B)

Control de la pantalla.

No hay efecto en el parpadeo del cursor.

Efecto de parpadeo con un cursor rectangular.

C = 1C = 0 El cursor no se visualiza.

El cursor es visualizado.

D = 1D = 0 El display se apaga.

El display se enciende.

R/L = 0

R/L = 1

Comandos de Control LCD

Cursor and Display Shift (0001 S/C R/L xx)

Control de desplazamiento del cursor y de la pantalla:

A la izquierda.

El efecto de desplazamiento se aplica solo sobre el cursor sin alterar el contenido de la DDRAM

A la derecha.

S/C = 0

S/C = 1 El efecto de desplazamiento se aplica sobre todo el display.

F = 1F = 0

Comandos de Control LCD

Display Control (00001 D C B)

Control de la pantalla.

Caracteres de 5x7 puntos. (Font)

Caracteres de 5x10 puntos. (Font)

N = 1N = 0 Pantalla de linea 1. (Number Line)

Pantalla de linea 2. (Number Line)

DL = 1DL = 0 Comunicación con 4 bits

Comunicación con 8 bits.

Librería de Subrutinas

LCD_Inicializa

Configura funciones, produce un reset, borra la memoria de la DDRAM y enciende la pantalla.

LCD_Caracter

Visualiza en la posición actual del cursor el codigo ASCII del dato contenido en el registro W.

LCD_Borra

Borra toda la pantalla y coloca el cursor al principio de la línea 1.

Librería de Subrutinas

LCD_Linea1

Envia el cursor al principio de la línea 1.

LCD_Linea2

Envia el cursor al principio de la línea 2.

LCD_PosicionLinea1

Envía el cursor a la posición de la línea 1 indicada por W.

LCD_PosicionLinea2

Envía el cursor a la posición de la línea 2 indicada por W.

Librería de Subrutinas

LCD_LineaBlanco

Visualiza una línea en blanco.

LCD_DosEspaciosBlancos

Visualiza dos espacios en blanco.

Visualización de Caracteres

Conexión de LCD mediante 8 bits

Visualización de mensajes fijos

Librería LCD_MENS.INC

Subrutina “LCD_Mensaje”Visualiza mensajes fijos

Subrutina “LCD_Movimiento”Visualiza mensajes en movimiento

Visualización de mensajes fijos

Visualización de mensajes en movimiento

Comandos de Control LCD

Comandos de Control LCD

Los comandos se envían a través del bus de datos. Para que el LCD los reconozca hay que poner la señal RS a nivel bajo.

Clear Display (00000001)

Borra la pantalla y devuelve el cursor a la posición inicial (posición 0 de la DDRAM)

Return Home (0000001x)

Cursor a la dirección de origen. Devuelve el cursor a la posición de origen de la DDRAM (dirección 00h) quedando intacto su contenido.

Comandos de Control LCD

Entry Mode Set (000001 I/D S)

Modo de entrada. Establece las caracteristicas de escritura de los datos Shift e Increment/Decrement:

S = 0

S = 1

La información visualizada no se desplaza al escribir un carácter.

La información visualizada se desplaza al escribir un carácter. La pantalla se desplaza en el sentido indicado por el bit I/D cuando el cursor llega al filo de la pantalla.

I/D = 1

I/D = 0

Comandos de Control LCD

Entry Mode Set (000001 I/D S)

Modo de entrada. Establece las caracteristicas de escritura de los datos Shift e Increment/Decrement:

Incremento automatico de la posición del cursor. La posición de la DDRAM se incrementa automaticamente tras cada lectura o escritura a la misma.

Decremento de la posición del cursor. Se decrementa el puntero del a DDRAM.

B = 1B = 0

Comandos de Control LCD

Display Control (00001 D C B)

Control de la pantalla.

No hay efecto en el parpadeo del cursor.

Efecto de parpadeo con un cursor rectangular.

C = 1C = 0 El cursor no se visualiza.

El cursor es visualizado.

D = 1D = 0 El display se apaga.

El display se enciende.

R/L = 0

R/L = 1

Comandos de Control LCD

Cursor and Display Shift (0001 S/C R/L xx)

Control de desplazamiento del cursor y de la pantalla:

A la izquierda.

El efecto de desplazamiento se aplica solo sobre el cursor sin alterar el contenido de la DDRAM

A la derecha.

S/C = 0

S/C = 1 El efecto de desplazamiento se aplica sobre todo el display.

F = 1F = 0

Comandos de Control LCD

Display Control (00001 D C B)

Control de la pantalla.

Caracteres de 5x7 puntos. (Font)

Caracteres de 5x10 puntos. (Font)

N = 1N = 0 Pantalla de linea 1. (Number Line)

Pantalla de linea 2. (Number Line)

DL = 1DL = 0 Comunicación con 4 bits

Comunicación con 8 bits.

Comandos de Control LCD

Set CGRAM address

Se va a escribir sobre la dirección CGRAM señalada.

Set DDRAM address (1ddddddd)

Esta instrucción se utiliza para modificar el puntero a la DDRAM

Read Busy Flag

Lee el BF indicando si hay una operación interna en curso y lee, además, el contenido de la dirección DDRAM apuntada.

Librería de Subrutinas

LCD_Inicializa

Configura funciones, produce un reset, borra la memoria de la DDRAM y enciende la pantalla.

LCD_Caracter

Visualiza en la posición actual del cursor el codigo ASCII del dato contenido en el registro W.

LCD_Borra

Borra toda la pantalla y coloca el cursor al principio de la línea 1.

Librería de Subrutinas

LCD_Linea1

Envia el cursor al principio de la línea 1.

LCD_Linea2

Envia el cursor al principio de la línea 2.

LCD_PosicinLinea1

Envía el cursor a la posición de la línea 1 indicada por W.

LCD_PosicinLinea2

Envía el cursor a la posición de la línea 2 indicada por W.

Librería de Subrutinas

LCD_Linea1

Envia el cursor al principio de la línea 1.

LCD_Linea2

Envia el cursor al principio de la línea 2.

LCD_LineaBlanco

Visualiza una linea en blanco.

LCD_DosEspaciosBlancos

Visualiza dos espacios en blanco.

TECLADO MATRICIAL

Teclado Hexadecimal

A B C

D

E

F

TECLADO MATRICIAL

Teclado Hexadecimal

A B C

D

E

FUn teclado matricial esta constituido por una matriz de pulsadores dispuestos en filas y columnas. Su intención es reducir el numero de líneas necesarias para su conexionado.

TECLADO MATRICIAL

CONEXIÓN CON PIC16F84A

CONEXIÓN CON PIC16F84A

Las filas del teclado se conectan a las líneas de la parte baja del Puerto B, configurado como salida.

Las columnas del teclado se conectan a las líneas de la parte alta del Puerto B, configurado como entradas.

PRESIONANDO TECLAS

0

1

0

1

1

1

1

1

Averiguar la causa de Interrupción

btfsc INTCON,INTFcall Interrupcion_INTbtfsc INTCON,RBIFcall Interrupcion_RBIbtfsc INTCON,TOIFcall Interrupcion_TOI

ALGORITMO DE PROGRAMACIÓN

ALGORITMO DE PROGRAMACIÓN

0

1

1

1

0

1

1

1

TESTEO DE COLUMNAS

TESTEO DE COLUMNAS

0

1

1

1

TESTEO DE COLUMNAS

0

1

1

1

TESTEO DE COLUMNAS

0

1

1

1

1

0

1

1

TESTEO DE COLUMNAS

TESTEO DE COLUMNAS

1

0

1

1

TESTEO DE COLUMNAS

1

0

1

1

TESTEO DE COLUMNAS

1

0

1

1

ALGORITMO DE PROGRAMACIÓN

1

1

1

0

TESTEO DE COLUMNAS

1

1

1

0

TESTEO DE COLUMNAS

1

1

1

0

TESTEO DE COLUMNAS

1

1

1

0

ALGORITMO DE PROGRAMACIÓN

1

1

0

1

TESTEO DE COLUMNAS

1

1

0

1

TESTEO DE COLUMNAS

1

1

0

1

TESTEO DE COLUMNAS

1

1

0

1

TECLA PULSADA

1

1

0

1

0

W = 15

TECLA PULSADA

TECLA PULSADA

LIBRERÍA DE SUBRUTINAS

TECLADOS.INC

Teclado_Inicializa

Configura las líneas del Puerto B según la conexión del teclado realizada y comprueba que no hay pulsada tecla alguna al principio.

Teclado_EsperaDejePulsar

Permanece en esta subrutina mientras siga pulsada la tecla. Se utiliza para que no repita la misma lectura varias veces.

LIBRERÍA DE SUBRUTINAS

TECLADOS.INC

Teclado_LeeOrdenTecla

Lee el teclado obteniendo en el registro W el orden de la tecl pulsda. Además, posiciona el flag Carry para indicar si ha presionado alguna tecla.

Teclado_LeeHex

Lee un teclado Hexadecimal. En el registro de trabajo W aparece el valor hexadecimal de la tecla pulsada. Además posiciona el flag Carry para indicar si se ha presionado alguna tecla.

LIST P=16F84AINCLUDE <P16F84A.INC>

CBLOCK 0x0CENDC

ORG 0goto InicioORG 4goto ServicioInterrupcion

Iniciocall LCD_Inicializacall Teclado_Inicializamovlw b'10001000‘movwf INTCON

;Configura las líneas del teclado.

;Habilita la interrupción RBI y la general.

Programa Aplicación

Principalsleepgoto Principal

ServicioInterrupcioncall Teclado_LeeHexcall LCD_Nibblecall Teclado_EsperaDejePulsarbcf INTCON,RBIFretfie

INCLUDE <TECLADO.INC> INCLUDE <LCD_4BIT.INC>

INCLUDE <RETARDOS.INC>END

; Espera en modo bajo consumo que pulse teclado.

; Obtiene el valor hexadecimal de la tecla pulsada.

; Visualiza el valor en pantalla.

; Para que no se repita el mismo carácter .

; mientras permanece pulsado, limpia flag.

; Subrutinas de control del teclado.

CONEXIONES

CERRADURA ELECTRÓNICA

Microcontroladores y Microprocesadores

MOTOR PASO A PASO

El PAP mas comercializado es el de 7,5º por paso o 48 pasos por revolución. El principal problema que presentan los motores PAP es su limitada potencia.

Los incrementos de rotación o pasos se miden en grados y es el parámetro fundamental de un motor PAP. Los PAP se comercializan dentro de una gran variedad de grados de rotación por paso, desde 0,72º a 22,5º, correspondiente a 500 y 16 pasos por revolución, respectivamente .

L1

I

PRINCIPIOS DE FUNCIONAMIENTO

L2

I

Núcleo de Hierro

Bobina Estator

Rotor

Reposo

L1

I

PRINCIPIOS DE FUNCIONAMIENTO

L2

I

PASO 1

L1

I

PRINCIPIOS DE FUNCIONAMIENTO

L2

I

Energizado

PASO 2

PRINCIPIOS DE FUNCIONAMIENTO

L2

I

L1

IInvertir Polaridad L1

L2

I

L1

I

PRINCIPIOS DE FUNCIONAMIENTO

PASO 3

Invertir Polaridad L2

L2

I

L1

I

PRINCIPIOS DE FUNCIONAMIENTO

PASO 4

Invertir Polaridad L1

MOTORES PAP BIPOLARES

El modelo de motor paso a paso que hemos analizado, recibe el nombre de BIPOLAR.

En este tipo de motores las bobinas del estator se conectan formando dos grupos.

Secuencias de Movimientos

En el modo Full Step el rotor del motor PAP avanza un paso por cada pulso de excitación.

Secuencias de Movimientos

En el modo Half Step el rotor del motor PAP avanza medio paso por cada pulso de excitación.

MOTORES PAP UNIPOLARES

Tras el inconveniente que implica la necesidad de dos polaridades de corriente para generar la secuencia del motor se puede disponer de una toma media entre las bobinas. De esta forma se obtiene un Motor PAP Unipolar de cuatro fases, donde las corriente circula por las bobinas en un único sentido.

Secuencias de Movimientos

En el modo Full Step el rotor del motor PAP avanza un paso por cada pulso de excitación.

Secuencias de Movimientos

En el modo Half Step el rotor del motor PAP avanza medio paso por cada pulso de excitación.