Você está na página 1de 56

MICROCONTROLADORES

M.Sc. César Augusto Peña C.

Profesor de planta – Ingeniería mecatrónica


Universidad de Pamplona
INSTRUCCIÓN ADDLW k
W+k W
Ejm:

W =1 0 0 0 0 0 0 0 1
ADDLW .7

W = 1 +7 = 8 0 0 0 0 1 0 0 0
INSTRUCCIÓN ADDWF f,d
W+f d
Ejm:

W=1 0 0 0 0 0 0 0 1

REG1 = 5 0 0 0 0 0 1 0 1
ADDWF REG1,1

REG1 = 1 + 5 = 6 0 0 0 0 0 1 1 0
INSTRUCCIÓN ANDLW k
W AND k W
Ejm:

W =5 0 0 0 0 0 1 0 1
ANDLW b’00000111’

W = 5 AND 7 = 5 0 0 0 0 0 1 0 1
INSTRUCCIÓN ANDWF f,d
W AND f d
Ejm:

W=3 0 0 0 0 0 0 1 1

REG1 = 5 0 0 0 0 0 1 0 1
ANDWF REG1,0

W = 3 AND 5 = 1 0 0 0 0 0 0 0 1
INSTRUCCIÓN CLRW
0 W
Ejm:

W =171 1 0 1 0 1 0 1 1
CLRW

W=0 0 0 0 0 0 0 0 0
INSTRUCCIÓN CLRF f
0 f
Ejm:

REG1 =170 1 0 1 0 1 0 1 0

CLRF REG1

REG1 = 0 0 0 0 0 0 0 0 0
INSTRUCCIÓN COMF f,d
com(f) d
Ejm:

REG1 =240 1 1 1 1 0 0 0 0
COMF REG1,0

W = 15 0 0 0 0 1 1 1 1
INSTRUCCIÓN DECF f,d
f-1 d
Ejm:

REG1 =8 0 0 0 0 1 0 0 0
DECF REG1,1

REG1 = 7 0 0 0 0 0 1 1 1
INSTRUCCIÓN INCF f,d
f+1 d
Ejm:

REG1 =15 0 0 0 0 1 1 1 1
INCF REG1,1

REG1 = 16 0 0 0 1 0 0 0 0
INSTRUCCIÓN IORLW k
W OR k W
Ejm:

W =9 0 0 0 0 1 0 0 1
IORLW b’00000111’

W = 9 OR 7 = 15 0 0 0 0 1 1 1 1
INSTRUCCIÓN IORWF f,d
W OR f d
Ejm:

REG1 =6 0 0 0 0 0 1 1 0
W =9 0 0 0 0 1 0 0 1
IORWF REG1,0

REG1 =6 0 0 0 0 0 1 1 0

W = 6 OR 9 = 15 0 0 0 0 1 1 1 1
INSTRUCCIÓN NOP

Ejm: NOP

No hace nada

Se utiliza para crear retarnos muy cortos


INSTRUCCIÓN RLF f,d
C REG1

0 0 1 0 0 1 1 1 1

RLF REG1,1

C REG1

0 1 0 0 1 1 1 1 0
INSTRUCCIÓN RLF f,d
C REG1

0 1 0 0 1 1 1 1 0

RLF REG1,1

C REG1

1 0 0 1 1 1 1 0 0
INSTRUCCIÓN RLF f,d
C REG1

1 0 0 1 1 1 1 0 0

RLF REG1,1

C REG1

0 0 1 1 1 1 0 0 1
INSTRUCCIÓN RRF f,d
C REG1

1 0 0 1 1 1 1 0 0

RRF REG1,1

C REG1

0 1 0 0 1 1 1 1 0
INSTRUCCIÓN SUBLW k
k-W W
EJEMPLO 1:

W=5 0 0 0 0 0 1 0 1
SUBLW .7
C
W=7-5=2 0 0 0 0 0 0 1 0 1 POSITIVO
INSTRUCCIÓN SUBLW k
k-W W
EJEMPLO 2:

