<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>MicroPIC &#187; Ensamblador</title>
	<atom:link href="http://micropic.wordpress.com/category/ensamblador/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; Ensamblador</title>
		<link>http://micropic.wordpress.com</link>
	</image>
			<item>
		<title>Binario a BCD &#8211; Recorre y Suma+3</title>
		<link>http://micropic.wordpress.com/2007/06/21/binario-a-bcd-recorre-y-suma3/</link>
		<comments>http://micropic.wordpress.com/2007/06/21/binario-a-bcd-recorre-y-suma3/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 23:25:47 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[Ensamblador]]></category>
		<category><![CDATA[Rutinas]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/06/21/binario-a-bcd-recorre-y-suma3/</guid>
		<description><![CDATA[Numero Binario de 8 bits a BCD mediante el algoritmo Recorre y Suma+3
En la entrada anterior se encuentra una rutina para convertir un numero Binario de 8 bits a BCD empleando un metodo de division po restas sucesivas. En esta ocasion presento una rutina para lograr la misma conversion de Binario a BCD empleando el [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=69&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Numero Binario de 8 bits a BCD mediante el algoritmo Recorre y Suma+3</strong></p>
<p>En la entrada anterior se encuentra una rutina para <a href="http://micropic.wordpress.com/2007/06/21/conversion-binaria-a-bcd-convertir-un-numero-de-8-bits/" target="_blank">convertir un numero Binario de 8 bits a BCD</a> empleando un metodo de division po restas sucesivas. En esta ocasion presento una rutina para lograr la misma conversion de Binario a BCD empleando el algoritmo <a href="http://www.engr.udayton.edu/faculty/jloomis/ece314/notes/devices/binary_to_BCD/bin_to_BCD.html">Recorre y Suma+3</a>.</p>
<p><span id="more-69"></span></p>
<p>El algoritmo funciona de la siguiente manera:</p>
<ul>
<li>Recorre 1 bit a la izquierda el numero binario.</li>
<li>Si se han hecho 8 corrimientos, el numero BCD se encuentra en las columnas <em>CENTENAS, DECENAS y UNIDADES</em>.</li>
<li>Si el valor binario de cualquiera de las columnas BCD es <em>5 o mayor</em>, se suma 3 al valor en esta columna BCD.</li>
<li>Si se desea convertir un byte despues de haber efectuado 8 corrimientos la conversion ha finalizado, para 2 bytes se necesitarian 16 y asi sucesivamente.</li>
</ul>
<p>Es un metodo muy facil de entender y aplicar. Utilizando este algoritmo la rutina que permite convertir un numero binario de 8 bits a BCD es la siguiente:</p>
<pre><font color="#993366">BIN2BCD_RS3
        <font color="#000080">clrf     </font>BCDH
        <font color="#000080">clrf     </font>BCDL

        <font color="#000080">movlw    0x08</font>
        <font color="#000080">movwf    </font>CUENTA

CONVERSION1
        <font color="#000080">bcf      </font>STATUS,C
        <font color="#000080">rlf      </font>BIN,f
        <font color="#000080">rlf      </font>BCDL,f
        <font color="#000080">decfsz   </font>CUENTA,f
        <font color="#000080">goto     </font><font color="#808080">$+</font><font color="#000000">2</font>
        <font color="#000080">goto     </font>TERMINA_CONVERSION
        <font color="#000080">movlw    b'00001111'</font>
        <font color="#000080">andwf    </font>BCDL,w
        <font color="#000080">movwf    </font>BCD_TEMP
        <font color="#000080">movlw    0x05</font>
        <font color="#000080">subwf    </font>BCD_TEMP,w
        <font color="#000080">btfsc    </font>STATUS,C
        <font color="#000080">call     </font>SUMA0x03
        <font color="#000080">movlw    b'11110000'</font>
        <font color="#000080">andwf    </font>BCDL,w
        <font color="#000080">movwf    </font>BCD_TEMP
        <font color="#000080">movlw    0x50</font>
        <font color="#000080">subwf    </font>BCD_TEMP,w
        <font color="#000080">btfsc    </font>STATUS,C
        <font color="#000080">call     </font>SUMA0x30
        <font color="#000080">goto     </font>CONVERSION1

TERMINA_CONVERSION
        <font color="#000080">return </font></font></pre>
<p>Al igual que la rutina anterior, antes de llamar a esta rutina de conversion es necesario tener almacenado el numero que se desea convertir en la variable <strong><em>BIN</em></strong>. Al finalizar la rutina el numero BCD estara almacenado en las variables <strong><em>BCDH </em></strong>y <strong><em>BCDL. </em></strong>El nibble bajo de BCDH tendra almacenadas las <em>CENTENAS</em>, el nibble alto de BCDL las <em>DECENAS </em>y el nibble bajo de BCDL las <em>UNIDADES</em>.</p>
<p>De nuevo hay que tener en cuenta que al realizar la conversion el numero que se tenia en un principio en la variable BIN es destruido, asi que se debe tener un respaldo de su valor en otro registro si se desea seguir trabajando con el.</p>
<p>Las rutinas SUMA0&#215;03 Y SUMA0&#215;30 simplemente se encargan de sumar 3 a la columna BCD que lo necesite. Estas rutinas se encuentran en el codigo de la rutina.</p>
<p>Descargar codigo: <a href="http://micropic.files.wordpress.com/2007/06/conversion-numero-binario-de-8-bits-a-bcd-recorre-y-suma3.pdf" title="conversion-numero-binario-de-8-bits-a-bcd-recorre-y-suma3.pdf">Conversion numero Binario de 8 bits a BCD &#8211; Recorre y Suma+3</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/69/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/69/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=69&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/06/21/binario-a-bcd-recorre-y-suma3/feed/</wfw:commentRss>
		<slash:comments>36</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>Conversion Binario a BCD &#8211; Convertir un numero de 8 bits</title>
		<link>http://micropic.wordpress.com/2007/06/21/conversion-binaria-a-bcd-convertir-un-numero-de-8-bits/</link>
		<comments>http://micropic.wordpress.com/2007/06/21/conversion-binaria-a-bcd-convertir-un-numero-de-8-bits/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 16:41:33 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[Ensamblador]]></category>
		<category><![CDATA[Rutinas]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/06/21/conversion-binaria-a-bcd-convertir-un-numero-de-8-bits/</guid>
		<description><![CDATA[Convertir un numero Binario de 8 bits a BCD
El Codigo binario decimal (BCD) es un codigo para numeros decimales en el que cada digito es representado por su propia secuencia binaria. Su principal ventaja es que permite una conversion facil a digitos decimales para su despliegue y permite tambien realizar calculos decimales mas rapidos.
Aqui se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=66&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Convertir un numero Binario de 8 bits a BCD</strong></p>
<p>El <em><strong>Codigo binario decimal</strong></em> (BCD) es un codigo para numeros decimales en el que cada digito es representado por su propia secuencia binaria. Su principal ventaja es que permite una conversion facil a digitos decimales para su despliegue y permite tambien realizar calculos decimales mas rapidos.</p>
<p>Aqui se presenta una rutina para convertir un numero binario a BCD, precisamente un numero de 8 bits (1 byte) a su equivalente BCD. El valor maximo de un byte es <em><strong>0xFF = 255</strong></em>, asi que al convertir un <em>numero binario de 8 bits</em> se obtienen <em>3 digitos BCD</em>.</p>
<p><span id="more-66"></span>Esta rutina convierte el numero binario a su equivalente BCD empaquetado.  El resultado de la conversion del numero binario a BCD ocupa un byte y medio y se representa en las variables de memoria <em><strong>BCDH </strong></em>y <strong><em>BCDL</em></strong>. El numero binario a convertir debe estar almacenado en la variable <em><strong>BIN</strong>.</em></p>
<pre>ej. 0xFF = 255
 BIN -&gt; BCDH:BCDL
  FF     02   55</pre>
<p>La conversion se hace realizando <strong><em>divisiones mediante restas sucesivas</em></strong>. Primero entre 100 para obtener el nibble bajo de BCDH y despues entre 10 para obtener el nibble alto de BCDL y el residuo pasa a formar el nibble bajo de BCDL.</p>
<p>El codigo de la rutina es el siguiente:</p>
<pre><font color="#993366">BIN8_BCD3
        <font color="#000080">clrf    </font>BCDH
        <font color="#000080">clrf    </font>BCDL</font><font color="#993366">
</font><font color="#993366">BCD_HIGH
        <font color="#000080">movlw   </font><font color="#008000">.100</font>
        <font color="#000080">subwf   </font>BIN,f
        <font color="#000080">btfss   </font>STATUS,C
        <font color="#000080">goto    </font>SUMA_100
        <font color="#000080">incf    </font>BCDH,f
        <font color="#000080">goto    </font>BCD_HIGH
SUMA_100
        <font color="#000080">movlw   </font><font color="#008000">.100</font>
        <font color="#000080">addwf   </font>BIN,f
        <font color="#000080">movlw   0x0F</font>
        <font color="#000080">movwf   </font>BCDL
BCD_LOW <font color="#000080">movlw   </font><font color="#008000">.10</font>
        <font color="#000080">subwf   </font>BIN,f
        <font color="#000080">btfss   </font>STATUS,C
        <font color="#000080">goto    </font>SUMA_10
        <font color="#000080">incf    </font>BCDL
        <font color="#000080">movlw   0x0F</font>
        <font color="#000080">iorwf   </font>BCDL
        <font color="#000080">goto    </font>BCD_LOW
SUMA_10 <font color="#000080">movlw   </font><font color="#008000">.10</font>
        <font color="#000080">addwf   </font>BIN,f
        <font color="#000080">movlw   0xF0</font>
        <font color="#000080">andwf   </font>BCDL,f
        <font color="#000080">movf    </font>BIN,w
        <font color="#000080">iorwf   </font>BCDL,f</font></pre>
<pre><font color="#993366">        <font color="#000080">return</font></font></pre>
<p>Antes de llamar a la rutina de conversion es necesario tener almacenado el numero que se desea convertir en la variable BIN. Al finalizar la rutina el numero BCD estara almacenado en las variables BCDH y BCDL. BCDH tendra el numero BCD mas significativo mientras que en BCDL se encontraran los dos numeros restantes, siendo el nibble alto de BCDL el mas significativo de los dos y el nibble bajo de BCDL el menos significativo.</p>
<p>De este modo se logra convertir un numero binario de 8 bits a su equivalente BCD. Solamente hay que tener en cuenta que al realizar la conversion el numero que se tenia en un principio en la variable BIN es destruido, asi que se debe tener un respaldo de su valor en otro registro si se desea seguir trabajando con el.</p>
<p>Descargar codigo: <a href="http://micropic.files.wordpress.com/2007/06/conversion-numero-binario-de-8-bits-a-bcd.pdf" title="conversion-numero-binario-de-8-bits-a-bcd.pdf">Conversion numero Binario de 8 bits a BCD</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/66/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/66/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=66&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/06/21/conversion-binaria-a-bcd-convertir-un-numero-de-8-bits/feed/</wfw:commentRss>
		<slash:comments>13</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>Teclado Matricial 4&#215;4</title>
		<link>http://micropic.wordpress.com/2007/06/13/teclado-matricial-4x4/</link>
		<comments>http://micropic.wordpress.com/2007/06/13/teclado-matricial-4x4/#comments</comments>
		<pubDate>Thu, 14 Jun 2007 02:02:57 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[Ensamblador]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Rutinas]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/06/13/teclado-matricial-4x4/</guid>
		<description><![CDATA[Un teclado matricial es un simple arreglo de botones conectados en filas y colúmnas, de modo que se pueden leer varios botones con el mínimo número de pines requeridos. Un teclado matricial 4&#215;4 solamente ocupa 4 lineas de un puerto para las filas y otras 4 lineas para las colúmnas, de este modo se pueden [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=60&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Un <strong><em>teclado matricial</em></strong> es un simple <strong><em>arreglo de botones conectados en filas y colúmnas</em></strong>, de modo que se pueden leer varios botones con el mínimo número de pines requeridos. Un teclado matricial 4&#215;4 solamente ocupa 4 lineas de un puerto para las filas y otras 4 lineas para las colúmnas, de este modo se pueden leer 16 teclas utilizando solamente 8 líneas de un microcontrolador. Si asumimos que todas las columnas y filas inicialmente están en alto (1 lógico), la pulsación de un botón se puede detectar al poner cada fila a en bajo (0 lógico) y checar cada columna en busca de un cero, si ninguna columna está en bajo entonces el 0 de las filas se recorre hacia la siguiente y así secuencialmente.</p>
<p><span id="more-60"></span>Un modo simple de detectar la tecla presionada es incrementar una variable con la cuenta de las teclas revisadas, de este modo al detectaruna pulsación el valor de la cuenta será el valor de la tecla presionada. Si al final no se presionó ninguna tecla la variable se pone a cero y la cuenta vuelve a comenzar. <em>El puerto B del microcontrolador 16f628</em> (así como en el 16f877) <em>viene preparado especialmente para el control de un teclado matricial 4&#215;4</em>. Para tener siempre un valor de 1 lógico en las colúmnas del teclado (parte alta del puerto B del pic) es necesario conectar resistencias de pull-up, sin embargo el puerto B cuenta con resistencias de pull-up integradas, de ese modo es posible trabajar con un teclado matricial sin necesidad de ningún componente externo.</p>
<p>Las resistencias de pull-up del puerto B se habilitan poniendo en 0 el bit NOT_RBPU del registro OPTION_REG.Al método aqui expuesto para detectar la pulsación de una tecla en un teclado matricial se le conoce como muestreo secuencial. Existen otros, sin embargo esté es tal vez el más sencillo. En el siguiente ejemplo cada tecla del teclado matricial tiene un valor de 0 a F, valor que se despliega en un display de 7 segmentos. El el código necesario para leer un teclado matricial con un microcontrolador pic 16f628 es el siguiente.</p>
<p><strong>Programa principal:</strong></p>
<p><img src="http://micropic.files.wordpress.com/2007/06/tm1.png" alt="tm1.png" /></p>
<p>El programa principal es muy sencillo, simplemente configura el puerto A como salida, la parte baja del puerto B también como salida y la parte alta del puerto B como entrada. Además <em>de configurar los puertos también se habilitan las resistencias de pull-up internas</em> con la línea <strong><em>bcf OPTION_REG,NOT_RBPU</em></strong>. Después de la configuración se llama a una rutina llamada <strong><em>TECLADO</em></strong> encargada de escanear el teclado y regresar el valor de la tecla pulsada para poder desplegar el número correspondiente en un display de 7 segmentos y el programa ahí se queda en un ciclo llamando a la rutina TECLADO y después desplegando y repitiendo lo mismo cíclicamente.La rutina <em>TECLADO</em> escanea el teclado matricial usando el método que ya se mencionó.</p>
<p>Primero se carga un 0 a la primer fila, después se checa columna a columna si hay un cero, en caso de que no se detecte ningún cero, el cero de las filas se recorre y se vuelven a revisar las columnas. Si no se detectó ningún cero significa que no se presionó ninguna tecla y la rutina vuelve a comenzar. Si se detectó un cero significa que se presionó una tecla y en ese momento la salta a la rutina <strong><em>ANTIRREBOTES</em></strong>. Después de eliminar los rebotes se decodifica la tecla pulsada utilizando una tabla como la que se utilizó en el ejemplo del <a href="http://micropic.wordpress.com/2007/02/26/displays-de-7-segmentos/" target="_blank">display de 7 segmentos</a>.</p>
<p><img src="http://micropic.files.wordpress.com/2007/06/tm2.png" alt="tm2.png" /></p>
<p><img src="http://micropic.files.wordpress.com/2007/06/tm3.png" alt="tm3.png" /></p>
<p>Existen otros métodos de manejar teclados matriciales, pero creo que ésta es la más sencilla. Para terminar una imágen del circuito:</p>
<p><a href="http://micropic.files.wordpress.com/2007/06/tm4.png" title="tm4.png"><img src="http://micropic.files.wordpress.com/2007/06/tm4.png" alt="tm4.png" height="281" width="429" /></a></p>
<p>Descargar el código: <a href="http://micropic.files.wordpress.com/2007/06/teclado-matricial-4x4.pdf" title="teclado-matricial-4x4.pdf">Teclado Matricial 4&#215;4</a>.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/60/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/60/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=60&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/06/13/teclado-matricial-4x4/feed/</wfw:commentRss>
		<slash:comments>30</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/06/tm1.png" medium="image">
			<media:title type="html">tm1.png</media:title>
		</media:content>

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

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

		<media:content url="http://micropic.files.wordpress.com/2007/06/tm4.png" medium="image">
			<media:title type="html">tm4.png</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>
		<item>
		<title>Lenguaje Ensamblador</title>
		<link>http://micropic.wordpress.com/2007/01/17/lenguaje-ensamblador/</link>
		<comments>http://micropic.wordpress.com/2007/01/17/lenguaje-ensamblador/#comments</comments>
		<pubDate>Wed, 17 Jan 2007 23:22:27 +0000</pubDate>
		<dc:creator>micropic</dc:creator>
				<category><![CDATA[Ensamblador]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://micropic.wordpress.com/2007/01/17/lenguaje-ensamblador/</guid>
		<description><![CDATA[El ensamblador que utiliza MPLAB por defecto y el que utilizaremos para programar los PIC es MPASM. Los elementos básicos del lenguaje ensamblador son:

Etiquetas
Instrucciones
Operandos
Directivas
Comentarios

Para la programación se utiliza una cierta tabulación que se debe respetar, además utilizar una tabulación adecuada hace los programas más claros y legibles. Las etiquetas se escriben en la primer columna de cualquier línea, las instrucciones y directivas en la segunda y por último, en la tercer columna, los operandos. Los comentarios se pueden escribir en cualquier parte del programa.
Etiquetas
Una etiqueta es una palabra utilizada para designar alguna línea o sección del programa, se pueden utilizar para saltar de una parte hacia esa etiqueta. Es importante que las etiquetas empiecen con una letra o con un guión bajo &#8220;_&#8221;. La [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=8&subd=micropic&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>El ensamblador que utiliza MPLAB por defecto y el que utilizaremos para programar los PIC es <em>MPASM</em>. Los elementos básicos del lenguaje ensamblador son:</p>
<ul>
<li>Etiquetas</li>
<li>Instrucciones</li>
<li>Operandos</li>
<li>Directivas</li>
<li>Comentarios</li>
</ul>
<p>Para la programación se utiliza una cierta tabulación que se debe respetar, además utilizar una tabulación adecuada hace los programas más claros y legibles. Las etiquetas se escriben en la primer columna de cualquier línea, las instrucciones y directivas en la segunda y por último, en la tercer columna, los operandos. Los comentarios se pueden escribir en cualquier parte del programa.</p>
<p><span id="more-8"></span><strong>Etiquetas</strong></p>
<p>Una etiqueta es una palabra utilizada para designar alguna línea o sección del programa, se pueden utilizar para saltar de una parte hacia esa etiqueta. Es importante que las etiquetas empiecen con una letra o con un guión bajo &#8220;_&#8221;. La longitud de una etiqueta puede ser de hasta 32 caracteres y como ya se dijo se deben escribir en la primer colúmna.</p>
<p><strong>Instrucciones</strong></p>
<p>Las instrucciones son las operaciones que realiza el microcontrolador, así que estas ya estan definidas para cada familia de PIC. El 16F628a así como todos los PICs de gama media utiliza un conjunto de 35 instrucciones que están definidas en la hoja de datos del PIC.</p>
<p><strong>Operandos</strong></p>
<p>Son los elementos que emplea la instrucción que se está ejecutando. Usualmente los operandos son los registros, las variables o las constantes.</p>
<p><strong>Directivas</strong></p>
<p>Las directivas son similares a las instrucciones, pero a diferencia de estas las directivas son propias del lenguaje ensamblador e independientes del microcontrolador que se utilice. Las directivas representan algunas  características del lenguaje ensamblador, se utilizan para especificar el procesador empleado así como la configuración de este, también para asignar locaciones de memoria, entre otras cosas.</p>
<p><strong>Comentarios</strong></p>
<p>Los comentarios son las palabras, frases y oraciones que se pueden escribir en el código para hacer el programa más claro y legible, o solo para recordar el momento =P. Los comentarios se pueden escribir en cualquier parte del código pero siempre deben empezar con punto y coma &#8221;;&#8221;.</p>
<p><strong>Un programa de prueba</strong></p>
<p>El siguiente ejemplo es un programa simple escrito en ensamblador donde se  muestran los elementos básicos del lenguaje:</p>
<p STYLE="text-align: center"><img SRC="http://micropic.files.wordpress.com/2007/01/programa1.png" ALT="Primer programa" /></p>
<p>Este ejemplo se escribió usando MPLAB, se puede ver que MPLAB reconoce la sintaxis del lenguaje ensamblador y utiliza diferentes colores para los diferentes elementos del código. Las directivas se muestran en azul, las instrucciones en azul y en negritas, los comentarios son mostrados en verde y por ultimo las etiquetas y los operandos se muestran en color lila.</p>
<p>La primer directiva &#8221;<em>list</em>&#8220; sirve para especificar el PIC seleccionado, en este caso fue el 16F628a. La directiva &#8220;<em>include</em>&#8221; se utiliza para incluir un archivo externo en el programa. Con la directiva &#8220;<em>__config</em>&#8221; se establece la configuración del PIC, el tipo de reloj usado, la configuración del watchdog, el reset interno, etc. &#8221;<em>org</em>&#8220; define la dirección de memoria a partir de la cual el programa se guarda y &#8221;<em>end</em>&#8220; es la directiva que marca el final del programa, esta directiva es muy importante y nunca debe faltar en el código, además todo lo que se escriba después de esa directiva directamente será ignorado.</p>
<p>Este es un programa muy simple, comienza con la directiva &#8220;<em>org</em>&#8221; , después la instrucción <em>goto</em> dirige el flujo del programa hacia la etiqueta &#8220;<em>Inicio</em>&#8220;. El siguiente paso es seleccionar el banco de memoria 1 (<em>bsf STATUS,RPO</em>) para poder configurar el puerto B como salida (<em>clrf PORTB</em>), después volvemos al banco de memoria 0 (<em>bcf STATUS,RPO</em>) y por último ponemos todos los pines del puerto B a &#8220;1&#8243;(<em>movlw 0xFF, movwf PORTB</em>) y con eso el programa prácticamente está finalizado. Se incluye la etiqueta &#8221;<em>Ciclo</em>&#8220; y la última instruccion g<em>oto</em> para que el programa se quede ciclado en ese punto (<em>goto Ciclo</em>). Al final se incluye la directiva &#8221;<em>end</em>&#8220; que es necesaria para que el programa ensamblador sepa que no hay más instrucciones que interpretar.</p>
<p>Este programa puede servir de toma de contacto en esto de la programación en ensamblador, más adelante se verán las instrucciones y directivas con mayor detalle.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/micropic.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/micropic.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/micropic.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/micropic.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/micropic.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/micropic.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/micropic.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/micropic.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/micropic.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/micropic.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/micropic.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/micropic.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=micropic.wordpress.com&blog=672997&post=8&subd=micropic&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://micropic.wordpress.com/2007/01/17/lenguaje-ensamblador/feed/</wfw:commentRss>
		<slash:comments>34</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>