El documento describe las herramientas de programación para microcontroladores. Explica instrucciones para manipular bits, explorar y probar bits, y el estado del registro. También cubre temas como seleccionar bancos de registros, configurar puertos como entrada o salida, leer y escribir valores en puertos, y tomar decisiones basadas en condiciones internas o externas.
2. INSTRUCCIONES DE
MANIPULACIÓN DE BITS
• BCF F,B (Poner a Cero al Bit B del registro F)
– Ejemplo: bcf Datox,5
– Datox= E4H
• BSF F,B (Poner a Uno al Bit B del registro F)
– Ejemplo: bsf Datox,3
– Datox= C8H
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
3. INSTRUCCIONES DE
EXPLORACIÓN/TESTEO DE BITS
• BTFSS F,B (Pregunta si el bit B del registro F vale uno)
• (Bit Test File Skip Set)
– Ejemplo: btfss suma,2
goto RutinaA
goto RutinaB
• BTFSC F,B (Pregunta si el bit B del Registro F vale cero)
• (Bit Test File Skip Clear)
– Ejemplo: btfsc suma,5
goto RutinaA
goto RutinaB
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
4. STATUS
7
(L/E)
6 (L/E) 5 (L/E) 4 (L) 3 (L) 2 (L/E) 1 (L/E) 0 (L/E)
IRP RP1 RP0 TO PD Z DC C
C. Bit de acarreo en el bit MSB
Vale 1 cuando en el resultado de una operación aritmética, se ha producido una acarreo (suma)
Vale 0 si no se ha producido un acarreo.
Para el caso de una resta, ocurre todo lo contrario a lo expuesto:
Vale 1 si no se ha producido un "préstamo"
Vale 0 si se ha producido un "préstamo"
DC. Acarreo en el cuarto bit (Nibble bajo). Misma descripción de C, pero referida al cuarto bit.
Z. Cero.
Vale 1 si el resultado de una operación lógico - aritmética es cero
Vale 0 si el resultado de una operación lógico- aritmética NO es cero
IRP. Bit para direccionamiento indirecto de los bancos de datos.
RP1 - RP0. Bits para direccionamiento directo de los bancos de datos.
1 - 1 : Banco 3
1 -0 : Banco 2
0 - 1 : Banco 1
0 - 0 : Banco 0
TO. Time Out
Se pone a 1 después de la conexión de la alimentación al microcontrolador, o al ejecutarse las
instrucciones clrwdt ó sleep
Se pone a 0 cuando el perro guardián se ha desbordado.
PD. Power Down
Se pone a 1 después de la conexión de la alimentación al microcontrolador o al ejecutarse la
instrucción clrwdt
Se pone a 0 mediante la ejecución de la instrucción sleep
5. RESULTADO DE OPERACIONES
LÓGICO/ARITMÉTICAS
• ¿Cómo hacemos para saber si la suma de dos registros ha producido
acarreo?
R= Se suman los dos registros y se pregunta por el bit c del registro
STATUS:
movf DatoA,0 ;DatoA W→
addwf DatoB,0 ;DatoA+DatoB W→
btfss STATUS,0 ; C=1?
goto Noacarreo
goto Acarreo
• ¿Cómo sabemos si la suma de dos nibbles (4 bits) ha producido
acarreo?
R= Se suman los dos registros y se pregunta por el bit DC del Registro
STATUS:
movf DatoA,0 ;DatoA W→
addwf DatoB,0 ;DatoA+DatoB W→
btfss STATUS,1 ; DC=1?
goto Noacarreo
goto Acarreo
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
6. RESULTADO DE OPERACIONES
LÓGICO/ARITMÉTICAS
• ¿Cómo sabemos si un registro es igual a otro?
• Opción A: Se restan ambos registros y se pregunta si Z es igual
a 1:
movf DatoB,0 ;DatoB W→
subwf DatoA,0 ;DatoA – DatoB W→
btfss STATUS,2
goto NOIGUAL
goto IGUAL
• Opción B: Se aplica XOR entre ambos registros y:
movf DatoB,0 ;DatoB W→
xorwf DatoA,0 ;DatoA (XOR) DatoB W→
btfss STATUS,2
goto NOIGUAL
goto IGUAL
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
7. RESULTADO DE OPERACIONES
LÓGICO/ARITMÉTICAS
• ¿Cómo sabemos si un registro es mayor, igual o menor a
otro?
R= Se restan ambos registros (A – B) y:
movf DatoB,0 ;DatoB W→
subwf DatoA,0 ;DatoA-DatoB W→
EXPLORA btfss STATUS,2 ; Z=1?
goto SIGUE
goto IGUAL ;Si Z=1, A=B
SIGUE btfsc STATUS,0 ;C=0?
goto MAYOR ; Si C=1, A>B
goto MENOR ; Si C=0, A<B
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
8. SELECCIONANDO LOS BANCOS DE
REGISTROS
• El PIC 16F84 posee solamente dos (2)
bancos de Registros, por lo que para
seleccionar el banco deseado, basta con
manipular el bit RP0 del registro STATUS.
• Si RP0= 1, se ha seleccionado el banco 1
• Si RPO= 0, se ha seleccionado el banco 0
• Ejemplo: Seleccione el banco de registros
1:
– bsf STATUS,5 ; RP0= 1
• Seleccione el banco de registros 0:
– bcf STATUS,5 ; RP0=0
Así de sencillo es seleccionar los bancos de
registros.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
9. CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
1. Se selecciona el banco 1
• Aquí se encuentran los registros que manipulan mediante software a
los circuitos triestados que determinan que un pin o puerto trabaje
como entrada o salida.
2. Se configuran mediante los registros asociados a los puertos
(TRISA y TRISB), los pines de un puerto como entrada o
salida.
• Si coloco un uno (1) en un bit asociado a un puerto (RA0, RA1, RB5,
RB7,etc), éste se comportará como una entrada y solamente
podremos leer por esta entrada.
• Si coloco un cero (0) en un bit asociado a un puerto, éste se
comportará como una salida y solamente podremos escribir por esta
entrada.
• Podemos hacer analogía de la siguiente forma:
1 = In = Entrada = Solo lectura
0 = Out = Salida = Solo escritura
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
10. CONFIGURANDO UN PUERTO
La configuración de puertos es muy fácil:
3. Se selecciona o se regresa al banco 0, para trabajar con los
puertos que han sido previamente configurados.
• Si un puerto (o pin) ha sido configurado como salida, entonces se
podrá escribir sobre él, para sacar datos.
• Si un puerto (o pin) ha sido configurado como entrada, entonces se
podrá leer los datos que están ingresando por él.
• Nota: Escribir sobre un puerto (o pin) configurado como entrada,
no tiene ningún efecto. Si se desea escribir sobre él, es necesario
que el mismo sea habilitado como salida.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
11. CONFIGURANDO UN PUERTO COMO
ENTRADA/SALIDA (POR BYTE)
Recordemos los tres pasos:
• Por Byte:
A) bsf STATUS, 5 ; (1) Selección de banco 1
movlw FFH ; B’11111111’
movwf TRISB ; (2) Todos los bits del puertoB están
; configurados como entradas
bcf STATUS,5 ; (3) Se regresa al banco 0
B) bsf STATUS, 5 ; (1) Selección de banco 1
movlw 00H ; B’00000000’
movwf TRISA ; (2) Todos los bits del puertoA están
; configurados como salidas
bcf STATUS,5 ; (3) Se regresa al banco 0
C) bsf STATUS, 5 ; (1) Selección de banco 1
movlw B’10010001 ; B’ESSESSSE’
movwf TRISB ; (2) Mixto E/S en un mismo puerto
bcf STATUS,5 ; (3) Se regresa al banco 0
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
12. CONFIGURANDO UN PUERTO COMO
ENTRADA/SALIDA (BIT A BIT)
Recordemos los tres pasos:
• Bit a bit:
bsf STATUS,5 ; (1) Selección de Banco 1
bsf PuertoA,1 ; (2) ¿Salida o Entrada?
bcf PuertoA,2 ; (2) ¿Salida o Entrada?
bsf PuertoA,3 ; (2) ¿Salida o Entrada?
bcf PuertoB,0 ; (2) ¿Salida o Entrada?
bcf PuertoB,2 ; (2) ¿Salida o Entrada?
bcf PuertoB,3 ; (2) ¿Salida o Entrada?
bsf PuertoB,5 ; (2) ¿Salida o Entrada?
bcf PuertoB,7 ; (2) ¿Salida o Entrada?
bcf STATUS,5 ; (3) Se regresa al banco 0
Nota: Estamos asumiendo que en este ejemplo hemos etiquetado
previamente a 05H como PuertoA y 06H como PuertoB.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
13. ESCRIBIR Y LEER SOBRE UN PUERTO
• Para configurarlos como entradas y/o salidas, debemos de estar en el banco 1.
Una vez configurados, para poder leer y/o escribir sobre estos, debemos de
cambiarnos al banco 0.
• Ejemplo. Realice un programa que configure al Puerto A como entrada y a los
primeros cuatro bits del Puerto B como salida, los restantes bits del puerto B
como entrada.
STATUS equ 03H ; A esta parte se le conoce como zona de
; etiquetas o declaración de etiquetas.
PuertoA equ 05H ; También se puede usar la directiva
; INCLUDE
PuertoB equ 06H ; Y se obvian estas declaraciones
bsf STATUS,5 ; Hemos cambiado al banco 1, para configurar
; los puertos
movlw 1FH
movwf PuertoA ; Hemos configurado al PuertoA como entrada
movlw b'11110000'
movwf PuertoB ; Nibble bajo como salida y nibble alto como
; entrada
bcf STATUS,5 ; Cambiamos al banco 0 para poder leer ó
; escribir en estos, según sea el caso.
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
14. REGISTROS ASOCIADOS A LOS
PUERTOS
• De configuración:
– TRISA (85H, Banco 1)
– TRISB (86H, Banco 1)
• De Trabajo (Lectura/Escritura)
– PORTA (05H, Banco 0)
– PORTB (06H, Banco 0)
• PORTA y PORTB, son registros de Lectura/Escritura, como
cualquier otro registro de propósito general, sólo que están
directamente vinculados a los puertos del microcontrolador.
• Por lo tanto su Lectura/Escritura NO difiere de la de cualquier
otro registro
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
15. LEER Y/O ESCRIBIR EL UN VALOR
EN UN PUERTO
• Ejemplo 1. Lea el valor presente en el puerto A y guárdelo en un
Registro DatoA.
movf PORTA,0 ; PORTA W→
movwf DatoA ; W DatoA→
• Ejemplo 2. Escriba sobre el puerto B el siguiente valor: 49H
movlw 49H ; 49H W→
movwf PORTB ; W PORTB→
• Ejemplo 3. Active el bit RB0, desactive el bit RB1 y active el bit
RA4:
bsf PORTB,0 ; RB0= 1
bcf PORTB,1 ; RB1= 0
bsf PORTA,4 ; RA4= 1
IUT Cumaná
Prof. Luis ZuritaMicrocontroladores
16. • Según el ejemplo 3, planteado
anteriormente;
¿Qué Efectos se tiene sobre el
siguiente circuito?
LEER Y/O ESCRIBIR EL UN VALOR
EN UN PUERTO
• ¿Qué Efectos se tiene sobre el circuito
si se aplican las siguientes
instrucciones?
movlw B’00000001’
movwf PORTB
• ¿Qué Efectos se tiene sobre el
siguiente circuito si se aplican estas
siguientes instrucciones?
bcf PORTA,0
bsf PORTA,1
bcf PORTA,2
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
17. • Para el siguiente circuito,
¿Qué valor debemos
colocar en puerto B para
que se visualice un 7 en el
display?
LEER Y/O ESCRIBIR EL UN VALOR
EN UN PUERTO
• ¿Cómo hacemos para saber el
valor del bit RA0?
Basta con explorar su estado
lógico mediante alguna de las
instrucciones de testeo y/o
exploración: btfss f,b ó btfsc
f,b:
btfss PORTA,0
goto RutinA
goto RutinB
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
18. TOMA DE DECISIONES
• Una Tarea.
La condición puede venir
internamente como
externamente.
Condición
X=1?
Proceso A
NO
SI
• Interna
btfss STATUS,0 ; C=1?
goto ProcesoA
goto SIGUE
• Externa
btfss PORTA,0 ; RA0=1?
goto ProcesoA
goto SIGUE
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
19. TOMA DE DECISIONES
• Dos Tareas.
La condición puede venir
internamente como
externamente.
• Interna
btfss STATUS,0 ; C=1?
goto ProcesoA
goto ProcesoB
• Externa
btfss PORTA,0 ; RA0=1?
goto ProcesoA
goto ProcesoB
Condición
X=1?
Proceso A
NO
SI
Proceso B
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
20. • Dado el siguiente circuito, Active el LED
ubicado en RB0 si RA0, vale 0 y en caso
contrario, active el LED ubicado en RB1.
TOMA DE DECISIONES. EJEMPLO
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
21. TOMA DE DECISIONES. EJEMPLO
• Externa
btfss PORTA,0 ; RA0=1?
goto ProcesoA
goto ProcesoB
ProcesoA bsf PORTB,0
goto SIGUE
ProcesoB bcf PORTB,1
goto SIGUE
SIGUE ------
------
------
RA0=1?
Activar LED en
RB0
NO
SI
Activar LED en
RB1
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
22. TOMA DE DECISIONES. CERROJO Ó
VALIDACIÓN
• Se queda esperando que
la condición ocurra.
• Interna
ESPERA btfss INTCON,0
goto ESPERA
goto ProcesoA
• Externa
EXPLORA btfss PORTA,0 ; RA0=1?
goto EXPLORA
goto ProcesoA
Condición
X=1?
Proceso A
NO
SI
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
23. TOMA DE DECISIONES
• Multitareas.
Dos condiciones permiten
elegir entre uno a cuatro
procesos distintos.
Condición
X=1?
NO
SI
Proceso B
Condición
Y=1?
NO
SI
Condición
Y=1?
Proceso D
Proceso A
Proceso C
SI
NO
IUT Cumaná
Prof. Luis Zurita
Microcontroladores
24. ¿Cómo pasar del diagrama de flujo al
programa?
• Es sencillo:
– Cada símbolo del diagrama de flujo representa una (ó varias)
instrucción (es).
– El programador/Diseñador, mediante la práctica y/o visualización,
debe buscar las instrucciones que cumplan con los símbolos y su
contenido, e ir colocándolas secuencialmente, según lo indique el
diagrama de flujo previamente elaborado.
CARGA movlw 35H
movwf SUMA
btfss STATUS,2
goto ProcesoA
goto Carga
35H SUMA→
Z=1?
ProcesoA
NO
SI
IUT Cumaná
Prof. Luis Zurita