W = 15 0 0 0 0 1 1 1 1
SUBLW .15
C
W = 15 - 15 = 0 0 0 0 0 0 0 0 0 1 CERO
INSTRUCCIÓN SUBLW k
k-W W
EJEMPLO 3:

W=4 0 0 0 0 0 1 0 0
SUBLW .3
C
W = 3 - 4 = -1 1 1 1 1 1 1 1 1 0 NEGATIVO
INSTRUCCIÓN SUBWF f,d
f-W W
EJEMPLO 1:

REG1 = 6 0 0 0 0 0 1 1 0
W=1 0 0 0 0 0 0 0 1

SUBWF REG1,1
C
REG1 = 6 - 1 = 5 0 0 0 0 0 1 0 1 1 POSITIVO
INSTRUCCIÓN SUBWF f,d
f-W W
EJEMPLO 1:

REG1 = 7 0 0 0 0 0 1 1 1
W=7 0 0 0 0 0 1 1 1

SUBWF REG1,1
C
W=7-7=0 0 0 0 0 0 0 0 0 1 CERO
INSTRUCCIÓN SUBWF f,d
f-W W
EJEMPLO 1:

REG1 = 10 0 0 0 0 1 0 1 0
W = 12 0 0 0 0 1 1 0 0

SUBWF REG1,1
C
REG1 = 10 - 12 = -2 1 1 1 1 1 1 1 0 0 NEGATIVO
INSTRUCCIÓN SWAPF f,d
f<3:0> d<7:4>
Ejm:
f<7:4> d<3:0>

REG1 0 0 0 0 1 0 0 1
SWAPF REG1,0

W 1 0 0 1 0 0 0 0
INSTRUCCIÓN XORLW k
W XOR k W
Ejm:

W =9 0 0 0 0 1 0 0 1
XORLW b’00000111’

W = 9 XOR 7 = 14 0 0 0 0 1 1 1 0
INSTRUCCIÓN XORWF f,d
W XOR f d
Ejm:

REG1 = 15 0 0 0 0 1 1 1 1

W=6 0 0 0 0 0 1 1 0
XORWF REG1,0

W = 15 XOR 6 = 9 0 0 0 0 1 0 0 1
RUTINAS USUALES
• Poner a CERO varios bits de W sin alterar el resto.

Ejm: Se desea poner a cero los bits 3, 4 y 5 del registro W sin alterar los demás

W 1 0 1 0 1 0 0 1

ANDLW B’11000111’

W 1 0 0 0 0 0 0 1
RUTINAS USUALES
• Poner a UNO varios bits de W sin alterar el resto.

Ejm: Se desea poner a uno los bits 1,2,3 y 4 del registro W sin alterar los demás

W 1 0 1 0 1 0 0 1

IORLW B’00011110’

W 1 0 1 1 1 1 1 1
RUTINAS USUALES
• Detectar si dos registros son iguales y en tal caso llama una subrutina

Ejm: Si REG1 = REG2 llamar la subrutina IGUAL

MOVF REG1,0 ;REG 1 W


REG1 = W 10101001
XORWF REG2,0 ;W = REG2 XOR W

REG2 10101001 BTFSC STATUS,2 ;SI Z = 0 BRINCA

XORWF REG2,0 CALL IGUAL ;Z=1 Y LLAMA


;SUBRUTINA
Z 1 W 00000000 CONTINUA PROGRAMA …
RUTINAS USUALES
• Detectar si un registro es mayor que otro

Ejm: Si REG2 >= REG1 llamar la subrutina MAYOR

MOVF REG1,0 ;REG 1 W


REG1 = W 00000001
SUBWF REG2,0 ;W = REG2 – W(REG1)

REG2 00000111 BTFSS STATUS,0 ;SI C =1 BRINCA

