Está en la página 1de 12

Microcontroladores

TEMA PRACTICA:

INSTRUCCIONES RISC

NOMBRE: OMYS

FECHA DE ENTREGA:

INSTRUCCIONES RISC

En general las instrucciones de los microcontroladores pueden clasificarse como: CISC: (Complex Instruction Set Computer) Juego de Instrucciones Complejo, mas de 80 instrucciones RISC: (Reduced Instruction Set Computer) Juego de Instrucciones Reducido, unas ! instrucciones" #os microcontroladores $ICmicro son de este tipo" SISC: (Specific Instruction Set Computer) Juego de Instrucciones Especifico" $ara una mejor presentaci%n las instrucciones se pueden clasificar funci%n 'ue desempe(an en un programa, por ejemplo para: )o*er Cam+iar el contenido de los registros Controlar el flujo del programa Controlar el microcontrolador Reali,ar operaciones l%gicas Reali,ar operaciones aritm-ticas" seg&n la

El $IC./0812 pertenece a la gama media 3 es de tipo RISC4 esto 'uiere decir 'ue tiene un juego de instrucciones reducido, en concreto de ! instrucciones o nem%nicos 'ue son la +ase de funcionamiento del $IC" 2l igual 'ue los +its de los registros, ser5a complicado memori,arlas todas, as5 'ue utili,aremos este documento como gu5a de consulta" #as instrucciones fundamentalmente se di*iden en tres tipos" Esta di*isi%n *iene dada por el tipo de datos con los 'ue tra+ajan:

Instrucciones orientadas a los registros o +3tes (+3te6oriented operations)" Instrucciones orientadas a los +its (+it6oriented operations)" 7peraciones con literales 3 de control (literal and control operations)"

#as ! instrucciones % mnem%nicos de la gama media de )icroc8ip las encontraremos resumidas en la siguiente ta+la" w es el acumulador, f representa un registro cual'uiera 3 C, DC, Z los flags del registro STATUS

EJEMPLOS INSTRUCCIONES RISC

ADDWF: Suma W y f Suma el contenido del registro 9:9 3 el registro 9f9" Si ;d; es 0, el resultado se almacena en el registro :" Si 9d9 es . el resultado se almacena en el registro 9f9"

2<<:0 0SR,0 Si antes de la instrucci%n" = > .? 8 3 0SR > C@ 8 como d>0 2l ejecutarse: = > .? 8 A C@ 8 > <B 8 0SR > C@ 8 000. 0... + ..00 00.0 + ..0. .00. +

ANDWF: W AND f Reali,a la operaci%n l%gica 2C< entre el registro : 3 el registro ;f;" Si ;d; es 0 el resultado se almacena en el registro :" Si ;d; es ., el resultado se almacena en el registro ;f;" 0x!0

2C<#:

Si antes de la instrucci%n" = > 2 8 2l ejecutarse: = > 0.0. .... + 2C< .0.0 00.. + > 0000 00.. + > 0 8 0.0. .... + .0.0 00.. + 0000 00.. + C#R0 CLRF: Borra un r !"#$ro Dorra el contenido del registro 9f9 3 se acti*a el flag E" REF

Si antes de la instrucci%n: REF > !2 8

2l ejecutarse: REF > 00 8 flag E > .

CLRW: Borra % r !"#$ro & $ra'a(o W Dorra el contenido del registro 9:9 3 se acti*a el flag E" Esta instrucci%n no tiene operandos"

C#R: Si antes de la instrucci%n" => !28 2l ejecutarse: = > 00 flag E > . COMF: Com)% m n$a % r !"#$ro f El contenido del registro 9f9 se complementa" Si d>0 el resultado se almacena en el registro :" Si d>. el resultado se almacena en el registro 9f9"

C7)0 REF.,0 Si antes de la instrucci%n: REF. > . 8 como d> 0 2l ejecutarse: REF. > . 8 > 000. 00.. + = > EC 8 > ...0 ..00 + 000. 00.. + ...0 ..00 + DECF: D *r m n$a f n + <ecrementa en uno el contenido del registro 9f9" Si d>0, el resultado se almacena en :" Si d>., el resultado se almacena en 9f9" <EC0 CCG,. flag E > 0

Si antes de la instrucci%n: CCG > 0. 8 2l ejecutarse: E>0

CCG > 00 8 +it E > . DECFSZ: D *r m n$a n + y #a%$a #" % r #u%$a&o # ,: El contenido del registro 9f9 se decrementa" Si 9d>0, el resultado se coloca en el registro :" Si d>., el resultado se coloca en el registro 9f9" Si el resultado es 0, se salta la siguiente instrucci%n 3 se contin&a con la ejecuci%n" ICICI7 <EC0SE CCG,. F7G7 #77$ C7CGICH2R

