Istrucciones PIC 16F84

download Istrucciones PIC 16F84

of 19

Transcript of Istrucciones PIC 16F84

  • 8/17/2019 Istrucciones PIC 16F84

    1/19

    Microcontrolador PIC16F84

    Set de instrucciones

    Para entender mejor cada instrucción se explica a continuación el significadode algunos parámetros:

    f: Registro al que afecta la instrucciónW: Acumulador (Working register)b: !mero de bit ("a# instrucciones que afectan a un solo bit)k: constante (un n!mero)d: selección de destino del resultado de la instrucción$ puede ser %&% o %'%$ si es%&% el resultado se guarda en el acumulador (W) # si es %'% se gu#arda en elregistro f al que afecta la instrucción

    Instrucciones orientadas a registros:

     AW* f$d +uma W # el registro f$ el resultado lo guarda seg!n d (si d,& seguarda en W # si d,' se guarda en f)

     AW* f$d Reali-a la operación A lógica entre W # f$ el resultado lo guardaseg!n d

    ./R* f 0orra el registro f (pone todos sus bits a cero)

    ./RW 1 0orra el acumulador

    .23* f$d .alcula el complementario del registro f (los bits que estan a %&% lospone a %'% # 4ice4ersa Resultado seg!n d

    5.* f$d ecrementa f en uno (le resta uno) Resultado seg!n d

    5.*+6 f$d ecrementa f # se salta la siguiente instrucción si el resultado escero Resultado seg!n d

    7.* f$d 7ncrementa f en uno (le suma uno) Resultado seg!n d

    7.*+6 f$d 7ncrementa f # se salta la siguiente instrucción si el resultado escero (cuando se desborda un registro 4uel4e al 4alor &&") Resultado seg!n d

    72RW* f$d Reali-a la operación lógica 2R entre W # f Resultado seg!n d

    328* f$d 3ue4e el contenido del registro f a W si d,& (si d,' lo 4uel4e a poner en el mismo registro)

  • 8/17/2019 Istrucciones PIC 16F84

    2/19

    328W* f mue4e el 4alor de W a f Por ejemplo$ si queremos copiar el 4alor delregistro %R59'% al registro %R59% (#a 4eremos como ponerles nombres a losregistros) escribiremos:

    328* R59'$& ;mue4e el 4alor de R59' a W328W* R59 ;mue4e el 4alor de W a R59

    /o que 4a despu

  • 8/17/2019 Istrucciones PIC 16F84

    3/19

    72R/W k 2peración lógica 2R entre W # el 4alor k (resultado en W)

    328/W k carga el acumulador con el 4alor k Por ejemplo$ si queremos cargarel 4alor A" en el registro %R59'% escribiremos:

    328/W AC ;carga el acumulador con el 4alor A"328W* R59' ;mue4e el 4alor de W a %R59'%

    R5B*75 1 7nstrucción para 4ol4er de la interrupción

    R5B/W k carga el 4alor k en W # 4uel4e de la interrupción

    R5B?R 1 4uel4e de una subrutina

    +/55P 1 5l pic pasa a modo de +tandb#

     

    Instrucciones para el ensamblador 

    Podemos usar para escribir los programas el bloc de notas deWindoDs$ una 4e- escrito se guarda con extensión asm paraensamblarlo con el 3PA+3

    5xisten una serie de instrucciones que son para el ensamblador # nos"acen la tarea de programación mas sencilla # mas legible

    EQ: ?n ejemplo de esto son las etiquetas$ podemos poner unnombre a un registro de memoria$ esto se "ace mediante lainstrucción 5E? Por ejemplo:

    8AR7A0/5' 5E? &.C

     A partir de a"ora en lugar de escribir &.C podemos escribir8AR7A0/5' .on 5E? tambi

  • 8/17/2019 Istrucciones PIC 16F84

    4/19

    F5*75 0A.2' 0+* +BAB?+$HF5*75 0A.2& 0.* +BAB?+$H

     A partir de a"ora$ cuando escribamos 0A.2' se pondrá a %'% el bit

    de selección de banco # pasaremos al banco '$ al escribir 0A.2&pasaremos al banco &

    $%&: 7ndica al ensamblador la dirección (de memoria de programa)donde se guardará la instrucción que 4a#a a continuación Porejemplo:

    2R9 &&C./R* 8AR7A0/5'

    /a instrucción ./R* está en la dirección de memoria de programa&&C (será la primera instrucción en ser ejecutada por el pic)

    E#": +e escribe al final del programa para indicar que #a "a acabado(es obligatorio$ si no da error)

    Eti'uetas a direcciones de Programa: mu# !tiles para usar coninstrucciones .A// (/lamada a subrutina) o 92B2 (+alto) Por

    ejemplo:

    ICa# programa anteriorJ0B*+. 8AR7A0/5'$& ;+i el bit & de 8AR7A0/5' es %&% se salta lasiguiente instrucción92B2 5+?2 ;+alta a 5+?2 solo si el bit & de 8AR7A0/5' es %'%

    0+* 8AR7A0/5'$& +i el bit & de 8AR7A0/5' es & se ejecuta estainstrucción # el programa sigue por aquGI.ontin!a el programaJ5+?2 ;5tiqueta a una dirección de programa0.* 8AR7A0/5'$& ;+i el bit & de 8AR7A0/5' es %'% se ejecuta estaotra instrucción # el programa sigue por aquG

  • 8/17/2019 Istrucciones PIC 16F84

    5/19

    I.untin!a el programaJ

    n poco de orden:

    5s importante lle4ar un poco de orden a la "ora de escribir elprograma$ nos a#udará muc"o:

     Al principio 4an los 5E? # los F5*75$ despu

  • 8/17/2019 Istrucciones PIC 16F84

    6/19

    +i buscamos en la carpeta donde instalamos el 3P/A0 (pe .:KArc"i4os deprogramaK3P/A0) la a#uda llamada 587.5C/P$ podemos encontrar unlistado completo de las instrucciones especiales que usa el 3P/A0 # que nospermitirán mejorar nuestros listados$ esta es una muestra Además$ en las"ojas de datos de 3icroc"ip$ 4ienen todas las instrucciones de estos c"ips$qui-ás el lector piense$ porqu< me "e tomado tantas molestias en plasmar aquGtanta información que #a existe$ la ra-ón es que$ no está en castellano(espaLol) o la que "a# es mu# t

  • 8/17/2019 Istrucciones PIC 16F84

    7/19

    instrucción$ por orden alfab

  • 8/17/2019 Istrucciones PIC 16F84

    8/19

    en el registro +BAB?+ se 4en afectados los bits: C (Carr#)$ B (.ero) #el "C ("Ggito Carr#)

    +i el resultado de una instrucción A rebasa **$ la bandera C (.arr#) espuesta a '$ si tiene cualquier otro 4alor es &

    +i el resultado de una instrucción A es cero &&&& &&&&$ labandera B (.ero) se pone a ' # & si tiene cualquier otro 4alor

    /a suma se reali-a en aritm

  • 8/17/2019 Istrucciones PIC 16F84

    9/19

      Primer n!mero: '&&' &&'' I!mero en . anterior a lainstrucción A/WJ  +egundo n!mero (F5): '''' &&&& I!mero + 3áscaraJ

    Respuesta al )#": '&&' &&&& IAl aplicar la función )#" entreambosJ (Aed)

    )#".F  5sto significa: 2peración A producto lógico de . con elarc"i4o 3 I Aed entre W # fJ 8er tambi

  • 8/17/2019 Istrucciones PIC 16F84

    10/19

    puerto 5l resultado es la in4ersa a la instrucción anterior$ el & se sustitu#e por un '

    (FSC 5sto significa: 0it Best$ +kip if .lear ( 0it de Best$ +alta si es %&%)

    (FSC 55 a 1F/ bit Ca# casi && instrucciones para esta orden$ paracubrir los >N arc"i4os$ cada uno con Q bits (FSC significa$ comprobar elbit identificado en el registro llamado # si es & saltar una instrucción (noejecuta la instrucción que sigue) o afecta los bits de +BAB?+

    +e 4e mejor con un ejemplo: (FSC 56/4 es la forma de comprobar si elbit @ en el arc"i4o O es %&%$ si es cero$ salta la próxima instrucción (pasar sinejecutar) # continuar con la posterior

    Eti'ueta: (FSC 56/4  ; comprueba si el bit @ es &&$($ Eti'ueta,  ; si no es &$ salta "asta 5tiqueta

    C)++ "lay  ; si es &$ llama a subrutina la#

    (FSS 5sto significa: 0it Best$ +kip if +et (0it de Best$ +alta si es %'%)(FSS 55 a 1F/ bit Bambi

  • 8/17/2019 Istrucciones PIC 16F84

    11/19

    orden C)++ se llamará a las subrutinas # al final de cada subrutina debetener una instrucción %E(%# ?na llamada remota puede "acer desubrutina pero esta segunda subrutina no puede llamar otra subrutina

    .ada 4e- que se ejecuta una instrucción C)++$ un 4alor de dirección es

    colocado (empujado) en la Pila (Stac)$ entonces el micro sabe donde 4ol4erdespu

  • 8/17/2019 Istrucciones PIC 16F84

    12/19

      Afeca !a"s: TO, PD

    C$MF 5sto significa: .omplemento del arc"i4o f

    C$MF 55 a 1F/5 5l resultado estará en . por el 4alor & detrás de la

    comaC$MF 55 a 1F/1 5l resultado estará en 3  5l contenido 3  es

    complementado (los &s se cambian a 's # los 's a &s)

    "ECF 5sto significa: ecremento del arc"i4o f

    "ECF 55 a 1F/5 5l resultado estará en . 5l contenido del arc"i4o 3  esdecrementado # puesto %.%

    "ECF 55 a 1F/1 AquG$ el resultado estará en 3  5l contenido del arc"i4o %3 %es decrementado$ significa que es deducido (tomado) ' del arc"i4o +i elarc"i4o es &&&& &&&& esto da la 4uelta a '''' '''' (HH) afectando a labandera B .uando el arc"i4o es &&&& &&&' # se ejecuta una instrucción5.*$ el arc"i4o pasa a &&&& &&&& # la bandera B(cero) del S()(S se ponea '$ en otro caso es &

    "ECFSB 5sto significa: 5.rement f$ +kip if 6ero (ecrementa elarc"i4o 3  # salta si es &)

    "ECFSB 55 a 1F/5 5l resultado estará en .

    "ECFSB 55 a 1F/ 1 5l resultado estará en 3  /a instrucción "ECFSB tiene

    muc"os empleos ?n empleo importante está en una subrutina de retardo 5n esta rutina lainstrucción "ECFSB crea un la-o en el que el micro es en4iado a unainstrucción por encima1del1programa # se ejecutará un juego de instruccionesuna # otra 4e-$ esta es una táctica de perdida de tiempo para crear unretardo o afecta al registro +BAB?+

    .ada 4e- que el micro llega a "ECFSB$ el contenido del arc"i4o esdecrementado # si el arc"i4o no es cero$ se ejecutará la siguiente instrucciónen el programa /a siguiente instrucción es normalmente 92B2 #

  • 8/17/2019 Istrucciones PIC 16F84

    13/19

    nue4a dirección de memoria de programa a partir de la cual comen-arán aleerse las instrucciones despu

  • 8/17/2019 Istrucciones PIC 16F84

    14/19

    I$%.F 5sto significa: 7nclusi4e $% con el arc"i4o f 

    I$%.F 55 a 1F/5 5l resultado estará en .

    I$%.F 55 a 1F/1 5l resultado estará en 3  5l contenido del registro . es2Red con el arc"i4o 3 $ esto simplemente es una operación %2R% # el objeto de

    su reali-ación es cambiar dos o más bits a %'% +i un bit es 2Red con &$ larespuesta no se altera$ si el bit es 2Red con un ' el resultado es ' Afecta albit B del registro +BAB?+

    5jemplo: +i el registro W es cargado con '''' &&&& (*&" es una máscara de @ bits altos)# un  arc"i4o con un n!mero como &'&& '''& (@R") es 2Red  con W$ el resultado es '''' '''& (*5")

    M$JF 5sto significa: 3ue4e el contenido del arc"i4o && a '* dentro #fuera del arc"i4o o al W

    M$JF 55 a 1F/5 5l contenido del arc"i4o es mo4ido al W 5l resultadoestará en .

    M$JF 55 a 1F/1 5l resultado estará en 3  Para esta instrucción 328*&& a '*$' el contenido es mo4ido fuera del arc"i4o # de4uelto a

  • 8/17/2019 Istrucciones PIC 16F84

    15/19

    $P(I$# 5sto significa: .arga registro $P(I$# 5l contenido delregistro . es cargado en el registro $P(I$#

    %E(FIE 5sto significa: .uando "a# una interrupción$ R5B?R con 4alor

    de lo alto de la Pila # lo deja en el P.%E(FIE .arga el PC con el 4alor que se encuentra en la parte superior

    de la pila$ asegurando asG la 4uelta de la interrupción Pone a ' el bit &IE$con el fin de autori-ar o "abilitar de nue4o que se tengan en cuenta lasinterrupciones ($S → PC$ ' → &IE o afecta al registro +BAB?+

    %E(+. 5sto significa: %E(%# con /iteral en .

    %E(+. 55 a FF 5l registro . es cargado con el 4alor del literal$normalmente de4uel4e un dato procedente de una tabla 5l .ontador de

    Programa (P.) es cargado de la cima de la pila (+tack)$ que correspondea la dirección de R5B?R de programa o afecta al registro +BAB?+

    %E(%# 5sto significa: Retorno de +ubrutina 5sta instrucción está alfinal de una rutina o subrutina o afecta al registro +BAB?+

    %+F 5sto significa: %otar el arc"i4o 3  a 7-quierda con aCarreo (.arr#)

    %+F 55 a 1F/5 5l resultado se almacena en .

    %+F 55 a 1F/1 Resultado se almacena en 3  5l contenido de un arc"i4o$ esrotado un bit a la i-quierda por la bandera .arr# (acarreo)$ esto requiere de Ndespla-amientos para recuperar el 4alor original del arc"i4o Afecta albit C del S()(S

    5l uso de: RLF.....Reg, Destino........; rota los bits de un registro un lugar laizquierda. 

    +i Reg , b&&&'&''&

    espu)

    Y,, 0O 0H 0@ 0 0 0' 0& (. Y,, +BAB?+$.)

    5sto significa que$ todos los bits de Reg son rotados (despla-ados) unaposición "acia la i-quierda 5l espacio generado a la derec"a de Reg es decir$el bit& (0&) del registro$ es ocupado por el 4alor que tenGa en ese momento elbit . del registro +BAB?+ A su 4e-$ el 0it> (0>) de Reg sale del Registro # serellena con el bit . del registro +BAB?+

    Repasemos otra 4e- Reg , b&&&&''&& (." , ') # +BAB?+$. , &

  • 8/17/2019 Istrucciones PIC 16F84

    16/19

     Aplicamos; RLF Reg,F   5ntonces: Reg , b&&&''&&& ('Q" , @) #+BAB?+$. , &

    Podemos comprobar que antes de aplicar la R/*$ Reg 4alGa ' en sistemadecimal espu

  • 8/17/2019 Istrucciones PIC 16F84

    17/19

    onde . es el 4alor que tenGa el bit . de +BAB?+ en el momento deejecutar la instrucción RR* 8eamos en detalle cómo trabaja la función RR*:

    +abemos que un grupo de Q bits es registro$ o sea: Registro , 0> 0O 0H0@ 0 0 0' 0&

     Al aplicar la instrucción: RRF.....Reg,F   ocurre que: (+BAB?+$. ,,T .)0> 0O 0H 0@ 0 0 0' ,,T (0& ,,T +BAB?+$.)

    5sto significa que todos los bits de Reg son despla-ados una posición "aciala derec"a 5l espacio generado a la i-quierda de Reg$ es decir$ el bit> (0>)de registro$ seráocupado por el 4alor que tenGa en ese momento el bit . delregistro +BAB?+ A su 4e-$ el 0it& (0&) de Reg sale de Reg # rellena el bit .del registro +BAB?+

    +upongamos que: Reg , b&&&''&&& ('Q" , @) # +BAB?+$. , &

     Al aplicar: RRF Reg,F   Reg , b&&&&''&& (." , ') # +BAB?+$. , & AquG$ podemos comprobar que antes de aplicar la RR*$ Reg 4alGa @ en

    sistema decimal espu

  • 8/17/2019 Istrucciones PIC 16F84

    18/19

    procesador es puesto en el modo +leep (bajo consumo) con el osciladorparado

    Para salir de este estado$ es necesaria una de estas causas:Pro4ocar un %eset acti4ando el 3./R

    Por desbordamiento del ."( (Watc"dog) si quedo operati4o en el modoreposo9enerando una interrupción distinta a (M%5 #a que

  • 8/17/2019 Istrucciones PIC 16F84

    19/19

      BR7+ &O ;.argar BR7+ con el 4alor de W

    #ota: 5l H&QA sólo tiene O lGneas en el puerto # usa sólo los O bits inferiores +iW es &&&& '&&& todas las lGneas son salida excepto 9P$ #a que 9P sólopuede ser 5BRAA

    +i se requiere usar la instrucción BR7+ en un H&QA$ son necesarias lassiguientes @ instrucciones:

      0+* &$H ;+eleccionar pagina '  328/W &Q ;Caga 9P entrada

      328W* &O ;.argar el arc"i4o BR7+ (como estamos en page'$ esto no es salidaport O)

    0.* &$H ;+eleccionar Page&

    >$%+. 5sto significa: 5xclusi4o 2R /iteral con W

    >$%+. 55 a FF 5l contenido del registro de . es 2Red con un 4alorliteral (el contenido de W se "ace un 2R lógico con el 4alor literal)$ elresultado es colocado en el registro .

    >$%.F 5sto significa: 5xclusi4o 2R W con el arc"i4o f

    >$%.F 55 a 1F/5 5l resultado estará en .

    >$%.F 55 a 1F/1 5l resultado estará en 3  5xclusi4o 2R del contenidodel registro . con un arc"i4o (&& a '*)

    .on esto$ damos por terminada la descripción de las instrucciones para lafamilia PIC 5n próximos artGculos pondremos en acción los conocimientosadquiridos en este artGculo$ sin embargo personalmente recomiendo que se "agauna copia en papel para tener a mano en sus pro#ectos$ esto le facilitará elproceso de programación a#udándole a recordar la función de las instrucciones #ganará tiempo en sus pro#ectos