SUBWF REG2,0 CALL MENOR ;C = 0 si REG2<REG1

CALL MAYOR ;C = 1 si REG2>=REG1


C 1 W 00000110
CONTINUA PROGRAMA …
PROGRAMA DE VERIFICACIÓN
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC: 16F84A
;FUNCION: PROGRAMA PARA CORROBORAR EL FUNCIONAMIENTO DE ALGUNAS SUBRUTINAS
;CARACTERISTICAS:
;OSCILLATOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;CODE PROTECT: OFF

INCLUDE "P16F84.Inc"
;**************************** DEFINICION DE REGISTROS ***********************************
CBLOCK .12
REG1, REG2
endc
;****************************************************************************************
org 00
goto INICIO
org 05
INICIO movlw .7 ;W = 7
movwf REG1 ;REG1 = W = 7
movlw .7 ;W = 7
movwf REG2 ;REG2 = W = 7
PROGRAMA DE VERIFICACIÓN
;Subrutina para comprobar igualdades
VERIF_IGUAL movf REG1,0 ;W = REG1
xorwf REG2,0 ;W = REG1 XOR REG2
btfsc STATUS,2 ;Salta si Z = 0
goto IGUAL ;llama Subrutina

;subrutina para comprobar que REG2 es mayor que REG1


COM_REG movf REG1,0 ;W = REG1
subwf REG2,0 ;W = REG2 - REG1
btfss STATUS,0 ;Salta SI C =1 (REG2>=REG1)
goto NO
goto SI

;Subrutina en caso que REG2 >= REG1


SI movlw .2 ;W = 2
movwf REG2 ;REG2 = W = 2
goto COM_REG ;vuelve a comprobar que REG2>=REG1

;Subrutina en caso que REG2 < REG1


NO goto INICIO

;Subrutina en caso que REG1 = REG2


IGUAL movlw .8 ;W = 8
movwf REG2 ;REG2 = W = 8
goto VERIF_IGUAL

end
MOTOR PAP
Mientras que un motor
convencional gira libremente al
aplicarle una tensión, el motor
paso a paso gira un
determinado ángulo de forma
incremental (transforma impulsos
eléctricos en movimientos de giro
controlados), lo que le permite
realizar desplazamientos
angulares fijos muy precisos
(pueden variar desde 1,8º hasta
unos 90º)
MOTOR PAP

Están constituidos esencialmente por dos partes:


• Estator: parte fija construida a base de cavidades en las
que van depositadas las bobinas.
• Rotor: parte móvil construida mediante un imán
permanente. Este conjunto va montado sobre un eje
soportado por dos cojinetes que le permiten girar
libremente.
MOTOR PAP

Al excitar el estator, se crearan los polos N-S, provocando


la variación del campo magnético formado.

La respuesta del rotor será seguir el movimiento de dicho


campo (tenderá a buscar la posición de equilibrio
magnético), es decir, orientará sus polos NORTE-SUR
hacia los polos SUR-NORTE del estator, respectivamente.
SECUENCIAS MOTOR PAP
UNIPOLAR
Paso simple:

Esta secuencia de pasos es


la más simple de todas y
consiste en activar cada
bobina una a una y por
separado, con esta secuencia
de encendido de bobinas no
se obtiene mucha fuerza ya
que solo es una bobina cada
vez la que arrastra y sujeta el
rotor del eje del motor
SECUENCIAS MOTOR PAP
UNIPOLAR
Paso doble:

Con el paso doble activamos


las bobinas de dos en dos
con lo que hacemos un
campo magnético más
potente que atraerá con más
fuerza y retendrá el rotor del
motor en el sitio. Los pasos
también serán algo más
bruscos debidos a que la
acción del campo magnético
es más poderosa que en la
secuencia anterior.
SECUENCIAS MOTOR PAP
UNIPOLAR
Medio Paso:
Combinando los dos
tipos de secuencias
anteriores podemos
hacer mover al motor
en pasos más
pequeños y precisos y
así pues tenemos el
doble de pasos de
movimiento para el
recorrido total de 360º
del motor.
INSTRUCCIÓN GOTO k
0000 H VECTOR RESET
k PC
ETIQUETA = 34h
0004 H VECTOR INTERRUPCIÓN