si antes de la instrucci%n: $C > direcci%n ICICI7 2l ejecutarse: CCG > CCG 6. Si CCG > 0 entonces $C > direcci%n C7CGICH2R Si CCG no > 0 entonces $C > direcci%n ICICI7 A . INCF: In*r m n$a % r !"#$ro f- Incrementa en uno el contenido del registro 9f9" Si d>0, el resultado se almacena en :" Si d>., el resultado se almacena en 9f9" CCG,.

ICC0

Si antes de la instrucci%n: CCG > 00 8 2l ejecutarse: 00 8 A . 8 > 00 8 CCG > 00 flag E > . flag E > 0

INCFSZ: In*r m n$a n + y #a%$a #" % r #u%$a&o # ,: El contenido del registro 9f9 se incrementa" Si d>0, el resultado se coloca en el registro :" Si d>., el resultado se coloca en el registro 9f9" Si el resultado es 0, se salta la siguiente instrucci%n 3 se contin&a con la ejecuci%n ICICI7 ICC0SE F7G7S2#G7 C7CGICH2R Si antes de la instrucci%n: CCG,.

$C > direcci%n ICICI7 2l ejecutarse: CCG > CCGA. Si CCG > 0 Entonces $C > direcci%n C7CGICH2R Si CCG no > 0 Entonces $C > direcci%n ICICI7 A .

IORWF: W OR f: Reali,a la operaci%n l%gica 7R entre el registro : 3 el registro 9f9" Si d>0 el resultado se almacena en el registro :" Si d>., el resultado se almacen en el registro 9f9"

I7R:0 RESH#,0 Si antes de la instrucci%n RESH# > . 8 > 000. 00.. + = > B. 8 > .00. 000. + 2l ejecutarse: RESH#> 000. 00.. + 7R .00. 000. + > .00. 00.. + > B 8 000. 00.. + .00. 000. + .00. 00.. + MO.F: Mo/ r % r !"#$ro f: El contenido del registro 9f9 se mue*e al destino 9d9" Si d>0, el destino es el registro :" Si d>., el destino es el propio registro 9f9"

)7I0 0SR,0 2l ejecutarse: = > al *alor del 0SR RLF: Ro$a % r !"#$ro f a %a "01u" r&a: El contenido del registro 9f9 se rota una posici%n a la i,'uierda" El +it de mJs peso pasa al carr3 3 el carr3 se introduce por el +it de menos peso de 9f9" Si d>0, el resultado se coloca en el registro :" Si d>., el resultado 'ueda en el registro 9f9"

Si tenemos el registro I2#7R > 0000 000. + 3 aplicamos la instrucci%n RLF .ALOR2+ Entonces el resultado serJ I2#7R > 0000 00.0 + 3 el +it C > 0"

RRF: Ro$a % r !"#$ro f a %a & r *3a: El contenido del registro 9f9 se rota una posici%n a la derec8a" El +it de menos peso pasa al carr3 3 el carr3 se introduce por el +it de mJs peso de 9f9" Si d>0, el resultado se coloca en el registro :" Si d>., el resultado 'ueda en el registro 9f9"

REF. > ...0 0..0 + 3 flag C > . RRF REG+2,, como d > 0 el resultado 'ueda en =, al ejecutarse: REF. > ...0 0..0 + = > 0... 00.. + flag C > 0 SUBWF: R #$a f 4 W: Resta el contenido del registro 9f9 menos el contenido del registro :" Si d>0, el resultado se almacena en el registro :" Si d>., el resultado se almacena en el registro 9f9"

SHD:0 REF,. 2ntes de la instrucci%n: REF>0x0., :>0x0@ <espu-s de la instrucci%n: REF>0x00, :>0x0@ SWAPF: In$ r*am'"o & f: El ni++le +ajo del registro 9f9 se intercam+ia con el ni++le alto del mismo" Si d>0, el resultado se coloca en el registro :" Si d>., el resultado 'ueda en el registro 9f9"

S:2$0 REF.,0 Si antes de la instrucci%n: REF. > 2! 8 > .0.0 0.0. 8 Como d>0 el resultado se almacenarJ en = 2l ejecutarse la instrucci%n: REF. > 2! 8 > .0.0 0.0. + = > !2 8 > 0.0. .0.0 +

