Vous êtes sur la page 1sur 13

EL PRIMER CONTACTO CON EL PIC16X84

De antemano disculpas por cualquier fallo en este escrito, ya que no es hecho por un
electrnico, sino por un aficionado que pretende ser algn da un programador. Y a todas
estas, lo bonito del los microcontroladores no est para mi! en el hard"are sino en la
programacin.
#os temas a tratar son los siguientes$
%&ntroduccin al '&()*+,- 'eque.o, pobre, pero resultn!
%/ariantes del '&()*+,+
%Diferencias entre el '&()*(,- con lo dems modelos '&()*+,+
%#a frecuencia de funcionamiento, el relo0
%1'ara qu2 y cmo programar '&(3s4
%'rimer e0emplo5 6prendiendo a 7umar 678!
%90ecutar nuestro programa simulando con el 7imupic3,-!
% 678 :s. (;(<<= 9ficiencia :s. (omodidad
Importante$ es recomendado que la gente que est interesada en la parte de electrnica
revise todos los puntos... los que solo se interesan en la programacin (que es en ASM y C),
se pueden saltar a la parte de Para qu y cmo programar PC!s"
>ueno... he aqu mi granito de arena. (onsiderando que mucha gente no conoce o quisiera
conocer acerca de los microcontroladores, me :eo en la obligacin de aportar un poco acerca
de, en mi opinin, el microcontrolador ms fcil de mane0ar y programar la familia
'&()*+,-, es decir '&()*(,- y '&()*?,-!.
8ucha gente, me incluyo, cuando est comen@ando en este mundillo :e a los
microcontroladores y a la programacin en 678 como algo raro y de otro mundo... cuando
en :erdad es algo realmente sencillo. 6s que si ests interesado en aprender un poco de
electrnica o 'rogramacin en 678 esto te puede ayudar a aclarar muchas dudas.
8enos charla, ms accin$
Pequeo, pobre, pero resut!n
9ste mara:illoso '&( pertenece a la familia de la gama media y dentro de ella es uno de los
ms peque.os= solo tiene ), patitas. 6dems es el que dispone de menos recursos.
9l resto de sus parientes tiene con:ersores 6D y D6, comparadores analgicos, tensin
interna de referencia, ms lneas de 9;7, ms capacidad en sus memorias, :arios
tempori@adores y un largo etc2tera de dispositi:os de los que el '&()*+,- carece.
9s pobre de mantenimiento... pero he escogido este '&(, en sus dos :ersiones ( y ?,
porque cumple con los requisitos esenciales para ense.ar a mane0ar los microcontroladores y
para comen@ar para dise.ar proyectos. 9s prctico, es sencillo y es econmico, pudi2ndolo
considerar como el paradigma para su empleo en todos los peque.os proyectos que reali@an
los aficionados, los estudiantes y los que quieren progresar en sus conocimientos de lo fcil a
lo difcil. 6dems si aprendes a mane0ar este '&(, migrar hacia los dems es muy sencillo.
#a ra@n eAclusi:a por la que este '&( es tan requerido, es por el tipo de memoria de
programa que posee. 9l PIC16C84 posee una EEPROM de )B palabras de )- bits cada una.
9l PIC16"84 tiene la misma capacidad de memoria de instrucciones pero de tipo "as#.
6mbos poseen una capacidad de *- bytes 99'CD8 como memoria de datos auAiliar y
opcional.
#a memoria 99'CD8 y la ?lash son el2ctricamente grabables y borrables, lo que permite
escribir y borrar el programa ba0o prueba manteniendo el microcontrolador ba0o el mismo
dispositi:o grabar y borrar. 9sta caracterstica supone una gran :enta0a con la mayora de
los microcontroladores, que tienen como memoria de programa reescribible una tipo 9'CD8.
7e graban el2ctricamente, pero para borrarlas hay que eAponerlas cierto tiempo a rayos
ultra:ioleta, lo que implica tener que sacar el chip del @calo para poderlo borrar.
M$%ro%#$p ha introducido la memoria ?lash porque tiene mayores posibilidades de aumentar
su capacidad con relacin a la 99'CD8. 'ero sin embargo la 99'CD8 soporta ).EEE.EEE
ciclos de escritura;borrado frente a los ).EEE de la ?lash.
Dtra de las grandes :enta0as del '&()*+,- en cuanto a escritura, borrado y reescritura! es
su sistema de grabacin de datos, que se reali@a en serie. 'ara escribir un programa en la
memoria se manda la informacin en serie usando solo dos patitas$ la C>* para la se.al de
relo0 y la C>F para los bits de datos de serie. >ueno, no os asust2is con eso de los C>* y C>F
que ms adelante os lo eAplico.
6 continuacin la Gar0eta de presentacin de los '&()*+,- con sus datos personales ms
significati:os$
(ita de$ ?icha t2cnica de los '&()*+,-
8emoria de programa$ )BA)-, 99'CD8 '&()*(,-! y ?lash '&()*?,-!
8emoria de datos C68$ H* bytes '&()*(,-! y *, bytes '&()*?,-!
8emoria de datos 99'CD8$ *- bytes para todos lo modelos
'ila stacI!$ De , Ji:eles
&nterrupciones$ - tipos diferentes
9ncapsulado$ 'lstico D&' de ), patitas
?recuencia de traba0o$ )E8K@ mAima
Gempori@adores$ 7lo uno, el G8CE. Gambi2n tienen 'erro guardin LDG!
#neas de 9;7 Digitales$ )H M 'uerta 6 y , 'uesta >!
(orriente mAima absorbida$ ,Em6 'uerta 6 y )MEm6 'uerta >
(orriente mAima suministrada$ MEm6 'uerta 6 y )EEm6 'uerta >
(orriente mAima absorbida por lnea$ NMm6
(orriente mAima suministrada por lnea$ NEm6
/olta0e de alimentacin /DD!$ De N a * / D(
/olta0e de grabacin /''!$ De )N a )- / D(
&ar$antes 'e PIC16X8X
7e comerciali@an :arios chips correspondientes a la familia de los '&()*+,+, que atienden
di:ersas caractersticas.
1( ?recuencia mAima de funcionamiento
)( Gipo de oscilador eAterno usado para generar la frecuencia de relo0.
*( 8argen de :olta0e de alimentacinO;listP
#os modelos que tienen de intermedio la referencia C, " o CR admiten el rango de
alimentacin de :olta0e estndar, que es el que oscila de - a -,M / D( como mnimo, hasta
M,M a * / D( como mAimo. #os modelos con las letras LC, L" o LCR intermedias admiten el
rango de :olta0e eAtendido, que abarca desde los N / hasta los * / D(.
#a buena aceptacin del '&()*(,- ha animado al fabricante 8icrochip a comerciali@ar nue:as
:ersiones. Ka dise.ado cuatro nue:os modelos$
%'&()*?,-
%'&()*(C,-
%'&()*?,H
%'&()*(C,H
Dos de ellos intercalan la letra ? indicando as que la memoria 99'CD8 se ha sustituido por
otra de tipo ?lash. #os otros modelos la sustituyen por memoria CD8 con mscara, pero
todos ellos mantienen los *- bytes de 99'CD8 para datos.
+$,eren%$as entre e PIC16C84 %on o 'em-s mo'eos PIC16X8X
1( #a memoria de programa es de tipo ?lash en los '&()*?,+ y de tipo CD8 en los
'&()*(C,+
)( 9l '&()*?,- y el '&()*(C,- tienen mayor capacidad de la C68 de datos. Disponen de *,
bytes en lugar de los H* del '&()*(,-.
*( 7e ha in:ertido la polaridad del bit de control 'LCG9, que acti:a y desacti:a un
tempori@ador encargado de retrasar el funcionamiento del '&( al aplicarle la alimentacin.
4( 7e ha incorporado un filtro a la entrada de la patita 8(#CQ, por lo que se requiere un
pulso de mayor duracin para generar el Ceset.
.( 7e han me0orado muchas especificaciones el2ctricas en los modelos ? y (C.O;listP
E aspe%to e/terno
9ste '&( est desarrollado con te%noo01a CMO2 de altas prestaciones y encapsulado en
plstico con ), patitas. DI, ahora comento bre:emente la misin de cada patita.
&++$ 'atita por la que se aplica la
tensin positi:a de la alimentacin.
&22$ 'atita conectada a la tierra o
negati:o de la alimentacin.
O2C13CL4IN$ 'atita por la que se
aplica la entrada del circuito oscilador
eAterno que proporciona la frecuencia
de traba0o del microcontrolador.
O2C)3CL4O5T$ 'atita auAiliar del
circuito oscilador.
MCLR6$ 9sta patita es acti:a con ni:el
lgico ba0o, lo que se representa con el
smbolo Q. 9n pocas palabras con esta
reseteas el '&(.
RA78RA4$ 7on las lneas de 9;7
digitales correspondientes a la puerta
6. #a lnea C6-
R978R9:$ estas , patitas
corresponden a las , lneas de 9;7
digitales de la puerta >. #a lnea C>E
multipleAa otra funcin, que es la de
ser:ir como entrada a otra peticin
eAterna de interrupcin, por eso se le
denomina C>E;&JG.
(itar
#os '&()*+,+ tienen un encapsulado de ), patitas, dos de ellas soportan la tensin de
alimentacin, otras dos reciben la se.al de oscilador eAterno y otra se utili@a para generar un
Ceset. #as )H patitas restantes funcionan como lneas de 9;7 para controlar las aplicaciones.
La ,re%uen%$a 'e ,un%$onam$ento, e reo;
#a frecuencia de traba0o del microcontrolador es sumamente importante para establecer la
:elocidad en el proceso de instrucciones y el consumo de energa.
1Ru2 co.os significa esto4... bien, paso a eAplicar. 'or e0., cuando un '&()*+,+ funciona a
)E 8K@ le corresponde un ciclo de instruccin de -EE ns... 1por qu24 'ues porque cada
instruccin tarda en e0ecutarse cuatro periodos de relo0, o sea, -A)EE ns. 6hhh se me
ol:idaba$ cada instruccin se e0ecuta en un ciclo, menos las de salto que se demoran el
doble.
9ueno mu< bon$to to'o pero((( =para qu> < %!mo pro0ramo m$%ro%ontroa'ores?
8uchas :eces cuando nos metemos en el mundillo de la programacin, nos preguntamos si
los resultados de nuestra programacin podran ser ms palpables, y a :eces por lo menos
yo! ni nos imaginamos que podemos crear soft"are que manipule (hips directamente.
9l para qu2 programar microcontroladores es muy sencillo. 'or e0emplo, hoy en da, casi
todos los aparatos funcionan con microcontroladores. Desde las puertas automticas de un
sper mercado, pasando por los controles de computadores, hasta la la:adora de mam.
9sto nos da a entender, a grosso modo, que el mercado de los microcontroladores es muy
amplio y por ende apetecido= lo que se :uel:e en una tentati:a para comen@ar conocer y
mane0ar estos mara:illosos dispositi:os.
'ara el cmo he aqu una bre:e eAplicacin de cmo se modela soft"are para
microcontroladores, los pasos a seguir son ms o menos los siguientes$
% (rear el algoritmo
% (odificar
% (ompilar
% 90ecutar y Depurar
% Srabar
% 8ontar
8s o menos la eAplicacin sera$ dice.amos el algoritmo del programa que deseemos crear.
9n lo personal no me gustan los tales diagramas de flu0o ni ninguna co.ada de esas, si acaso
el pseudoTcdigo y listo.
Co'$,$%ar o codear como dicen algunos! es la parte que ms me gusta, y consiste en crear
el %!'$0o ,uente del programa con el >locI de Jotas, el 9dit, el /im, el 9macs o cualquier
editor de teAto plano. 9ste archi:o lo deber2is guardar con la eAtensin .678, ya te estar2is
imaginando que la programacin ser en 6ssembler 1no4
9s muy comn que uno oiga hablar del famoso 6ssembler5 que 678 esto, que 678 lo otro,
que 678 es difcil, que ahora es fcil, etc. 'ero la :erdad no le :emos mucho sentido utili@ar
este lengua0e de ba0o ni:el! para programar si acaso si nos interesamos un poco por 2l
cuando sentimos curiosidad por el mundo del (racIing!, ya que para eso est el (<<, Ua:a y
los dems. 'ues bien, lleg la hora de tratar de aprender un poco de este, y que de0e de ser
un bicho raro. 'ara ello desarrollaremos unos e0ercicios, pero ms adelante, ahora sigo
eAplicando el modelado de soft"are.
#a fase de %omp$a%$!n es muy similar a la que hay en lengua0es como ( o Ua:a, y consiste
pasar el cdigo por un compilador en mi caso 8'678! que determinar si eAisten errores
de sintaAis, y de lo contrario crea un archi:o .K9+ es como cuando se crean .eAe a partir de
un cdigo en (!. #a eAtensin es .K9+ porque lo que hace es pasar el cdigo a instrucciones
en KeAadecimal no eAactamente, pero quedaros con ello mientras tanto!.
>ueno, despu2s necesitamos :erificar si en realidad nuestro soft"are funciona. 'ero JD
resultara muy :iable pasar el soft"are directamente a un 8icrocontrolador sin haberlo
probado, por ello se han in:entado los famosos simuladores. (omo os podr2is imaginar lo
que hacen estos programas es simular la e;e%u%$!n del programa en el chip, para poder
'epurar los posibles errores de lgica. 'ara que :ayas a:eriguando uno de los me0ores
simuladores es el 7imupic.
9l proceso de 0raba%$!n se hace a tra:2s de una quemadora de '&(3s en (olombia se le
dice quemadora, en otros lados le dicen grabadora, tostadora y que se yo!, que es un
hard"are que se conecta a un puerto serial de :uestra '(, y en donde se incrusta el
microcontrolador a quemar.
9l proceso de 0raba%$!n se lle:a a cabo, ob:iamente, a tra:2s de un soft"are especial. 9n
mi caso utili@o de &('rog5 ms adelante tal :e@ eAplique su uso.
9l monta0e es en s el proceso en el que colocamos nuestro chip en el circuito final, o en una
protoboard de ensayos. 9sto ob:iamente para que cumpla con las acciones que hemos
programado.
Pr$mer e;empo@ Apren'$en'o a 2umar
>ueno, antes de codear tenemos que aprendernos algunos conceptos5 no os desesper2is.
Godos los computadores saben sumar y nuestro '&()*+,- tambi2n. >ueno, el caso es que
solo saben sumar en binario, porque son mquinas electrnicas digitales. 9l sumador del '&(
es capa@ de sumar dos datos de , bits cada uno. Dicho sumador tiene un registro, llamado
A de traba;o!, en donde alo0a uno de los dos sumandos. 9l otro sumando debemos decir lo
que :ale o en que posicin de memoria est.
6ntes de poner el enunciado del problema, miraremos las instrucciones que :amos a usar$
Instru%%$!n moB
9sta instruccin es tpica en todos los procesadores y su misin es transferir el contenido de
un registro fuente f! a un destino d!. 9n los microcontroladores '&( todos los datos
residen en posiciones de memoria de datos y slo el registro de traba0o L se sal:a de esta
regla. 9sto significa que mov puede mo:er tres tipos de operandos fundamentales$
). 9l contenido del registro L
N. 9l contenido de una posicin de la memoria de datos o registro.
H. Vn literal o :alor inmediato que se incluye en el cdigo mquina de la propia
instruccin.
'ara gestionar los posibles operandos eAisten tres :ariantes de mov$
movf f,d$ 8ue:e el contenido del operando fuente, que es una posicin de la memoria de
datos, al destino, que bien puede ser L cuando dWE, o el propio fuente cuando dW).
movwf f$ 8ue:e el contenido del registro L a la posicin de la memoria de datos identificada
por f. Ceali@a la transferencia LTXf.
movlw k$ 8ue:e el literal I incluido en el cdigo de la instruccin al registro L, ITXL.
Instruccin add
addwf f,d$ 7uma el contenido del registro L con el de f y deposita el resultado en L si el
:alor de dWE, mientras que si dW) lo deposita en f.
addlw k$ 7uma al contenido del registro L el literal que acompa.a a la instruccin y
deposita el resultado en L L<ITXL!.
>ien, hasta aqu todo bien, pero s2 que con an no os queda claro y la me0or forma de
aclarar todo lo que he intentado eAplicar es con un e0emplo$
Enun%$a'o 'e probema
9l e0ercicio debe mane0ar tres posiciones de memoria de datos. 9n la direccin EAEc
recordemos que las posiciones de memoria se mane0an con nmeros heAadecimales! se
depositar el primer operando= en la EAEd el segundo y en la EAEe el resultado de la suma
de los primeros operandos. (omo :alor para el primer operando se :a a usar M y como
segundo operando el )N.
Nota$ en muc#as $uentes de in$ormacin se mane%an los n&meros #e'adecimales de otra
$orma( por e%emplo es lo mismo si ves) *'*c, #!*c!, *c *C#. +sto nos indica que #ay
varias $ormas de representar un numero #e'adecimal, pero yo utili,o la $orma en la que se
antepone *' porque es la m-s empleada, a dem-s de ser la que utili,a lengua%es como C.C/
/.
E'$%$!n 'e pro0rama
(omo ya lo haba dicho, para editar un programa se puede usar cualquier editor de teAto
plano. 9ntonces creamos un archi:o con el siguiente cdigo, y lo guardamos como
suma(asm$
(digo$
LIST P=16C84 ; Indica el modelo de PIC que se usa
; Es una directiva del Ensamblador
; Zona ara etiquetas
!PE"#$%!1 E&' ()(c ; %e*ine la osici+n del oerando 1
!PE"#$%!, E&' ()(d ; %e*ine la osici+n del oerando ,
"ES'LT#%! E&' ()(e ; %e*ine la osici+n del resultado
!"-( ; Comando que indica al Ensamblador
; la direcci+n de la memoria de
; ro.rama donde se situar/ la
; si.uiente instrucci+n
movl0 (1
; 1234 5rimera instrucci+n6
mov0* !PE"#$%!1 ; 423oerando1
movl0 (, ; ,234
mov0* !PE"#$%!, ; 423oerando,
mov*0 !PE"#$%!1 ; oernado1 23 4
add0* !PE"#$%!,7(
; 4 8 oerando, 234
mov0* "ES'LT#%! ; 423resultado
E$% ; %irectiva de *in de ro.rama
A tener en %uenta$ el uso de maysculas y minsculas en este fragmento de cdigo
obedece a una serie de reglas o normas de estilo, comunes entre los programadores en
ensamblador, que aunque no son obligatorias, facilitan la lectura del cdigo fuente. Vn
resumen de las reglas empleadas es el siguiente$
% Directi:as de compilador en maysculas
% Jombre de :ariables en maysculas
% Jemnicos en minsculas
% 'rograma bien tabulado
2oo por a%arar$ los punto y coma = ! despu2s de cada instruccin se utili@an para
comentariar el cdigo. 9s como el ;Y de ( el Q de 'erl el ;; de (<< y Ua:a. ?inalmente
guardamos nuestro archi:o con la eAtensin .678 y listo.
0ueno todo muy 1onito, pero como co2os prue1o mi maldito programa e##" 'es bien para
eso tendremos que :alernos de un soft"are especial, que nos compile el programa que lo
pase a instrucciones en heAadecimal= .678 TX .K9+!. Cecomiendo el MP2IM de M$%ro%#$p y
el 2IM5PIC de M$%ros<stems En0$neer$n0. #o que me lle:a al siguiente capitulo.
Mane;an'o e 2$mua'or 2IM5PICC84D e pr$mer %onta%to
9l simulador 7&8V'&(3,- es una herramienta que trata de facilitar la labor del programador
del '&(. (omo sabemos para crear un programa en ensamblador tenemos que recurrir a
distintos programas= un editor, un ensamblador y un simulador. 9l 7&8V'&(3,- trata de
integrar todos en una sola herramienta, y agrega otras herramientas ms, que facilitan el
proceso de depuracin entre otras.
'ara los que saben un poco del tema sabrn que este es un programa antiguo, pero es de los
ms fciles de mane0ar por lo que lo he escogido. #o primero que debemos hacer es ba0arlo
de &nternet, entonces :as al google y lo buscas5 1cmo, te da pere@a4 DI, b0alo de aqu1.
>ueno, lo primero es descomprimirlo. Suardas la carpeta donde te quede ms cmodo y
e0ecutas el archi:o sim,-.eAe. (on lo que :ers lo siguiente$
DI, ahora :amos a :er el funcionamiento bsico del programa= primero hay que indicarle el
nombre del fichero .asm! con el que :amos a traba0ar, esto lo hacemos dndole enter a la
opcin 6signar Jombre. /amos a traba0ar con nuestro primer programa el que hicimos
arriba!, por lo tanto debemos guardar ese archi:o suma.asm! en la carpeta donde
tengamos nuestro simupic.
'aso siguiente :amos a la opcin #lamar al editor. 9sta opcin nos permite crear un fichero
nue:o llamando al edit del Lindo"s!, o cargar un archi:o ya eAistente en este caso
suma.asm!.
Kasta el momento solo hemos editado y cargado el cdigo del programa en el simupic. 6hora
debemos ensamblarlo o compilarlo!, por lo que :amos a la opcin 9nsamblar. 9s de
aclarar que el ensambla0e lo hace un programa eAterno llamado 8'678, pero nuestro
simupic se encarga de llamarlo y utili@arlo por nosotros. Jos debe aparecer lo siguiente$
9n esa consola nos aparecen los posibles errores de sintaAis, y los molestos "arnings. De
momento solo nos interesa que no tenga errores, por lo que presionamos cualquier tecla
para salir de esa :entana, y la siguiente que :emos es el reporte de los Larnings,
simplemente salimos del edit.
Cecordemos que al ensamblar nuestro cdigo fuente, lo que hacemos es crear un fichero
.heA que contienes las instrucciones del fuente en heAadecimal. 'or esto debemos cargar el
fichero heAadecimal en el '&( esta parte simula el momento en el que quemamos nuestro
programa en un '&( de :erdad!. /amos a la opcin (argar fichero K9+ con lo que nos
saldr el siguiente dialogo$
?i02monos que al cargar el archi:o .heA la parte inferior i@quierda cambia$
9n esta parte podemos obser:ar lnea a lnea el comportamiento de nuestro programa, y es
de gran utilidad por que nos sir:e como depurador.
6hora :amos a simular el programa, para anali@ar su comportamiento. 'ara ello :amos a
configurar nuestro simulador para que nos muestre el comportamiento de las :ariables, es
decir, qu2 :alores toman al transcurrir el programa. 'ara ello :amos a la opcin /isuali@ar
Cegistros y despu2s 6.adir registros$
Y despu2s seleccionamos L 6cumulador!5 recordemos que el registro L registro de
traba0o! es donde almacenamos los datos que necesitemos manipular.
#uego de esto nos aparecer en la :entana superior derecha, el registro que hemos
agregado y el :alor que contiene$
9s de aclarar que las :ariables y registros de nuestro '&( almacenan un byte, es decir , bits,
por lo que las :ariables y registros que pongamos en esa parte, constarn de , nmeros
binarios. 7i te ests preguntando qu2 co.os es el tal '(#, eAplico= el '(# es un apuntador
que le indica al '&( la posicin de memoria donde se encuentra la instruccin en binario!
que se debe efectuar. 9sto no es as eAactamente pero por ahora nos basta.
'ero en el programa tenemos tres :ariables D'9C6JDD), D'9C6JDDN, C97V#G6DD!, que
sera importante tener en cuenta para anali@ar el programa. 'ara a.adirlas a la lista :amos a
la opcin /isuali@ar Cegistros y 6.adir registros, y seleccionamos la opcin 8ediante Dir.
KeA.$
6ll debemos indicarle la posicin en memoria en donde se encuentra la :ariable5
recordemos el fragmento de cdigo donde iniciali@amos las :ariables$
(digo$
!PE"#$%!1 E&' ()(c ; %e*ine la osici+n del oerando 1
!PE"#$%!, E&' ()(d ; %e*ine la osici+n del oerando ,
"ES'LT#%! E&' ()(e ; %e*ine la osici+n del resultado
6 la :ariable OPERANDO1 se le asigno la posicin EAEc= a la :ariable OPERANDO2 se le asigno
la posicin EAEd= a la :ariable RESULTADO se le asigno la posicin EAEe.
'or ello en el cuadro de dialogo que nos pide la direccin de memoria de las :ariables
debemos digitar esas direcciones= pero no todas a la :e@, sino una por una$
Dbser:emos que no digitamos EAEc sino Ec, ya que se asume que lo que :amos a digitar es
un numero en sistema heAadecimal. Despu2s le damos continuar y asignamos una referencia
a esa :ariable, por e0. Dp)$
Cepetimos la misma operacin con las :ariables OPERAN+O) y RE25LTA+O, y nos fi0amos
que en la parte superior derecha tengamos algo como$
6hora s :amos a simular nuestro programa, pero primero :amos a la opcin Dpciones de
simulacin y le damos Ceset en el '&( esto no creo tener que eAplicarlo!= 6hora nos
:amos a la opcin Gra@ar para :er el comportamiento de nuestro programa. 6nali@amos un
poco la primera instruccin a la que apunta '(#$
9sta instruccin equi:ale a la instruccin movlw EM de nuestro cdigo fuente. Y le indica al
'&( que acumule el :alor M en el registro de traba0o L. ?i02monos como esto se :e refle0ado
a nuestra derecha$
9n el registro L tenemos EEEEE)E) que es el equi:alente de M en notacin binaria. 6hora
cada :e@ que demos un enter el programa :a ir a:an@ando lnea por lnea con el
apuntador '(#!. 6hora, anali@aremos qu2 pasa cada :e@ que demos enter cada item
equi:ale a un enter!$
). 9n el registro L tenemos EEEEE)E) M en decimal!= esto equi:ale a la instruccin
mo:l" EM.
N. en el segundo enter! 9n el registro op) tenemos EEEEE)E) M en decimal!, ya
que almacenamos lo que tena L en D'9C6JDD) referenciado por op)!= esto
equi:ale a la instruccin mo:"f D'9C6JDD).
H. 9n el registro L tenemos EEEEEE)E N en decimal!= esto equi:ale a la instruccin
mo:l" EN.
-. 9n el registro opN tenemos EEEEEE)E N en decimal!, ya que almacenamos lo que
tena L en D'9C6JDDN referenciado por opN!= esto equi:ale a la instruccin mo:"f
D'9C6JDDN.
M. 9n el registro L tenemos EEEEE)E) M en decimal!, ya que copiamos el contenido
de D'9C6JDD) a L= esto equi:ale a la instruccin mo:f" D'9C6JDD).
*. 9n el registro L tenemos EEEEE))) F en decimal!, ya que sumamos el contenido
de D'9C6JDDN con L y el resultado lo almacenamos en L= esto equi:ale a la
instruccin add"f D'9C6JDDN,E.
F. 9n el registro res que referencia la :ariable C97V#G6DD! tenemos EEEEE))) F
en decimal!, ya que le almacenamos lo que tena L= esto equi:ale a la instruccin
mo:"f C97V#G6DD.
(uando ya hemos e0ecutado todas las instrucciones nos aparecer un mensa0e indicndonos
que el programa ha finali@ado$
A2M Bs( C3CEEF E,$%$en%$a Bs( Como'$'a'
'arte importante de este tutorial es hacer un paralelo entre la programacin en 678 y en
(;(<<, ya que cualquier programa para un microcontrolador, adems de codificarse en 678,
tambi2n puede ser codificado en (. Db:iamente en (, al ser un lengua0e de alto ni:el, se
dispone de una mayor comodidad a la hora de programar, pero ello conlle:a un peque.o
sacrificio en cuanto a tiempo de e0ecucin. 6l grano, :amos a hacer el mismo programa que
habamos hecho en un principio suma.asm! pero ahora en ( suma.c!$
(digo$
9: Pro.rama que suma el contenido de dos variables en memoria ; almacena :9
9: el resultado en una tercera variable de resultado< Equivalente al :9
9: e=ercicio 1< :9
>include ?16c84<@3
void main5 void 6
A
int oerando1 = 17 oerando, = ,7 resultado;
resultado = oerando1 8 oerando,;
B
9l programa ha sido compilado con el '(8 de la casa Custom Computer 2erB$%es que
comerciali@a M$%ros<stems En0$neer$n0 y se ha empleado el 7&8V'&(3,- para
desensamblar su cdigo y traducirlo a ensamblador. 9l resultado es el siguiente$
(digo$
(( movl0 ((
(1 mov0* ()(a
(, .oto (1
(C no
(4 no
(1 clr* ()(4
(6 clr* ()(C
(D movl0 ()(c
(8 mov0* ()(e
(E movl0 ()(d
(# mov0* ()(*
(F movl0 ()(e
(C mov0* ()1(
(% mov* ()(e7(
(E mov0* ()(4
(G movl0 ()(1
1( mov0* ()((
11 mov* ()(*7(
1, mov0* ()(4
1C movl0 (,
14 mov0* ()((
11 mov* ()((7(
16 mov0* ()11
1D mov* ()(e7(
18 mov0* ()(4
1E mov* ()((7(
1# mov0* ()1,
1F mov* ()(*7(
1C mov0* ()(4
1% mov* ()((7(
1E add0* ()1,7(
1G mov0* ()1,
,( mov* ()117(
,1 mov0* ()(4
,, mov* ()1,7(
,C mov* ()((
,4 slee
,1
ZZZDemonios, el cdigo resultante est compuesto por HF instrucciones[[[ 9sto es casi cuatro
:eces el programa que habamos hecho anteriormente en assembler. 9sto ya os dar una
idea de lo que implica programar en ( microcontroladores$ tama.o en el programa y por
ende tiempo de e0ecucin.