PC = 11 h
0011 H GOTO ETIQUETA (34H)

0012 H
Goto 34h
ETIQUETA 0034 H
PC = 34 h
CONTINUA PROGRAMA

03FF H
13 0
INSTRUCCIÓN CALL k Y RETURN
0000 H VECTOR RESET
PC+1 Pila
k PC
0004 H VECTOR INTERRUPCIÓN

CALL SUBRUTINA PC = 34 h
0011 H
0012 H CONTINUA PROGRAMA

0012 h
NIVEL 2
0034 H
NIVEL 3
SUBRUTINA .
.
RETURN .
NIVEL 8
03FF H
13 0
INSTRUCCIÓN RETLW k
0000 H VECTOR RESET
Nivel 1 (pila) PC
k W
0004 H VECTOR INTERRUPCIÓN

Funciona igual que el


0011 H CALL SUBRUTINA comando RETURN con la
0012 H CONTINUA PROGRAMA diferencia que carga el
valor del literal “k” en W
0034 H
SUBRUTINA
W = 00000111
RETLW d’7’

03FF H
13 0
PROG. MPAP USANDO TABLAS
;AUTOR: CÉSAR AUGUSTO PEÑA c
;PIC: 16F84A
;FUNCION: Hace girar un motor PAP utilizando tablas (el Mpap se conecta a PORTB)

;CARACTERISTICAS:
;OSCILLATOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;CODE PROTECT: OFF

INCLUDE "P16F84A.Inc"
;*******DEFINICION DE REGISTROS**********************************
CBLOCK .12
REG1, REG2, REG3, MOTOR
ENDC
;*******DEFINICION DE DATOS**************************************
VALOR1 EQU .10
VALOR2 EQU .40
VALOR3 EQU .40

;*******PROGRAMA*************************************************
ORG 00
GOTO INICIO
ORG 05
INICIO bsf STATUS,RP0 ;PASA AL BANCO 1
clrf TRISA ;CONFIGURA PUERTOS COMO SALIDAS
clrf TRISB
bcf STATUS,RP0 ;PASA AL BANCO 0
clrf PORTA
clrf PORTB
PROG. MPAP USANDO TABLAS
CARGAR movlw d'4' ;W = 4
movwf MOTOR
GIRAR movf MOTOR,0 ;W = MOTOR
call TABLA
movwf PORTB ;PORTB = W
call RETARDO
decfsz MOTOR ;MOTOR = MOTOR -1
goto GIRAR
goto CARGAR ;SI MOTOR = 0 LO RECARGA (4)

;*******TABLA DE LA SECUENCIA DEL MOTOR PAP*****************

TABLA addwf PCL,F ; PCL = PCL + W


nop
retlw B'00000001'
retlw B'00000010'
retlw B'00000100'
retlw B'00001000'
PROG. MPAP USANDO TABLAS
;*******SUBRUTINA DE RETARDOS***********************************

RETARDO movlw VALOR1


movwf REG1
TRES movlw VALOR2
movwf REG2
DOS movlw VALOR3
movwf REG3
UNO decfsz REG3,F
goto UNO
decfsz REG2,F
goto DOS
decfsz REG1,F
goto TRES
return

END
INSTRUCCIÓN SLEEP

•La instrucción SLEEP introduce al procesador en un modo


de funcionamiento que se llama de reposo o de bajo
consumo.

•Detiene al oscilador y el procesador queda congelado, no


ejecutando instrucciones y manteniendo el mismo valor en
los puertos.

•Pone los bits PD# = 0 y TO# = 1.

•Borra el perro guardián y al divisor de frecuencia