5ORWF: W 5OR f- Reali,a la funci%n l%gica 7R exclusi*a entre el contenido del registro : 3 el registro 9f9" Si d>0, el resultado se almacena en el registro :" Si d>. el resultado se almacena en el registro 9f9" K7R:0 REF,.antes de la instrucci%n: REF>0x20, :>0xD! <espu-s de la instrucci%n: REF>0x.2, :>0xD! BCF: Borra un '"$: Dorra el +it 9+9del registro 9f9

DC0 REF,0 2ntes de la instrucci%n: REF>+90..0..0.9 <espu-s de la instrucci%n: REF>+90..0..009

BSF: A*$"/a un '"$:2cti*a el +it 9+9 del registro 9f9

DS0 REF,@ 2ntes de la instrucci%n: REF>+90.00.00.9 <espu-s de la instrucci%n: REF>+90.00.0..9

ANDLW: W AND %"$ ra%: Reali,a la operaci%n l%gica 2C< entre el registro : 3 la constante ;L;" El resultado se almacena en el registro :"

2C<#: 0x!0 Si antes de la instrucci%n" = > 2 8 2l ejecutarse: = > 0.0. .... + 2C< .0.0 00.. + > 0000 00.. + > 0 8 0.0. .... + .0.0 00.. + 0000 00.. + CALL: L%ama&a a #u'ru$"na: #lamada 3 salto a su+rutina" #a direcci%n de retorno se guarda en el stacL" #a constante ;L; de 8 +its forma la direcci%n de salto 3 se carga en los +its del $C" #os +its del $C se cargan con los +its del registro ;SG2GHS;" $C se pone a 0"

ICICI7 C2## <ESGIC7 2ntes de la instrucci%n: $C>ICICI7 <espu-s de la instrucci%n: $C><ESGIC7 CLRWDT: Borra % wa$*3&o! $"m r: Esta instrucci%n +orra tanto el ;=atc8dog; como el prescaler" #os +its G7 3 $< del registro de estado se ponen a ;.;" GOTO: Sa%$o "n*on&"*"ona%: Se trata de un salto incondicional" #os B +its de la constante ;L; 'ue forman la instrucci%n, se cargan en los +its del $C 3 forman la direcci%n de salto" #os +its del $C se cargan con los +its del registro de estado"

ICICI7 F7G7 <ESGIC7 2ntes de la instrucci%n: $C>0 <espu-s de la instrucci%n: $C><ESGIC7 IORLW: W OR %"$ ra%: Se reali,a la funci%n l%gica 7R entre el registro : 3 la contante ;L;" El resultado se almacena en el registro :"

I7R#: 0x ! Si antes de la instrucci%n: = > B2 8 2l ejecutarse: = > .00. .0.0 + A 00.. 0.0. + > .0.. .... + > D0 8 .00. .0.0 + 00.. 0.0. + .0.. .... + MO.LW: Car!a un %"$ ra% n W: El registro : se carga con el *alor de 8 +its expresado mediante la literal ;L;"

)7I#:0x!2 2l ejecutarse: = > !2 8

RETLW: R !r #a & una #u'ru$"na y *ar!a % /a%or 6 n W: El programa regresa de la su+rutina 3 carga el *alor de 8 +its del registro L en el registro :

REG#:,0x1! 2ntes de la instruccion: :>xx <espues de la instruccion: :>0x1! Sleep4 5ORLW: W 5OR %"$ ra%: Reali,a la funci%n l%gica 7R exclusi*a entre el contenido del registro : 3 la constante ;L; de 8 +its" El resultado se almacena en el registro :" SLEEP: Entra en estado de reposo

K7R#: 0x20 Si antes de la instrucci%n: = > .0.. 0.0. + > D! 8 2l ejecutarse la instrucci%n: = > .0.. 0.0. + M .0.0 .... + > 000. .0.0 + > .2 8

.0.. 0.0. + .0.0 .... + 000. .0.0 + SUBLW: R #$a L 4 W: 2 una constante ;L; de 8 +its se le resta el registro :" El resultado es guardado en el mismo registro :" MO.WF: Mo/ r % /a%or & % r !"#$ro W a% r !"#$ro f El contenido del registro N:O se mue*e al registro NfO" 7$CI7C

)7I:0

Si antes de la instrucci%n: 7$CI7C > 00 8 2l ejecutarse: 7$CI7C > 10 8 = > 10 8 = > 10 8

BIBLIOGRAFIA

8ttp:PPperso"=anadoo"esPpicto+Pinstrucciones"8tm 8ttp:PP==="electronicaestudio"comPdocsPinstruccionesQ."pdf

También podría gustarte