<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>MicroPIC &#187; MPASM</title>
	<atom:link href="http://micropic.wordpress.com/category/mpasm/feed/" rel="self" type="application/rss+xml" />
	<link>http://micropic.wordpress.com</link>
	<description>Tutoriales y Proyectos con Microcontroladores PIC</description>
	<lastBuildDate>Sun, 05 Oct 2008 15:46:53 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='micropic.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/1d21e30c68a54806b77bd297c0ecf116?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>MicroPIC &#187; MPASM</title>
		<link>http://micropic.wordpress.com</link>
	</image>
			<item>
		<title>Displays de 7 segmentos</title>
		<link>http://micropic.wordpress.com/2007/02/26/displays-de-7-segmentos/</link>
		<comments>http://micropic.wordpress.com/2007/02/26/displays-de-7-segmentos/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 03:40:52 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[MPASM]]></category>
		<category><![CDATA[Rutinas]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/02/26/displays-de-7-segmentos/</guid>
		<description><![CDATA[Un display de 7 segmentos no es otra cosa que 7 leds conectados entre si con su ánodo o su cátodo en común. Dependiendo del tipo de display será la manera en que se enciendan sus segmentos, un display de cátodo común requiere un 1 logico para encender mientras que uno de cátodo común un [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=41&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Un display de 7 segmentos no es otra cosa que 7 leds conectados entre si con su ánodo o su cátodo en común. Dependiendo del tipo de display será la manera en que se enciendan sus segmentos, un display de cátodo común requiere un 1 logico para encender mientras que uno de cátodo común un 0 así que dependiendo del display que se utilice cambiará la rutina encargada de controlarlo, pero en cualquier caso al momento de cambiar el tipo de display solo debemos cambiar los ceros por unos y viceversa.</p>
<p>Aqui supondremos que se usa un display de cátodo común así que los segmentos encenderán con un 1. El display estará conectado al puerto B, el segmento A estará conectado al bit RB0, el B al RB1, el C al RB2, el D al RB3 y así sucesivamente hasta llegar al G que estará conectado al bit RB6.</p>
<p><span id="more-41"></span></p>
<p>Encender y apagar los segmentos del display es igual que encender y apagar leds, podríamos hacerlo de la misma manera que en el tutorial 1, pero una manera mas eficaz de controlar un display es mdiante una tabla. Haremos que el display muestre los números 0 a 15 en hexadecimal (0 a F) con un retardo de medio segundo entre cada número. Para eso se declara el puerto B como salida. Una vez hecho eso se crea la rutina encargada de mandar llamar el numero correspondiente de una tabla y de desplegar el numero correspondiente por el puerto B. El programa principal es el siguiente:</p>
<p><img src="http://micropic.files.wordpress.com/2007/02/7seg1.png" alt="7seg1.png" /><br />
Y ese es basicamente el programa. Al principio se declaran 4 variables, una se utiliza para llevar la cuenta del numero a desplegar y las demas sirven para la rutina de retardo. Como ya se dijo se <em>configura el puerto B como salida</em> y despues se limpia la variable Numero (<strong><em>clrf NUMERO</em></strong>). Despues el programa entra en una subrutina que se encarga de leer la tabla y de desplegar el numero en el puerto. Primero se mueve el valor de la variable Numero al registro W (<strong><em>movf NUMERO,w</em></strong>) y despues se manda llamar la tabla (<strong><em>call DESPLIEGA</em></strong>), al volver el registro W tiene el valor del numero a desplegar y simplementa se mueve al puerto B (<strong><em>movwf PORTB</em></strong>). Se llama a la rutina de retardo (<strong><em>call RETARDO</em></strong>) y al volver de esta se incrementa el valor de la variable Numero (<strong><em>incf NUMERO,f</em></strong>) y despues se transfiere ese valor al registro W (<strong><em>movf NUMERO,w</em></strong>). Esto se hace para realizar una comparacion entre W y la <em>literal 0&#215;10</em> (16 en valor decimal) para saber si la variable Numero ya fue incrementada 16 veces, si es asi se salta la siguiente instruccion y el programa se repite desde la etiqueta <em>Principal</em>, si no es asi el programa regresa a la etiqueta <em>Ciclo</em>. De este modo el numero se incrementa de 0 a F y al llegar a F regresa a 0. La comparacion se realiza mediante la instruccion <strong><em>sublw 0&#215;10</em></strong> si el resultado es cero (en caso de que <em>NUMERO=16</em>) la bandera <em>ZERO</em> se pone en 1 y es esa la bandera que se revisa en <strong><em>btfss STATUS,Z</em></strong>.</p>
<p>Como ya se dijo antes de llamar la rutina que lee la tabla se carga el valor de la variable Numero en W, esto se hace asi ya que al entrar a la rutina se realiza una suma entre W y el <em>contador de programa PCL</em> para <em>montarlo en un offset</em>, asi el contador apuntara a la direccion que seguia mas el valor de la variable Numero. Asi la rutina de la table queda de la siguiente manera:</p>
<p><img src="http://micropic.files.wordpress.com/2007/02/7seg2.png" alt="7seg2.png" /><br />
Y asi, de este modo se decodifica un display de 7 segmentos. La rutina de retardo se omitio en la explicacion ya que los retardos se explicaron anteriormente, de cualquier forma se incluye en el codigo del programa. <a href="http://micropic.files.wordpress.com/2007/02/display-7-segmentos.pdf" title="display-7-segmentos.pdf">Descargar codigo</a>.</p>
<p>Como nota final: Las imagenes que contienen el codigo en esta ocasion se ven algo distintas que en los tutoriales pasados, ese descuadre se debe a que el codigo se escribio utilizando MPLAB bajo linux, pero en realidad se conservan los mismos espacios y tabulaciones que en ocasiones anteriores, eso se puede ver al descargar el codigo completo.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/41/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/41/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=41&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/02/26/displays-de-7-segmentos/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f692212d8c3bca2ea0d6028582097e0e?s=96&#38;d=identicon" medium="image">
			<media:title type="html">micropic</media:title>
		</media:content>

		<media:content url="http://micropic.files.wordpress.com/2007/02/7seg1.png" medium="image">
			<media:title type="html">7seg1.png</media:title>
		</media:content>

		<media:content url="http://micropic.files.wordpress.com/2007/02/7seg2.png" medium="image">
			<media:title type="html">7seg2.png</media:title>
		</media:content>
	</item>
		<item>
		<title>Conjunto de instrucciones (segunda parte)</title>
		<link>http://micropic.wordpress.com/2007/02/20/conjunto-de-instrucciones-segunda-parte/</link>
		<comments>http://micropic.wordpress.com/2007/02/20/conjunto-de-instrucciones-segunda-parte/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 05:34:50 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[MPASM]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/02/20/conjunto-de-instrucciones-segunda-parte/</guid>
		<description><![CDATA[La semana pasada se hablo sobre el conjunto de instrucciones de la gama media de los micrcocontroladores PIC y se explicaron 34 de las 35 que lo forman. Solamente 34 ya que una paso totalmente desapercibida, se trata de MOVWF asi que ahora a modo de errata se explica esta instruccion perteneciente al grupo de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=45&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>La semana pasada se hablo sobre el conjunto de instrucciones de la gama media de los micrcocontroladores PIC y se explicaron 34 de las 35 que lo forman. Solamente 34 ya que una paso totalmente desapercibida, se trata de MOVWF asi que ahora a modo de errata se explica esta instruccion perteneciente al grupo de instrucciones orientadas a registros.</p>
<p><span id="more-45"></span></p>
<p><strong>MOVWF: Mover el valor del registro W al registro f</strong><br />
El contenido del registro ‘W’ se mueve al registro ‘f’.<br />
Sintaxis: [etiqueta] MOVWF f<br />
Flags afectados: Ninguno<br />
Ejemplo: MOVWF REG<br />
Antes de la instrucción: REG=0&#215;03, W=0xA4<br />
Después de la instrucción: REG=0xA4, W=0xA4</p>
<p>Ahora si, con MOVWF ya se explicaron las 35 instrucciones y ya podemos continuar con los ejemplos de programación.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/45/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/45/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=45&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/02/20/conjunto-de-instrucciones-segunda-parte/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f692212d8c3bca2ea0d6028582097e0e?s=96&#38;d=identicon" medium="image">
			<media:title type="html">micropic</media:title>
		</media:content>
	</item>
		<item>
		<title>Conjunto de instrucciones del PIC 16F628 (16F628A)</title>
		<link>http://micropic.wordpress.com/2007/02/15/conjunto-de-instrucciones-del-pic-16f628-16f628a/</link>
		<comments>http://micropic.wordpress.com/2007/02/15/conjunto-de-instrucciones-del-pic-16f628-16f628a/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 06:05:27 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[Ensamblador]]></category>
		<category><![CDATA[MPASM]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/02/15/conjunto-de-instrucciones-del-pic-16f628-16f628a/</guid>
		<description><![CDATA[Como ya hemos visto, para que el microcontrolador lleve acabo una tarea, debemos indicarle exactamente que debe hacer, o en otras palabras, debemos escribir el programa que el micro ejecutara. Ya hemos visto varios ejemplos y muchas de las instrucciones del pic, pero ahora veremos las 35 instrucciones del ensamblador mpasm. Estas 35 instrucciones son [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=43&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Como ya hemos visto, para que el microcontrolador lleve acabo una tarea, debemos indicarle exactamente que debe hacer, o en otras palabras, debemos escribir el programa que el micro ejecutara. Ya hemos visto varios ejemplos y muchas de las instrucciones del pic, pero ahora veremos las 35 instrucciones del ensamblador mpasm. Estas 35 instrucciones son las mismas para toda la gama media de los microcontroladores pic asi que si mas adelante se quiere realizar un programa para un pic 16F877 se usaran las mismas instrucciones.</p>
<p><span id="more-43"></span></p>
<p>Antes de continuar es necesario definir algunos terminos que se usaran para explicar las instrucciones:<br />
<strong>f</strong>: cualquier registro del microcontrolador<br />
<strong>W</strong>: registro de trabajo<br />
<strong>b</strong>: posicion de un bit en el registro &#8216;f&#8217;<br />
<strong>d</strong>: destino, puede ser &#8216;f&#8217; (d=1) o &#8216;W&#8217; (d=0)<br />
<strong>etiqueta</strong>: grupo de caracteres que marcan el inicio de una parte del programa<br />
<strong>[]</strong>: opcional<br />
<strong></strong>: posicion de un bit dentro de un registro</p>
<p><strong>Instrucciones orientadas a registros</strong></p>
<p><strong>ADDWF: Suma W y f</strong><br />
Suma el contenido del registro &#8216;W&#8217; y el registro &#8216;f&#8217;. Si &#8220;d&#8221; es 0, el resultado se almacena en el registro W. Si &#8216;d&#8217; es 1 el resutado se almacena en el registro &#8216;f&#8217;.<br />
Sintaxis:  [etiqueta] ADDWF f,d<br />
Operación:  (W) + (f) &#8211;&gt; (destino)<br />
Flags afectados:  C, DC, Z<br />
Ejemplo: ADDWF REG,1<br />
Antes de la instrucción: W=0&#215;03, REG=0&#215;04<br />
Después de la instrucción: W=0&#215;03, REG=0&#215;07</p>
<p><strong>ANDWF:  W AND f</strong><br />
Realiza la operación lógica AND entre el registro W y el registro &#8220;f&#8221;. Si &#8220;d&#8221; es 0 el resultado se almacena en el registro W. Si &#8220;d&#8221; es 1, el resultado se almacena en el registro &#8220;f&#8221;.<br />
Sintaxis: [etiqueta] ANDWF f,d<br />
Operación: (W) AND (f) &#8211;&gt; (destino)<br />
Flags afectados: Z<br />
Ejemplo: ANDWF REG,1<br />
Antes de la instrucción: W=0&#215;17, REG= 0xC2<br />
Después de la instrucción: W=0&#215;17, REG= 0&#215;02</p>
<p><strong>CLRF: Borra un registro</strong><br />
Borra el contenido del registro &#8216;f&#8217; y se activa el flag Z.<br />
Sintaxis: [etiqueta] CLRF f<br />
Flags afectados:  Z<br />
Ejemplo: CLRF REG<br />
Antes de la instrucción: REG=0&#215;54<br />
Después de la instrucción: REG=0&#215;00, Z=1</p>
<p><strong>CLRW: Borra el registro de trabajo W</strong><br />
Borra el contenido del registro &#8216;W&#8217; y se activa el flag Z. Esta instruccion no tiene operandos.<br />
Sintaxis: [etiqueta] CLRW<br />
Flags afectados:  Z<br />
Ejemplo: CLRW<br />
Antes de la instrucción: W=0&#215;54<br />
Después de la instrucción: W=0&#215;00, Z=1</p>
<p><strong>COMF: Complementa el registro f</strong><br />
El contenido del registro &#8216;f&#8217; se complementa. Si d=0 el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro &#8216;f&#8217;.<br />
Sintaxis: [etiqueta] COMF f,d<br />
Flags afectados:  Z<br />
Ejemplo: COMF REG,0<br />
Antes de la instruccion: REG=0&#215;13<br />
Después de la instrucción: REG=0&#215;13, W=0xEC</p>
<p><strong>DECF: Decrementa f en 1</strong><br />
De decrementa en uno el contenido del registro &#8216;f&#8217;. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en &#8216;f&#8217;.<br />
Sintaxis: [etiqueta] DECF f,d<br />
Flags afectados: Z<br />
Ejemplo: DEC CONT, 1<br />
Antes de la instrucción: CONT=0&#215;01, Z=0<br />
Después de la instrucción: CONT=0&#215;00, Z=1</p>
<p><strong>DECFSZ: Decrementa en 1 y salta si el resultado es 0</strong><br />
El contenido del registro &#8216;f&#8217; se decrementa. Si &#8216;d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro &#8216;f&#8217;. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución.<br />
Sintaxis: [etiqueta] DECFSZ f,d<br />
Flags afectados:  Ninguno</p>
<p><strong>INCF: Incrementa el registro f</strong><br />
Incrementa en uno el contenido del registro &#8216;f&#8217;. Si d=0, el resultado se almacena en W. Si d=1, el resultado se almacena en &#8216;f&#8217;.<br />
Sintaxis:  [label] INCF f,d<br />
Flags afectados:  Z<br />
Ejemplo: INCF CONT,1<br />
Antes de la instrucción: CONT=0xFF, Z=0<br />
Después de la instrucción: CONT=0&#215;00, Z=1</p>
<p><strong>INCFSZ: Incrementa en 1 y salta si el resultado es 0</strong><br />
El contenido del registro &#8216;f&#8217; se incrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro &#8216;f&#8217;. Si el resultado es 0, se salta la siguiente instrucción y se continúa con la ejecución.<br />
Sintaxis: [etiqueta] DECFSZ f,d<br />
Flags afectados:  Ninguno</p>
<p><strong>IORWF: W OR f</strong><br />
Realiza la operación lógica OR entre el registro W y el registro &#8216;f&#8217;. Si d=0 el resultado se almacena en el registro W. Si d=1, el resultado se almacen en el registro &#8216;f&#8217;.<br />
Sintaxis: [etiqueta] IORWF f,d<br />
Flags afectados: Z<br />
Ejemplo: IORWF REG,0<br />
Antes de la instrucción: REG=0&#215;13, W=0&#215;91<br />
Después de la instrucción: REG=0&#215;13, W=0&#215;93</p>
<p><strong>MOVF: Mover el registro f</strong><br />
El contenido del registro &#8216;f&#8217; se mueve al destino &#8216;d&#8217;. Si d=0, el destino es el registro W. Si d=1, el destino es el propio registro &#8216;f&#8217;.<br />
Sintaxis:  [etiqueta] MOVF f,d<br />
Flags afectados:  Z<br />
Ejemplo: MOVF REG,0<br />
Después de la instrucción: W=REG</p>
<p><strong>RLF: Rota el registro f a la izquierda</strong><br />
El contenido del registro &#8216;f&#8217; se rota una posición a la izquierda. El bit de más peso pasa al carry y el carry se introduce por el bit de menos peso de &#8216;f&#8217;. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro &#8216;f&#8217;.<br />
Sintaxis:  [etiqueta] RLF f,d<br />
Flags afectados:  C<br />
Ejemplo:  RLF REG,1<br />
Antes de la instrucción: REG=b&#8217;11100110&#8242;, C=0<br />
Después de la instrucción: REG=b&#8217;11001100&#8242;, C=1</p>
<p><strong>RRF: Rota el registro f a la derecha</strong><br />
El contenido del registro &#8216;f&#8217; se rota una posición a la derecha. El bit de menos peso pasa al carry y el carry se introduce por el bit de más peso de &#8216;f&#8217;. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro &#8216;f&#8217;.<br />
Sintaxis:  [etiqueta] RLF f,d<br />
Flags afectados:  C<br />
Ejemplo:  RLF REG,1<br />
Antes de la instrucción: REG=b&#8217;11100110&#8242;, C=0<br />
Después de la instrucción: REG=b&#8217;01110011&#8242;, C=0</p>
<p><strong>SUBWF: Resta f &#8211; W</strong><br />
Resta el contenido del registro &#8216;f&#8217; menos el contenido del registro W. Si d=0, el resultado se almacena en el registro W. Si d=1, el resultado se almacena en el registro &#8216;f&#8217;.<br />
Sintaxis: [etiqueta] SUBWF f,d<br />
Flags afectados: C, DC, Z<br />
Ejemplo: SUBWF REG,1<br />
Antes de la instrucción: REG=0&#215;01, W=0&#215;02<br />
Después de la instrucción: REG=0xFF, W=0&#215;02</p>
<p><strong>SWAPF: Intercambio de f</strong><br />
El nibble bajo del registro &#8216;f&#8217; se intercambia con el nibble alto del mismo. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado queda en el registro &#8216;f&#8217;.<br />
Sintaxis: [etiqueta] SWAPF f,d<br />
Flags afectados:  Ninguno<br />
Ejemplo: SWAPF REG,1<br />
Antes de la instrucción: REG=0&#215;54<br />
Después de la instrucción: REG=0&#215;45</p>
<p><strong>XORWF: W XOR f</strong><br />
Realiza la función lógica OR exclusiva entre el contenido del registro W y el registro &#8216;f&#8217;. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro &#8216;f&#8217;.<br />
Sintaxis: [etiqueta] XORWF f,d<br />
Flags afectados:  Z<br />
Ejemplo: XORWF REG,1<br />
Antes de la instrucción: REG=0xAF, W=0xB5<br />
Después de la instrucción: REG=0&#215;1A, W=0xB5</p>
<p><strong>NOP: No operacion</strong><br />
No realiza ninguna operacion, solo consume un ciclo de reloj<br />
Sintaxis: [etiqueta] NOP</p>
<p><strong>Instrucciones orientadas a bits</strong></p>
<p><strong>BCF: Borra un bit</strong><br />
Borra el bit &#8216;b&#8217;del registro &#8216;f&#8217;<br />
Sintaxis:  [etiqueta] BCF f,b<br />
Ejemplo: BCF REG,0<br />
Antes de la instrucción: REG=b&#8217;01101101&#8242;<br />
Después de la instrucción: REG=b&#8217;01101100&#8242;</p>
<p><strong>BSF: Activa un bit</strong><br />
Activa el bit &#8216;b&#8217; del registro &#8216;f&#8217;<br />
Sintaxis:  [etiqueta] BSF f,b<br />
Ejemplo: BSF REG,2<br />
Antes de la instrucción: REG=b&#8217;01001001&#8242;<br />
Después de la instrucción: REG=b&#8217;01001011&#8242;</p>
<p><strong>BTFSC: Checa un bit y salta si es 0</strong><br />
Si el bit &#8220;b&#8221; del registro &#8220;f&#8221; es 0, se salta una instrucción y se continúa con la ejecución.<br />
Sintaxis:  [etiqueta] BTFSC f,b</p>
<p><strong>BTFSS: Checa un bit y salta si es 1</strong><br />
Si el bit &#8220;b&#8221; del registro &#8220;f&#8221; es 1, se salta una instrucción y se continúa con la ejecución.<br />
Sintaxis:  [etiqueta] BTFSS f,b</p>
<p><strong>Instrucciones orientadas a constantes y de control</strong></p>
<p><strong>ANDLW: W AND literal</strong><br />
Realiza la operación lógica AND entre el registro W y la constante &#8220;k&#8221;. El resultado se almacena en el registro W.<br />
Sintaxis: [label] ANDWL k<br />
Flags afectados: Z<br />
Ejemplo: ANDLW 0&#215;5F<br />
Antes de la instrucción: W=0xA3<br />
Después de la instrucción: W=0&#215;03</p>
<p><strong>CALL: Llamada a subrutina</strong><br />
Llamada y salto a subrutina. La dirección de retorno se guarda en el stack. La constante &#8220;k&#8221; de 8 bits forma la dirección de salto y se carga en los bits  del PC. Los bits  del PC se cargan con los bits  del registro &#8220;STATUS&#8221;. PC  se pone a 0.<br />
Sintaxis: [etiqueta] CALL k<br />
Ejemplo: INICIO CALL DESTINO<br />
Antes de la instrucción: PC=INICIO<br />
Después de la instrucción: PC=DESTINO</p>
<p><strong>CLRWDT: Borra el watchdog timer</strong><br />
Esta instrucción borra tanto el &#8220;watchdog&#8221; como el prescaler. Los bits TO y PD del registro de estado se ponen a &#8220;1&#8243;.<br />
Sintaxis:  [label] CLRWDT<br />
Flags afectados:   TO, PD</p>
<p><strong>GOTO: Salto incondicional</strong><br />
Se trata de un salto incondicional. Los 9 bits de la constante &#8220;k&#8221; que forman la instrucción, se cargan en los bits  del PC y forman la dirección de salto. Los bits  del PC se cargan con los bits  del registro de estado.<br />
Sintaxis: [etiqueta] GOTO k<br />
Ejemplo: INICIO GOTO DESTINO<br />
Antes de la instrucción: PC=0<br />
Después de la instrucción: PC=DESTINO</p>
<p><strong>IORLW: W OR literal</strong><br />
Se realiza la función lógica OR entre el registro W y la contante &#8220;k&#8221;. El resultado se almacena en el registro W.<br />
Sintaxis: [etiqueta] IORLW k<br />
Flags afectados:  Z<br />
Ejemplo: IORLW Ox35<br />
Antes de la instrucción: W=0&#215;9A<br />
Después de la instrucción: W=0xBF</p>
<p><strong>MOVLW: Carga un literal en W</strong><br />
El registro W se carga con el valor de 8 bits expresado mediante la literal &#8220;k&#8221;.<br />
Sintaxis: [etiqueta] MOVLW k<br />
Ejemplo: MOVLW 0&#215;5A<br />
Después de la instrucción: W=0&#215;5A</p>
<p><strong>RETURN: Regresa de una subrutina</strong><br />
El programa regresa de la subrutina y ejecuta la instruccion que sigue a CALL<br />
Sintaxis: [etiqueta] RETURN</p>
<p><strong>RETLW: Regresa de una subrutina y carga el valor K en W</strong><br />
El programa regresa de la subrutina y carga el valor de 8 bits del registro k en el registro W<br />
Sintaxis: [etiqueta] RETLW,k<br />
Ejemplo: RETLW,0&#215;45<br />
Antes de la instruccion: W=xx<br />
Despues de la instruccion: W=0&#215;45</p>
<p><strong>RETFIE: Regresa de la rutina de servicio</strong><br />
Sintaxis: [etiqueta] RETFIE</p>
<p><strong>SLEEP: Entra en estado de reposo</strong><br />
Al salir, activa el bit de estado  TO y borra el PD. El WDT y el prescaler se borran.Al entrar en el modo SLEEP, se detiene el oscilador.<br />
Sintaxis: [etiqueta] SLEEP<br />
Flags afectados: TO, PD, GPWUF</p>
<p><strong>XORLW: W XOR literal</strong><br />
Realiza la función lógica OR exclusiva entre el contenido del registro W y la constante &#8220;k&#8221; de 8 bits. El resultado se almacena en el registro W.<br />
Sintaxis: [etiqueta] XORLW k<br />
Flags afectados: Z<br />
Ejemplo: XORLW 0xAF<br />
Antes de la instrucción: W = 0xB5<br />
Después de la instrucción: W = 0&#215;1A</p>
<p><strong>SUBLW: Resta L &#8211; W</strong><br />
A una constante &#8220;k&#8221; de 8 bits se le resta el registro W. El resultado es guardado en el mismo registro W.<br />
Sintaxis: [etiqueta] SUBLW k<br />
Flags afectados: C,DC,Z</p>
<p>Y estas son las 35 instrucciones que podemos utilizar para programar los microcontroladores PIC. La razon para que solo se utilicen 35 instrucciones en la programacion es que los PIC son microcontroladores RISC, y estas instrucciones estan bien optimizadas para tener una mayor velocidad de trabajo, una arquitectura mas simple y un codigo mas compacto.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/43/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/43/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=43&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/02/15/conjunto-de-instrucciones-del-pic-16f628-16f628a/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f692212d8c3bca2ea0d6028582097e0e?s=96&#38;d=identicon" medium="image">
			<media:title type="html">micropic</media:title>
		</media:content>
	</item>
	</channel>
</rss>