INTERRUPCIONES
0000 H VECTOR RESET

0004 H VECTOR INTERRUPCIÓN

TRATAMIENTO
INTERRUPCIÓN

RETFIE

0012 H INICIO

0034 H

PROGRAMA

03FF H
13 0
CAUSAS DE INTERRUPCIONES

• Activación de la patita RB0/INT


• Cambio de estado de uno de los pines
RB<4:7> del puerto B
• Desbordamiento del temporizador TMR0
• Finalización de la escritura en la EEPROM
de datos
REGISTRO DE CONTROL DE
INTERRUPCIONES INTCON
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
GIE: Permiso global de interrupciones
1 – Permite la ejecución de todas las interrupciones, cuyos bits de permiso
individuales también las permitan.
0 – Prohíbe todas las interrupciones.

EEIE: Permiso de interrupción por fin de la escritura de la EEPROM de datos


1 – Permite la Interrupción cuando finaliza la escritura de la EEPROM
0 – No permite esta interrupción.

T0IE: Permiso de interrupción por sobrepasamiento del TMR0


1 – Permite interrupción al sobrepasarse el TMR0
0 – No permite esta interrupción.

INTE: Permiso de interrupción por activación de la patita RB0/INT


1 – Permite interrupción al activarse RB0/INT
0 – No permite esta interrupción.
REGISTRO DE CONTROL DE
INTERRUPCIONES INTCON

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF


T0IF: Señalizador de sobrepasamiento del TMR0
1 – Se pone en 1 cuando ha ocurrido sobrepasamiento
0 – El TMR0 no se ha sobrepasado

INTF: Señalizador de activación de la patita RB0/INT


1 – Se pone en 1 al activarse RB0/INT
0 – Indica que RB0/INT aún no se ha activado

RBIF: Señalizador de cambio de estado en las patitas RB<7:4>


1 – Se pone en 1 cuando cambia de estado alguno de estos pines
0 – No han cambiado de estados ninguno de los pine RB<7:4>
INTERRUPCIÓN EXTERNA INT

Se utiliza para realizar subrutinas que necesiten ejecutarse inmediatamente.

Para llamar esta subrutina de interrupción es necesario activar el pin


RB0/INT por medio de un flanco ascendente o descendente.

Si se desea trabajar con un flanco ascendente es necesario poner en 1 el bit


INTDEG del registro OPTION y en caso contrario se pone un 0.

Para que esta interrupción pueda activarse es necesario poner en 1 los bit
GIE e INTE del registro INTCON

1 x x 1 x 0 0 0
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
PROG. INTERRUPCIÓN RB0/INT
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC: 16F84A
;FUNCION: USA INTERRUPCIONES (RB0), SI OCURRE UN FLANCO DE BAJADA EN EL PIN RB0
;APAGA UN LED PUESTO EN RA0 DURANTE UN SEGUNDO Y VUELVE A DEJARLO PRENDIDO

;CARACTERISTICAS:
;OSCILADOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;CODE PROTECT: OFF

INCLUDE "P16F84A.Inc"

;**************************** DEFINICION DE REGISTROS ***********************************


CBLOCK .12
reg1,reg2,reg3
endc

;**************************** DEFINICION DE DATOS ****************************


valor1 equ d'8' ;DATOS PARA REATRDO DE 1 SEGUNDO
valor2 equ d'195'
valor3 equ d'212'

LED equ 0 ;pin de entrada del interruptor


PROG. INTERRUPCIÓN RB0/INT
org 00
goto inicio
;********************** TRATAMIENTO DE INTERRUPCIONES************************************
ORG 04 ;ZONA DE TRATAMIENTO DE INTERRUPCIONES
btfss INTCON,INTF
goto NADA
bcf PORTA,LED
call RETARDO
bsf PORTA,LED
NADA bcf INTCON,INTF
retfie
;_________________________________________________________________________________

inicio bsf STATUS,RP0 ;PASA A BANCO 1


