Documente Academic
Documente Profesional
Documente Cultură
MICROPROGRAMABLES
Tcnicas de
programacin
10.2
Movimiento de datos
El juego de instrucciones reducido, y su tamao de 14 bits,
hacen que el PIC16F84A tenga una serie de restricciones. Por
un lado no se pueden especificar dos registros dentro de una
instruccin. Cada registro necesita 7 bits para especificar la
direccin, pero tambin hay que especificar el cdigo de la
instruccin y qu hacer con ella. La solucin es realizar todo a
travs del registro de trabajo o w que no necesita direccin y
est situado dentro de la CPU del microcontrolador. Una
transferencia de un registro a otro necesitara dos
instrucciones. Supongamos que tenemos que transferir un
dato al puerto B:
MOVF
MOVWF
0xAA
DATO
k
f,d
; copia el literal en W
; copia el resultado de restar W de f en d
0xF0
; ponemos una mascara ('11110000')
DATO, f ; el resultado de DATO AND 0xF0 se coloca en
DATO
Errores frecuentes
Es fcil cometer pequeos errores que nos harn gastar
gran cantidad de tiempo. Aqu hay algunas causas de
problemas frecuentes.
Muchas instrucciones de un programa son del tipo MOV y
estn relacionadas con w. Es muy fcil confundir "cargar un
registro en w" con "cargar f con w".
f
f
f
f
f
f
Aritmtica
Dentro de los microcontroladores PIC se cuenta con
instrucciones aritmticas tales como:
Las banderas
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.3
RLF f,d 0
RRF f,d 0
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.4
Operaciones de comparacin
Las operaciones de comparacin utilizan la instruccin de
resta. La resta no es mas que sumar al minuendo el
complemento a 2 del sustraendo.
Igualdad
Supongamos que estamos intetando determinar si un
nmero es igual a 2.
MOVLW .2
SUBWF N, W
; W = N - 2
BTFSS STATUS, Z
GOTO NO_ES_IGUAL
GOTO ES_IGUAL
N<2 MENOR
N>=2 MAYOR_IGUAL
Subrutinas
El movimiento del programa se basa en la llamada a
etiquetas y a subrutinas. Esto nos da capacidad para decidir,
temporizar o retardar, operar y/o ejecutar algoritmos. Por eso
debemos tener en cuenta las tcnicas ms comunes en la
programacin de lenguaje ensamblador que nos permitirn
hacer estas y muchas otras cosas.
La mayora de los microcontroladores incluyen en su
repertorio de instrucciones algunas que permiten saltar a una
rutina y, cuando se completa su ejecucin, retornar al
programa principal.
El empleo de subrutinas aporta muchas ventajas entre las
que se destacan las siguientes:
La instruccin CALL
Consulta a tablas
En muchas ocasiones es necesario efectuar una
coincidencia entre alguna cantidad de valores conocidos y un
nmero desconocido que se tiene como ndice.
Por ejemplo, basados en el contenido de una posicin de
memoria RAM, que usaremos como ndice, se puede obtener
de una serie consecutiva de datos almacenados en la
memoria de programa. A este conjunto de datos que
queremos obtener a cambio de un valor del ndice se les
denomina tabla.
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.5
INDICE,W
TABLA
ndice
CALL
serie de
Conversin a ASCII
Cdigos ASCII:
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.6
Por,
ejemplo,
queremos
representar
el
nmero
hexadecimal 70 h, que en binario es 01110000 b y en ASCII
necesita dos caracteres, "7" y "0"
Grficamente:
7
en hexadecimal (8 bits)
Lo transportamos a un programa:
numHEX EQU
convertir
asciiH EQU
alta
asciiL EQU
baja
0Ch
0Dh
0Eh
.......................
.......................
MOVLW
0Fh
ANDWF
numHEX,0
IORLW
MOVWF
30h
asciiL
; hexa y pasa a W
; convierte el nmero en ASCII
; nmero salvado en la variable
MOVLW
F0h
ANDWF
numHEX,1
SWAPF
IORLW
MOVWF
numHEX,0
30h
asciiL
;
;
;
;
alta
nmero
de salida
baja
nmero
variable de
.....................
.....................
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.7
Ramificacin
Cuando se tiene que solucionar un diagrama de flujo como
el de la siguiente figura, en el cual tenemos una accin o
ninguna segn la respuestas a una pregunta, se plantea la
solucin siguiente.
Bucle
; El ciclo se repite
Accion1 movlw
B'00010001'
movwf
PORTB
return
Accion2 movlw
B'00100010'
movwf
PORTB
return
.....
Ramificacin mltiple
Cuando se tiene que solucionar un diagrama de flujo como
el de la siguiente figura, en el cual tenemos tres posibles
respuestas a una pregunta, se plantean las soluciones aqu
presentadas.
0
1
2
PCL,1
ACCION1
ACCION2
ACCION3
ACCION1:
Accin 1
.........
;instrucciones correspondientes a la
.........
GOTO ENCUENTRO
ACCION2:
Accin 2
.........
;instruccionescorrespondientes a la
.........
GOTO ENCUENTRO
ACCION3:
Accin 3
.........
;instruccionescorrespondientes a la
.........
ENCUENTRO
caminos
.........
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.8
Solucin 2
Otra forma posible es comparando uno por uno los valores
de las diferentes opciones almacenadas en memoria RAM en
una variable llamada OPCION
MOVLW
XORWF
OPCION1
OPCION,0
BTFSC
GOTO
MOVLW
XORWF
STATUS,Z
ACCION1
OPCION2
OPCION,0
; verificando la bandera Z
BTFSC
GOTO
MOVLW
XORWF
STATUS,Z
ACCION2
OPCION3
OPCION,0
; verificando la bandera Z
BTFSC
GOTO
STATUS,Z
ACCION3
; verificando la bandera Z
; verificacin de OPCION
respecto a W
; verificacin de OPCION
respecto a W
; verificacin de OPCION
respecto a W
ACCION1
.........
.........
.........
GOTO ENCUENTRO
; instrucciones de la Accin 1
ACCION2
.........
.........
.........
GOTO ENCUENTRO
; instrucciones de la Accin 2
ACCION3
.........
.........
.........
; instrucciones de la Accin 3
ENCUENTRO
.........
.........
; sitio de encuentro
; continuacin del programa
Temporizacin
Hay veces en las que se necesita introducir ciertos retardos
de tiempo. Los retardos de tiempo se pueden obtener
mediante hardware o por medio de ciclos repetitivos basados
en software.
Los retardos de tiempo basados en software se realizan
mediante un bucle e incrementando o disminuyendo un
contador que cuando pase por cero har que salgamos de la
condicin.
Como ya sabemos, un ciclo mquina es el tiempo utilizado
por el microcontrolador para realizar sus operaciones internas
y equivale a 4 ciclos de reloj u oscilador.
Por tanto:
Tciclo
mq. =
Tciclo mq. = 4 / fosc
Tosc
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
CICLOS
la carga de k en W
1c
la carga de W en el contador
1c
10.9
2c
el salto a Loop
2 * (k - 1)
Total:
(3 * k) + 1
0xF9
0xFF
STATUS,Z
MIC4
; substrae 1 de W
; salta cuando llega a cero
; si no llega a cero vuelve a restar
CICLOS
MSEC1
MOVLW 0xF9
1c
NOP
1c
ADDLW 0xFF
1c
BTFSS
STATUS,Z
1c, 2c al
saltar
GOTO MIC4
2c
RETURN
2c
MIC4
Total, 1000 c
CNTMSEC
0xF8
MIC4
NOP
NOP
DECFSZ CNTMSEC, f
GOTO
MSLOOP
RETURN
;
;
;
;
;
Instrucciones y puertos
Conviene recordar que el PIC16F84A tiene 13 patillas que
pueden ser configuradas individualmente como entrada o
como salida. Estn divididos en dos puertos de 8 patillas y
otro de 5, puerto B y puerto A, respectivamente. La direccin
de cada bit est determinada por los bits de los
registros TRISA y TRISB del banco de memoria 1. Un cero
en un bit significa que es una salida, mientras que un uno
significa que queda configurado como una entrada.
Ejemplo de cmo configurar el puerto B alternando entradas y
salidas:
BSF
MOVLW
'10101010'
MOVWF
BCF
STATUS,RP0
0xAA
TRISB
STATUS,RP0
No
se
recomienda
utilizar
ver Instrucciones OPTION y TRIS.
la
instruccin
TRIS,
30h
TRISB
Ponemos:
MOVLW
MOVWF
B'00110000'
TRISB
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.10
0F
TRISB
TRISB,
TRISB,
TRISB,
TRISB,
0
1
2
3
PORTA, 0
GOTO
GOTO
OTRO
a otro lado
OTRO
..........
; otras instrucciones
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.11
BTFSS
GOTO
soltarlo
BSF
encendemos un led
DISPOSITIVOS LGICOS
MICROPROGRAMABLES
Tcnicas de
programacin
10.12