Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Instrucciones en Un Microcontrolador
Instrucciones en Un Microcontrolador
• Formato general C
R
O
• Ciclo de instrucción C
O
N
• Modos de dirección T
R
•
O
Instrucciones orientadas a byte L
A
• MOVF f, d M
I
código: 00 1000 dfff ffff C
R
O
0peración: f → destino, actualiza bandera Z C
O
N
• si d=0 entonces: f → w T
si d=1 entonces: f → f, en este caso se utiliza para saber si el R
contenido de f es cero. O
L
• En estas instrucciones f representa un registro SFR (ej: PORTA) A
D
o el nombre de una variable RAM (TEMP1), que sirve como O
operando fuente o destino. R
• d representa al operando destino: si d=0 el destino es el E
S
registro W, si d=1 el destino es el file f especificado en la
instrucción.
Instrucciones orientadas a BYTE registros
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Formato general: instrucciones de bit
13 10 9 8 7 6 0
M
Código de operación b9b8b7 f (dirección) I
C
R
O
C
O
bbb es el número en binario del bit N
T
f es la dirección de 7 bits del registro R
O
L
A
D
O
R
E
S
Instrucciones orientadas a bit: Ejemplo
• BSF f, b M
I
código: 01 01bb bfff ffff C
R
operación: 1 → bit (bbb) de f O
C
O
N
• Así: BSF f, 5 realiza 1 → f5. T
R
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Formato general: instrucciones de literales
13 8 7 0
M
Código de operación Literal k I
C
R
O
C
O
k es un valor inmediato o constante de 8 bits N
T
En la mayoría de las instrucciones k representa un dato de 8 bits. R
O
L
A
D
O
R
E
S
Formato general: instrucciones de control
• Instrucciones CALL y GOTO solamente: k es un valor M
inmediato o constante de 11 bits. I
C
R
O
13 11 10 0 C
O
Código de operación Literal k (11 bits) N
T
R
O
L
A
D
O
R
E
S
Instrucciones de literales y de control
• En estas instrucciones “k” representa una constante de 8 u 11
M
bits, llamada literal. I
• XORLW k C
R
código: 11 1010 kkkk kkkk O
operación: W kkkkkkkk → W C
Así: XORLW 32, entonces O
W 00100000 → W N
T
• En la mayoría de estas instrucciones como XORLW k, donde “k” R
es un byte, éste es un dato. O
L
• GOTO k A
código: 101kkk kkkk kkkk D
operación: PC12PC11 kkkkkkkkkkk → PC O
R
• En las instrucciones de control como GOTO k, el literal k de 11 E
bits se usa para hallar una dirección. S
Instrucciones orientadas a literales y control
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Ciclo de instrucción
• Como ya se ha dicho debido a la tubería y al M
I
solapamiento de la fase de ejecución de una C
R
instrucción con la fase de búsqueda de la siguiente, O
C
la mayoría de las instrucciones de los PIC demoran O
N
un ciclo de instrucción. T
R
• La excepción son las instrucciones de salto o O
L
ramificación, donde al no poder solapar su ejecución A
D
con la búsqueda de la siguiente, son necesarios los O
R
dos ciclos de instrucción. E
S
Ciclo de Instrucción de los PIC
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Ciclo de Instrucción de los PIC
• El ciclo de instrucción demora cuatro ciclos de reloj que de acuerdo al
gráfico anterior siendo Q1=Q2=Q3=Q4 se obtiene: M
CI=Ciclo de Instrucción=4Q=4Tosc I
C
R
Donde: Tosc = 1/fosc O
C
EJEMPLOS: O
N
T
PARA fosc= 4 MHz: R
O
CI =4Q= 4Tosc = 4(1/4MHz) = 1 µseg L
A
D
Para fosc = 20 MHz → O
R
CI = 4Q=4Tosc = 4x 1/20MHz = 0.2 useg = 200 ns E
S
Instrucciones por Grupos
M
• Para su mejor estudio vamos a dividirlas en los grupos siguientes: I
C
R
1- Limpiar/mover
O
2- Incremento/decremento/complemento C
3- Suma/Resta O
4- Lógicas N
T
5- Manipulación de un solo bit y saltos condicionales R
6- goto/call/return/return from interrupt O
7- Miscelánea L
A
D
O
R
E
S
Instrucciones Limpiar/mover
M
• CLRW I
• CLRF TEMP1 C
R
• MOVLW D ´10´ O
C
• MOVWF TEMP1 O
• MOVF TEMP1, W N
T
• MOVF TEMP1, F R
• SWAPF TEMP1, F O
L
• SWAPF TEMP1, W A
D
O
R
E
S
Incremento/Decremento/Complemento
M
• INCF TEMP1, F I
C
• INCF TEMP1, W R
O
• DECF TEMP1, F C
• DECF TEMP1, W O
N
• COMF TEMP1, F T
R
• COMF TEMP1, W O
L
A
D
O
R
E
S
Suma/Resta
M
• ADDLW 5 I
• ADDWF TEMP1, F C
R
• ADDWF TEMP1, W O
C
• SUBLW 5 ;W ← 5 - W O
N
• SUBWF TEMP1, F ; TEMP1 ← TEMP1-W T
• SUBWF TEMP1, W ; W ← TEMP1 - W R
O
L
A
D
O
R
E
S
Instrucciones Lógicas
• ANDLW B ´00000111´
• ANDWF TEMP1, F M
I
• ANDWF TEMP1, W C
• IORLW B ´00000111´ R
• IORWF TEMP1, F O
C
• IORWF TEMP1, W O
• XORLW B ´00000111´ N
T
• XORWF TEMP1, F R
• XORWF TEMP1, W O
L
• RLF TEMP1, F A
• RLF TEMP1, W D
• RRF TEMP1, F O
R
• RRF TEMP1, W E
S
Manipulación de un solo bit / saltos
condicionales
M
I
• BCF PORTB, 0 C
• BSF STATUS, C R
O
• BCF TEMP1, 5 C
• BTFSC TEMP1, 3 O
N
• BTFSS TEMP1, 3 T
• DECFSZ TEMP1, F R
O
• DECFSZ TEMP1, W L
A
• INCFSZ TEMP1, F D
• INCFSZ TEMP1, W O
R
E
S
GOTO-CALL-RETURN-
RETURN FROM INTERRUPT
M
I
• GOTO ALLI ; salto a una etiqueta C
• CALL TAREA1 ; llamado a una subrutina R
O
• RETURN ; para retornar de una subrutina C
O
• RETLW 5 ; carga el literal 5 en w retornando del N
T
; llamado a una subrutina R
O
L
• RETFIE ; sirve para retornar de una A
; interrupción D
O
R
E
S
Miscelánea
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Instrucciones orientadas a BYTE de registros
ADDWF: Suma W y f
Suma el contenido del registro ‘W’ y el registro ‘f’. Si “d” es 0, el resultado se
almacena en el registro W. Si ‘d’ es 1 el resultado se almacena en el registro ‘f’.
Sintaxis: [etiqueta] ADDWF f,d
Operación: (W) + (f) –> (destino) M
I
Flags afectados: C, DC, Z C
Ejemplo: ADDWF REG,1 R
Antes de la instrucción: W=0×03, REG=0×04 O
C
Después de la instrucción: W=0×03, REG=0×07
O
ANDWF: W AND f N
Realiza la operación lógica AND entre el registro W y el registro “f”. Si “d” es 0 el T
resultado se almacena en el registro W. Si “d” es 1, el resultado se almacena en R
O
el registro “f”. L
Sintaxis: [etiqueta] ANDWF f,d A
Operación: (W) AND (f) –> (destino) D
O
Flags afectados: Z
R
Ejemplo: ANDWF REG,1 E
Antes de la instrucción: W=0×17, REG= 0xC2 S
Después de la instrucción: W=0×17, REG= 0×02
Instrucciones orientadas a BYTE registros
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Instrucciones orientadas a BIT
BCF: Borra un bit
Borra el bit ‘b’del registro ‘f’
Sintaxis: [etiqueta] BCF f,b
Ejemplo: BCF REG,0
Antes de la instrucción: REG=b’01101101′ M
Después de la instrucción: REG=b’01101100′ I
BSF: Activa un bit C
R
Activa el bit ‘b’ del registro ‘f’ O
Sintaxis: [etiqueta] BSF f,b C
Ejemplo: BSF REG,2 O
N
Antes de la instrucción: REG=b’01001001′ T
Después de la instrucción: REG=b’01001011′ R
BTFSC: Checa un bit y salta si es 0 O
Si el bit “b” del registro “f” es 0, se salta una instrucción y se continúa con la L
A
ejecución. D
Sintaxis: [etiqueta] BTFSC f,b O
BTFSS: Checa un bit y salta si es 1 R
E
Si el bit “b” del registro “f” es 1, se salta una instrucción y se continúa con la S
ejecución.
Sintaxis: [etiqueta] BTFSS f,b
Instrucciones orientadas a literales y control
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Instrucciones orientadas a constantes y de control
IORLW: W OR literal
Se realiza la función lógica OR entre el registro W y la contante “k”.
El resultado se almacena en el registro W.
Sintaxis: [etiqueta] IORLW k
M
Flags afectados: Z I
Ejemplo: IORLW Ox35 C
Antes de la instrucción: W=0x9A R
Después de la instrucción: W=0xBF O
C
MOVLW: Carga un literal en W O
El registro W se carga con el valor de 8 bits expresado mediante la N
literal “k”. T
R
Sintaxis: [etiqueta] MOVLW k O
Ejemplo: MOVLW 0x5A L
Después de la instrucción: W=0x5A A
RETURN: Regresa de una subrutina D
O
El programa regresa de la subrutina y ejecuta la instruccion que R
sigue a CALL E
Sintaxis: [etiqueta] RETURN S
Instrucciones orientadas a constantes y de control
2- Direccionamiento directo R
O
L
3- Direccionamiento indirecto A
D
O
R
E
S
Direccionamiento inmediato
Ocurre en instrucciones con literales que forman parte de la instrucción.
Es decir que el dato se encuentra en la misma instrucción. En el código M
de máquina está embebido el dato. I
C
Direccionamiento directo R
O
C
Ocurre en las instrucciones que contienen la dirección del dato O
N
requerido. En el código de máquina está embebido la dirección del dato. T
R
O
Direccionamiento indirecto L
A
D
O
Ocurre cuando en la instrucción se tiene una operación con el registro R
INDF, lo cual indica que el valor del dato se encuentra en la dirección E
S
guardada en el registro FSR (7-BITS menos significativos).
Direccionamiento Directo e Indirecto
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Ejemplo de instrucciones con
Direccionamiento Directo
• Con el direccionamiento directo el cual es lógico y claro por sí M
mismo, es suficiente direccionar un registro para leerlo. I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
Direccionamiento Indirecto
M
I
• El microcontrolador 16F887 es además capaz de direccionamiento indirecto C
por medio de los registros INDF y FSR. Algunas veces el direccionamiento R
indirecto simplifica considerablemente la escritura de un programa. O
C
O
• El direccionamiento indirecto emplea el registro INDF, el cual, no es un N
registro verdadero (físicamente no existe), solamente especifica el registro T
apuntado por el registro FSR. Debido a esto la lectura/escritura sobre el R
registro INDF significa la lectura/escritura del registro apuntado por el O
registro FSR. En otras palabras en el registro FSR se especifican las direcciones L
de los registros apuntados y en INDF se colocan sus valores. A
D
• Las diferencias entre direccionamiento directo e indirecto se especifican en la O
siguiente diapositiva. R
E
S
Ejemplo de instrucciones con INDF
M
• MOVWF INDF I
C
Antes: (W)=2A (FSR)=14 ((FSR))=? R
O
Después (W)=2A (FSR)=14 ((FSR))=2ª C
O
N
T
• MOVF INDF, W R
O
Antes: (W)=? (FSR)=14 ((FSR))=B2 L
A
Después (W)=B2 (FSR)=14 ((FSR))=B2 D
O
R
E
S
Ejemplo de Direccionamiento
Indirecto
• Programa que limpia las localidades de la RAM M
desde la posición 20H hasta 2FH. I
C
R
O
BCF STATUS, IRP C
O
MOVLW 0X20 N
MOVWF FSR T
R
NEXT CLRF INDF O
INCF FSR, F L
A
BTFSS FSR, 4 D
GOTO NEXT O
R
CONTINUE XXXX E
XXXX S
Diferencias entre Direccionamiento Directo y Direccionamiento Indirecto
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S
2.3 Registros de Trabajo
M
•
D
PCON O
M
ULPWUE – Bit habilitador de Ultra Low-Power Wake-up I
C
1 – Habilitador de Ultra low Power Power Wake-up. R
0 - Deshabilitador de Ultra low Power Power Wake-up. O
SBOREN - Bit habilitador de Software BOR Enable C
1 - Habilitador de Brown-out Reset. O
N
0 - Deshabilitador de Brown-out Reset. T
POR – Bit de Power-on Reset R
1 – Cuando no ha ocurrido POR O
L
0 - Cuando ha ocurrido POR. Este bit tiene que ser seteado por software A
BOR - Bit de Brown-out Reset D
1 - Cuando no ha ocurrido un Brown-out Reset O
0 - Cuando ha ocurrido un Brown-out Reset . Este bit debe de ser seteado por R
E
software luego de un BOR, S
Contador de Programa PC: Compuesto por los Registros PCL y PCLATH
M
• El tamaño de la memoria ROM del microcontrolador es de 8K. Es decir 8.192 posiciones para I
almacenar programas. Por esta razón el contador de programa debe ser de 13 bits de ancho C
(2^13 = 8192), conformado por 8 bits del registro PCL y 5 bits del registro PCLATH. R
O
• El contador del programa cuenta normalmente hasta 2K por esta razón la memoria ROM se
C
divide en cuatro páginas de 2K. Para saltar entre páginas es necesario programar los bits 4 y 5 O
de PCLATH (que son los indicadores de página). N
• En llamadas a subrutinas o ejecuciones de saltos (instrucciones CALL y GOTO), el T
microcontrolador es capaz de proveer solo 11-bits de direccionamiento. Por esta razón en R
forma similar a la memoria RAM dividida en “bancos”, la memoria “ROM” se divide en cuatro O
L
páginas de 2K cada una. Las instrucciones ejecutadas dentro de una página no tienen
A
problema pero para saltar entre páginas es necesario programar los bits 4 y 3 de PCLATH (que D
son los indicadores de página) como se observa en la próxima diapositiva. Cuando las O
subrutinas alcanzan las instrucciones RETURN, RETLW o RETFIE retornan al programa principal R
y el microcontrolador simplemente continúa con la ejecución del programa a partir de la E
dirección almacenada en la PILA o STACK S
M
I
C
R
O
C
O
N
T
R
O
L
A
D
O
R
E
S