movlw b'00000000' ;CONFIGURA LOS PUERTOS
movwf TRISA
movlw b'00000001'
movwf TRISB
bcf OPTION_REG,NOT_RBPU ;RESISTENCIAS PULL-UP ACTIVAS
bcf OPTION_REG,INTEDG ;FLANCO DE BAJADA DE RB0
bcf STATUS,RP0 ;VUELVE A BANCO 0
clrf PORTA
clrf PORTB
PROG. INTERRUPCIÓN RB0/INT
bsf INTCON,INTE ;ACTIVA INTERRUPCION POR RP0
bsf INTCON,GIE ;ACTIVA INTERRUPCIONES GLOBALES
bcf INTCON,INTF ;PONE EN BAJO LA BANDERA DE INTERRUPCIONES POR RP0

ciclo bsf PORTA,LED


sleep
goto ciclo

;***********************subrutina para retardos***************

RETARDO movlw valor1 ;retardo de bit y medio


movwf reg1
tres movlw valor2
movwf reg2
dos movlw valor3
movwf reg3
uno decfsz reg3,f
goto uno
decfsz reg2,f
goto dos
decfsz reg1,f
goto tres
return
end
PROG. INTERRUPCIÓN RB<7:4>
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC:16F84A
;FUNCION: USA INTERRUPCIONES (RB<7:4>), SI OCURRE UN CAMBIO EN ALGUN PIN RB<7:4>
;APAGA UN LED PUESTO EN RA0 DURANTE UN SEGUNDO Y VUELVE A DEJARLO PRENDIDO

;CARACTERISTICAS:
;OSCILADOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;CODE PROTECT: OFF

INCLUDE "P16F84A.Inc"
;**************************** DEFINICION DE REGISTROS ***********************************
CBLOCK .12
reg1,reg2,reg3
endc
;**************************** DEFINICION DE DATOS ****************************
valor1 equ d'8' ;DATOS PARA REATRDO DE 1 SEGUNDO
valor2 equ d'195'
valor3 equ d'212'
LED equ 0 ;pin de entrada del interruptor
PROG. INTERRUPCIÓN RB<7:4>
org 00
goto inicio
;********************** TRATAMIENTO DE INTERRUPCIONES************************************
ORG 04 ;ZONA DE TRATAMIENTO DE INTERRUPCIONES
btfss INTCON,RBIF
goto NADA
bcf PORTA,LED
call RETARDO
bsf PORTA,LED
NADA bcf INTCON,RBIF
retfie
;_________________________________________________________________________________________

inicio bsf STATUS,RP0 ;PASA A BANCO 1


movlw b'00000000' ;CONFIGURA LOS PUERTOS
movwf TRISA
movlw b'11110000'
movwf TRISB
bcf OPTION_REG,NOT_RBPU ;RESISTENCIAS PULL-UP ACTIVAS
bcf STATUS,RP0 ;VUELVE A BANCO 0
clrf PORTA
clrf PORTB
PROG. INTERRUPCIÓN RB<7:4>
bsf INTCON,RBIE ;ACTIVA INTERRUPCION POR CAMBIO EN EL PORTB
bsf INTCON,GIE ;ACTIVA INTERRUPCIONES GLOBALES
bcf INTCON,RBIF ;PONE EN BAJO LA BANDERA DE INTERRUPCIONES POR
;CAMBIO EN PORTB

ciclo bsf PORTA,LED


movf PORTB,W ;TENER COMO BASE PARA COMPARAR EL CAMBIO EN SUS PINES
sleep
goto ciclo
;***********************subrutina para retardos***************
RETARDO movlw valor1 ;retardo de bit y medio
movwf reg1
tres movlw valor2
movwf reg2
dos movlw valor3
movwf reg3
uno decfsz reg3,f
goto uno
decfsz reg2,f
goto dos
decfsz reg1,f
goto tres
return
end

Você também pode gostar