Directivas de ensamblador ensamblador Directriz
Descripción
BYTE
Reserva byte (s) a una variable.
CSEG
Segmento de Código
CSEGSIZE
Tamao de la memoria de !rograma
"B
"e#inir byte $onstante (s)
"E%
Definir un nombre simbólico en un registro
"SEG
Segmento de datos
"&
Definir palabra Constante (s)
E'" E'"*+R,
Endmacro
E-
Establecer un símbolo igual a una expresión
ESEG
Segmento EEPROM
S*/I"*
Salir de arci!o
C,'TE'ER
"eer fuente de otro arci!o
/IST*
#ire generación listfile en
/IST*C
#ire a la expansión de macros en el arci!o de lista de
*CR,
Comience Macro
',/IST
#ire generación listfile off
,RG
Origen Set programa
SET
Establecer un símbolo de una expresión
E/SE E/I%
Ensambla$e condicional
TERI'*R* SI
Ensambla$e condicional
ERR,R
Emite un mensa$e de error
S%& %'DE'& %'DE'
Ensambla$e condicional
E'S*0E
De!uel!e una cadena de mensa$e
""
Definir palabra doble
"-
Definir palabra cudruple
'"E%
Símbolo registro undefine
*"1ERTE'CI*
Emite un mensa$e de ad!ertencia
,1ER/*2 3 ',,1ER/*2
Establecer sección superposición
Nota
Tenga Tenga en $uenta 4ue todas las dire$tivas deben ir !re$edidos !or un !unto.
BYTE - reserva de bytes para una variable
/os re$ursos de las reservas dire$tiva BYTE memoria en la SR* o EE2R,. Con el #in de ser $a!a5 de 6a$er re#eren$ia a la ubi$a$ión reservada la dire$tiva BYTE debe ir !re$edida de una eti4ueta. /a dire$tiva toma un !ar7metro 4ue es el e l n8mero de bytes !ara reservar. reservar. /a dire$tiva no se !uede utili5ar dentro de un segmento de $ódigo (ver dire$tivas ESEG CSEG "SEG) .'ota 4ue se debe dar un !ar7metro. 'o se ini$iali5an /os bytes asignados. Sintaxis:
ETI-ET*99 e:!resión .BYTE ETI-ET* Ejemplo:
.DSEG var1: .BYTE 1; reservar 1 byte a var1 tabla: tab_size .BYTE; bytes tab_size reserva .CSEG r30 LDI, baja !1"; Car#ar $ re#istr% baj% r31 LDI, alta !1"; Car#ar $ re#istr% &e alta r1 l&, $; Car#ar '()1 e* el re#istr% 1
Segmento de código - CSEG /a dire$tiva CSEG de#ine el ini$io de un segmento de $ódigo. n ar$6ivo de ensamblador !uede $onsistir en varios segmentos de $ódigo 4ue se $on$atenan en un solo segmento de $ódigo $uando se ensamblan. /a dire$tiva BYTE no se !uede utili5ar dentro de un segmento de $ódigo. El ti!o de segmento !or de#e$to es Código. /os segmentos de $ódigo tienen su !ro!io $ontador de ubi$a$ión 4ue es un $ontador de !alabras. /a dire$tiva ,RG se !uede utili5ar !ara $olo$ar $ódigo y $onstantes en ubi$a$iones es!e$;#i$as en la memoria de !rograma. /a dire$tiva no toma ning8n !ar7metro. Sintaxis:
.CSEG Ejemplo:
.DSEG; C%+ie*e se#+e*t% &e &at%s vartab: .BYTE -; )eserva - bytes &e S)( .CSEG; C%+ie*e se#+e*t% &e /&i#% %*st: .D ; Esribe 02000 e* r%#.+e+. +%v r1, r0; 4aer al#%
CSEGSIZE - memoria del programa Tamao *T<=+ dis!ositivos tienen una !arti$ión de memoria de usuario $on#igurable entre la memoria del !rograma *1R y la memoria de datos. El !rograma y los datos SR* se divide en tres blo 4ues9 >?+ : >@ dedi$ado SR* !rograma =+ : A dedi$ado SR* de datos y @+ : >@ o >+ : A SR* $on#igurable 4ue !ueden ser inter$ambiadas entre el !rograma y memoria de datos es!a$ios en + : >@ o =+ : A !arti$iones. Esta dire$tiva se utili5a !ara es!e$i#i$ar el tamao del blo4ue de memoria de !rograma. Sintaxis:
.CSEGSIZE >? D > D >= D >@ Ejemplo:
.CSEGSI$E 5 1; Esei6a el ta+a7% +e%ry r%#ra+a 18 2 19
DB - De!inir byte constante "s# en la memoria de programa y EE$%&'
/os re$ursos reservas dire$tivas de memoria "B en la memoria de !rograma o en la memoria EE2R,. Con el #in de ser $a!a5 de re#erirse a los lugares reservados la dire$tiva "B debe ir !re$edida de una eti4ueta./a dire$tiva "B toma una lista de e:!resiones y debe $ontener al menos una e:!resión. /a dire$tiva "B debe ser $olo$ado en un segmento de $ódigo o un segmento EE2R,. /a lista de e:!resión es una se$uen$ia de e:!resiones delimitado !or $omas. Cada e:!resión debe evaluar a un n8mero entre >A y FF. Si la e:!resión se eval8a $omo un n8mero negativo los A bits $om!lemento a dos del n8mero se $olo$ar7n en la !osi$ión de memoria de !rograma o memoria EE2R,. Si la dire$tiva "B se da en un segmento de $ódigo y el E:!ression/ist $ontiene m7s de una e:!resión las e:!resiones se em!a4uetan de modo 4ue dos bytes se $olo$an en $ada !alabra de memoria de !rograma. Si el ExpressionList contiene un número impar de expresiones, la última expresión será colocado en una palabra de memoria de programa propio, incluso si la línea siguiente en el código assemby contiene una directiva DB. El medio no utili5ado de la !alabra !rograma se !one a $ero. na
adverten$ia se da $on el #in de noti#i$ar al usuario 4ue un byte adi$ional $ero se aade el $omuni$ado ."B Sintaxis:
ETI-ET*9 ."B E:!ression/ist Ejemplo:
.CSEG %*sts: .DB 0, , 0b01010101, 1<, 02(( .ESEG %*st: .DB 1,,3
DE( - Estable)ca un nombre simbólico en un registro /a dire$tiva "E% !ermite 4ue los registros !ara ser remitidos a travs de s;mbolos. n s;mbolo de#inido se !uede utili5ar en el resto del !rograma !ara 6a$er re#eren$ia al registro 4ue est7 asignado. n registro !uede tener varios nombres simbóli$os 4ue se le atribuye. n s;mbolo !uede ser rede#inido m7s tarde en el !rograma. Sintaxis:
.de# S;mbolo Registro Ejemplo:
.&e= Te+ 5 )19 .&e= I%r 5 )0 .CSEG te+ LDI, 02>0; Car#ar 02>0 e* el re#istr% &e te+erat?ra e* i%r, 023=; Leer S)EG e* i%r re#istr% e% te+, i%r; E2l?siva % te+%ral y i%r
*+DE( - unde!ine un nombre simbólico registro H/a dire$tiva '"E% se utili5a 4uitar la de#ini$ión de un s;mbolo !reviamente de#inido $on el "E% "ire$tiva. Esto !ro!or$iona una #orma sen$illa de obtener una determina$ión del al$an$e de las de#ini$iones de registro !ara evitar las adverten$ias sobre reutili5a$ión registro. Sintaxis:
S;mbolo .'"E% Ejemplo:
.&e= 'ar1 5 )19 LDI var1, 020 ...; @aer al#% +As %* var1
.DE> 'ar1 .&e= 'ar 5 )19; )19 a@%ra ?e&e ser re?tiliza&% si* revi% avis%.
DSEG - segmento de datos /a dire$tiva "SEG de#ine el ini$io de un segmento de datos. n ar$6ivo de #uente en ensamblador !uede $onsistir en varios segmentos de datos 4ue se $on$atenan en un solo segmento de datos $uando se ensamblan. n segmento de datos ser7 normalmente sólo $onstar7 de dire$tivas BYTE (y eti4uetas). /os segmentos de datos tienen su !ro!io $ontador de ubi$a$ión 4ue es un $ontador de bytes. /a dire$tiva ,RG se !uede utili5ar !ara $olo$ar las variables en ubi$a$iones es!e$;#i$as en la SR*. /a dire$tiva no toma ning8n !ar7metro. Sintaxis:
."SEG Ejemplo:
.DSEG; C%+ie*e se#+e*t% &e &at%s var1: .BYTE 1; reservar 1 byte a var1 tabla: tab_size .BYTE; reserva tab_size bytes. .CSEG r30 LDI, baja !1"; Car#ar $ re#istr% baj% r31 LDI, alta !1"; Car#ar $ re#istr% &e alta r1 l&, $; Car#ar var1 e* el re#istr% 1
D, - De!inir la palabra constante "s# en la memoria de programa y EE$%&' /os re$ursos reservas dire$tivas de memoria "& en la memoria de !rograma o en la memoria EE2R,. Con el #in de ser $a!a5 de re#erirse a los lugares reservados la dire$tiva "& debe ir !re$edida de una eti4ueta. /a dire$tiva "& toma una lista de e:!resiones y debe $ontener al menos una e:!resión. /a dire$tiva "B debe ser $olo$ado en un segmento de $ódigo o un segmento EE2R,. /a lista de e:!resión es una se$uen$ia de e:!resiones delimitado !or $omas. Cada e:!resión debe evaluar a un n8mero entre J@A y @FFF. Si la e:!resión se eval8a $omo un n8mero negativo los >@ bits $om!lemento de la serie de dos llegar7n a ser $olo$ado en la memoria de !rograma o ubi$a$ión de la memoria EE2R,. Sintaxis:
ETI-ET*9 ."& E:!ression/ist Ejemplo:
.CSEG varlist: .D 0, 02, 0b1001110001010101, 3.9<, 9.3 .ESEG eevarlst: .D 0,02, 10
DD - De!inir doubleord constante "s# en la memoria de programa y EE$%&'
D. - De!inir palabra cu/druple constante "s# en la memoria de programa y EE$%&' Estas dire$tri$es son muy similares a la "& "ire$tiva e:$e!to 4ue se utili5an !ara de#inir bits (!alabra doble) y @= bits (!alabra $u7dru!le) res!e$tivamente. /a dis!osi$ión de los datos en la memoria es estri$tamente littleendian. Sintaxis:
ETI-ET*9 ."d E:!ression/ist ETI-ET*9 ."- E:!ression/ist Ejemplo:
.CSEG varlist: .D& 0, 02=a&ebabe, 1--<39-<, 1 FF 30 .ESEG eevarlst: 0,02=a&ebabe&ea&bee= .D!, 1 FF 9
0 E1I(2 E1SE - ensambla3e condicional .E/I% In$luir7 $ódigo 6asta el E'"I% $orres!ondiente de la siguiente E/I% al mismo nivel si la e:!resión es verdadera y tanto la $l7usula .I% ini$ial y todas las siguientes $l7usulas .E/I% son #alsas. .E/SE In$luir7 $ódigo 6asta el .endi# $orres!ondiente si la $l7usula initial.I% y todas las $l7usulas .E/I% (en su $aso) todos son #alsos. Sintaxis:
.E/I% KE:!resiónL .E/SE .I%"E% S;mbolo KL D .I%'"E% Ks;mboloL ... .E/SE D .E/I% KE:!resiónL ... .TERI'*R* SI Ejemplo:
.I>DE> DEBG .+essa#e De?rai/* .. .ELSE .+essa#e )elease .. .TE)I()( SI
E+DI( - ensambla3e condicional EnsamblaMe $ondi$ional in$luye un $onMunto de $omandos en el tiem!o de montaMe. /a dire$tiva E'"I% de#ine el #inal !ara el SI $ondi$ional o I%"E% o i#nde# dire$tivas. Condi$ionales (.I% ... E/I% ... E/SE ... E'"I% blo4ues) se !ueden anidar !ero todos los $ondi$ionales deben terminar al #inal del ar$6ivo ($ondi$ionales no !ueden abar$ar varios ar$6ivos). Sintaxis:
.TERI'*R* SI .I%"E% S;mbolo KL D .I%'"E% Ks;mboloL ... .E/SE D .E/I% KE:!resiónL ... .TERI'*R* SI Ejemplo:
.I>DE> DEBG .+essa#e )elease .. .ELSE .+essa#e De?rai/* .. .TE)I()( SI
E+D'2 E+D'45%& - (in macro /a dire$tiva E'"*+R, de#ine el #inal de una de#ini$ión de ma$ro. /a dire$tiva no toma ning8n !ar7metro. 1er la dire$tiva *CR, !ara obtener m7s in#orma$ión sobre la de#ini$ión de ma$ros. E'" es una #orma alternativa totalmente e4uivalentes $on E'"*+R,. Sintaxis:
.E'"*CR, .E'" Ejemplo:
.(C)H SBI19; C%+ie*e +ar% &e6*ii/* s?bi r19, baj% 0"; Byte baj% )este r1 SBCI, alta 0"; Byte alt% )este .ED(C)H
E.* - Establecer un s6mbolo igual a una e7presión /a dire$tiva E- asigna un valor a una eti4ueta. Esta eti4ueta se !uede utili5ar en e:!resiones !osteriores. na eti4ueta asignada a un valor !or la dire$tiva E- es una $onstante y no !uede ser modi#i$ado o rede#inido. Sintaxis:
Eti4ueta .e4u e:!resión Ejemplo:
.eJ? I%_%set 5 023 .eJ? K%rta 5 i%_%set .CSEG; C%+ie*e se#+e*t% &e /&i#% lr r; )e#istr% Clar% %rta ab%, r; Esriba a K?ert% (
E%%&%ES Emite una cadena de mensa3es de error /a dire$tiva ERR,R da salida a una $uerda y se detiene el montaMe. 2uede ser utili5ado en el montaMe $ondi$ional. Sintaxis:
.ERR,R HKCadenaLH Ejemplo:
.I>DE> THBEDHE .E))H) Still %sas J?e @aer .. .TE)I()( SI
4D8E%TE+CI4 - Emite una cadena de mensa3e de alerta /a dire$tiva .&*R'I'G emite una $adena de adverten$ia !ero a di#eren$ia de la "ire$tiva .ERR,R no detiene el montaMe. 2uede ser utili5ado en el montaMe $ondi$ional. Sintaxis:
.&*R'I'G HKCadenaLH
Ejemplo:
.I>DE> EMKE)IET(L_>E(T)E .()IG Est% *% estA bie* r%ba&%, ?tilie %r ?e*ta y ries#%. .TE)I()( SI
ESEG - Segmento EE$%&' /a dire$tiva ESEG de#ine el ini$io de un segmento EE2R,. n ar$6ivo de #uente en ensamblador !uede $onsistir en varios segmentos de EE2R, la $ual se $on$atenan en un solo segmento de EE2R, $uando se ensamblan. n segmento EE2R, normalmente sólo $onstar7 de "B y dire$tivas "& (y eti4uetas). /os segmentos EE2R, tienen su !ro!io $ontador de ubi$a$ión 4ue es un $ontador de bytes. /a dire$tiva ,RG se !uede utili5ar !ara $olo$ar las variables en ubi$a$iones es!e$;#i$as en la EE2R,. /a dire$tiva no toma ning8n !ar7metro. Sintaxis:
.ESEG Ejemplo:
.DSEG; C%+ie*e se#+e*t% &e &at%s var1: .BYTE 1; reservar 1 byte a var1 tabla: tab_size .BYTE; reserva tab_size bytes. .ESEG eevar1: .D 02; i*iializar 1 alabra e* EEK)H
E9IT - Salir de este arc:ivo /a dire$tiva S*/I"* indi$a al ensamblador 4ue !arar de montar el ar$6ivo. 'ormalmente el ensamblador se !rolongar7 6asta el #inal del ar$6ivo (E,%). Si una dire$tiva S*/IR a!are$e en un ar$6ivo in$luido el ensamblador $ontin8a desde la l;nea 4ue sigue la dire$tiva in$luir en el ar$6ivo 4ue $ontiene la dire$tiva I'C/"E. Sintaxis:
.S*/I"* Ejemplo:
.S(LID( ; Salir &e este ar@iv%
I+C1*YE - Incluir otro arc:ivo /a dire$tiva in$lude le di$e al ensamblador !ara em!e5ar a leer desde un ar$6ivo es!e$i#i$ado. El ensamblador y luego ensambla el ar$6ivo es!e$i#i$ado 6asta el #inal del ar$6ivo (E,%) o se en$uentra una dire$tiva S*/IR. n ar$6ivo in$luido !uede $ontener en s; C,'TE'ER dire$tivas. /a di#eren$ia entre las dos #ormas es 4ue el !rimero bus$a en el dire$torio a$tual !rimero el segundo no lo 6a$e. Sintaxis:
H'ombre de ar$6ivoH .in$lude .in$lude K'ombre de ar$6ivoL Ejemplo:
; i%&e=s.as+: .eJ? S)EG 5 023>; )e#istr% &e esta&% .eJ? S@i#@ 5 023e; Kila ?*ter% alta .eJ? Sl%N 5 023D; Kila ?*ter% baja ; i*&e+%.as+
I%&e=s.as+ .i*l?&e; I*l?ir las &e6*ii%*es &e E O S e* r0, S)EG; Leer re#istr% &e esta&%
SI2 I(DE(2 I(+DE( - ensambla3e condicional EnsamblaMe $ondi$ional in$luye un $onMunto de $omandos en el tiem!o de montaMe. /a dire$tiva I%"E% in$luir7 $ódigo 6asta 4ue la $orres!ondiente dire$tiva else i# Ks;mboloL se de#ine. El s;mbolo se debe de#inir $on el E- o dire$tiva SET. ('o #un$iona $on la dire$tiva "E%) la "ire$tiva si in$luir7 $ódigo si Ke:!resiónL se eval8a di#erente de ?. 17lido 6asta el $orres!ondiente E/SE o dire$tiva E'"I%. Nasta F niveles de anidamiento es !osible. Sintaxis:
.I%"E% KS;mboloL .I%'"E% KS;mboloL .I% KE:!resiónL .I%"E% S;mbolo KL D .I%'"E% Ks;mboloL ... .E/SE D .E/I% KE:!resiónL ... .TERI'*R* SI Ejemplo:
.(C)H SET_B(T .I> 0P 023> .+essa#e Direi/* +ay%r J?e 023> l&s , 0 sbr , 1 FF 1" ts 0, .ELSE .+essa#e Direi/* +e*%r % i#?al 023> .TE)I()( SI .ED(C)H
1IST4 - Girar la generación list!ile en /a dire$tiva /IST* di$e al ensamblador !ara $onvertir la genera$ión list#ile su$esivamente. El ensamblador genera un list#ile 4ue es una $ombina$ión de $ódigo #uente montaMe dire$$iones y $ódigos de o!era$ión.Genera$ión list#ile est7 a$tivada de #orma !red eterminada. /a dire$tiva tambin se !uede utili5ar Munto $on la dire$tiva ',/IST $on el #in de generar solamente list#ile de !artes sele$$ionadas de un ar$6ivo de origen de ensamblaMe. Sintaxis:
.list Ejemplo:
.HLIST; Des@abilitar la #e*erai/* list6le .i*l?&e ar%.i*; L%s ar@iv%s i*l?i&%s *% l% @arA .i*l?&e C%*st.&e=; se +?estra e* la list6le .list; '?elva a ativar la #e*erai/* list6le
1IST'4C - Turn e7pansión macro en /a dire$tiva /IST*C di$e al ensamblador 4ue $uando una ma$ro se llama la e:!ansión de la ma$ro se muestra en el list#ile generada !or el ensamblador. El valor !or de#e$to es 4ue sólo la ma$ro llamada $on !ar7metros se muestra en el list#ile. Sintaxis:
./IST*C Ejemplo:
.(C)H (CM; De6*ir ?* eje+l% +ar% a7a&ir r0, 0; 4aer al#% e% r1, 1; 4aer al#% .ED(C)H; Ter+i*ar +ar% &e6*ii/* .LIST(C; (tivar la e2a*si/* &e +ar%s (CM r, r1; Lla+e +ar%, s@%N &e e2a*si/*
'4C%& - Comience macro /a dire$tiva *CR, le di$e al ensamblador 4ue este es el $omien5o de una ma$ro. /a dire$tiva *CR, toma el nombre de la ma$ro $omo !ar7metro. Cuando el nombre de la ma$ro se es$ribe m7s adelante en el !rograma la de#ini$ión de ma$ro se e:!ande en el lugar 4ue #ue utili5ado. na ma$ro !uede tardar 6asta >? !ar7metros. Estos !ar7metros se $ono$en $omo O ? O < dentro de la de#ini$ión de ma$ros. *l emitir una llamada de ma$ro los !ar7metros se dan $omo una lista se!arada !or $omas. /a de#ini$ión de ma$ro se termina !or una dire$tiva E'"*+R,. 2or de#e$to sólo la llamada a la ma$ro se muestra en la list#ile generada !or el ensamblador. Con el #in de in$luir la e:!ansión de la ma$ro en el list#ile se debe utili5ar una dire$tiva /IST*C. na ma$ro es mar$ada $on un P en el $am!o $ódigo de o!era$ión del list#ile. Sintaxis:
.*CR, a$roname Ejemplo:
.(C)H SBI19; C%+ie*e +ar% &e6*ii/* s?bi 1, baj% 0"; Byte baj% )este SBCI , alta 0"; Byte alt% )este .ED(C)H; Ter+i*ar +ar% &e6*ii/* .CSEG; C%+ie*e se#+e*t% &e /&i#% SBI19 0213-, r19, r1; S?b.0213- &e r1: r19
'E+S4;E - Salida de una cadena de mensa3e /a dire$tiva E'S*0E emite una $adena. Qtil en el ensamblaMe $ondi$ional. Sintaxis:
.message HKCadenaLH Ejemplo:
.I>DE> DEBG .+essa#e %&% &e &e?rai/* .TE)I()( SI
+&1IST - Girar generación list!ile o!! /a dire$tiva ',/IST di$e al ensamblador !ara $onvertir la genera$ión list#ile a!agado. El ensamblador normalmente genera una list#ile 4ue es una $ombina$ión del $ódigo #uente montaMe dire$$iones y $ódigos de o!era$ión. Genera$ión list#ile est7 a$tivada de #orma !redeterminada !ero se !uede desa$tivar mediante el uso de esta dire$tiva. /a dire$tiva tambin se !uede utili5ar Munto $on la dire$tiva /IST* $on el #in de generar solamente list#ile de !artes sele$$ionadas de un ar$6ivo de origen de ensamblaMe. Sintaxis:
.',/IST Ejemplo:
.HLIST; Des@abilitar la #e*erai/* list6le .i*l?&e ar%.i*; L%s ar@iv%s i*l?i&%s *% l% @arA .i*l?&e C%*st.&e=; se +?estra e* la list6le .list; '?elva a ativar la #e*erai/* list6le
&rigen programa Set - &%G /a dire$tiva ,RG estable$e el $ontador de ubi$a$ión !ara un valor absoluto. El valor de estable$er se da $omo un !ar7metro. Si una dire$tiva ,RG se da dentro de un segmento de datos enton$es es el $ontador de ubi$a$ión SR* 4ue se #iMa si la dire$tiva se da dentro de un segmento de $ódigo enton$es es el $ontador de la memoria de !rograma 4ue se estable$e y si la dire$tiva se da dentro de un Segmento EE2R, es el $ontador de ubi$a$ión EE2R, 4ue se #iMa. /os valores !or de#e$to del Código y los $ontadores ubi$a$ión EE2R, son $ero y el valor !or de#e$to de la barra de ubi$a$ión SR* es la dire$$ión inmediatamente des!us del #inal de E 3 S del es!a$io de dire$$iones I (?:@? !ara dis!ositivos sin 4ue e:tendió de E 3 S ?:>?? o m7s !ara dis!ositivos $on e:tendido de E 3 S) $uando se ini$ia el montaMe. Tenga en $uenta 4ue los $ontadores de SR* y ubi$a$ión EE2R, $uentan bytes mientras 4ue el $ontador de !osi$ión de memoria de !rograma $uenta $on !alabras. Tambin tenga en $uenta 4ue algunos dis!ositivos $are$en de SR* y 3 o EE2R,. Sintaxis:
E:!resión .,RG Ejemplo:
.DSEG; C%+ie*e se#+e*t% &e &at%s .H)G 0210; Estableer &irei/* S)( a @e2a&ei+al 10 variables: .BYTE 1; )eserve ?* byte a a&r S)(. 0210 .CSEG .H)G 0210; Estableer %*ta&%r &e r%#ra+a a @e2a&ei+al 10 +%v r0, r1; 4aer al#%
SET - Establece un s6mbolo igual a una e7presión /a dire$tiva SET asigna un valor a una eti4ueta. Esta eti4ueta se !uede utili5ar en e:!resiones !osteriores. * di#eren$ia del E- "ire$tiva una eti4ueta asignada a un valor !or la dire$tiva SET se !uede $ambiar (rede#inido) m7s tarde en el !rograma. Sintaxis:
Eti4ueta .SET e:!resión Ejemplo:
.SET >HH 5 0211-; estableer >HH ara J?e a?*te a ?*a ?biai/* S)( l&s r0, >HH; ?biai/* &e ar#a e* r0 .SET >HH >HH 5 1; i*re+e*t% re&e6*ir" >HH. Est% serQa ile#al si se ?tiliza .eJ? l&s r1, >HH; ar#ar r/2i+a ?biai/* e* r1
&8E%14$ < +&&8E%14$ - Con!igure la sección superposición Introdu$ido en *1R*S .>. Estas dire$tri$es son !ara !roye$tos $on ne$esidades es!e$iales y se deben normalmente no se !ueden utili5ar. Estas dire$tivas sólo a#e$tan el segmento a$tivo a$tualmente (CSEG 3 "SEG 3 ESEG). /as dire$tivas 3 nooverla! .overla! mar$an una se$$ión 4ue se !ermitir7 a su!er!onerse $ódigo 3 datos $on $ódigo 3 datos de#inidos en otro lugar sin ning8n error o mensaMes de adverten$ia 4ue se
generan. Esto es totalmente inde!endiente de lo 4ue se estable$e mediante los !ragma dire$tivas. El atributo de su!er!osi$ión!ermitido !ermane$er7 en e#e$to a travs de dire$tivas .org !ero no va a seguir a travs de .$seg 3 .eseg 3 .dseg dire$tivas ($ada segmento mar$ado !or se!arado). Sintaxis:
.,1ER/*2 .',,1ER/*2 Ejemplo:
.%verla .%r# 0; sei/* 1 rj+ %r &e=et% .*%%verla .%r# 0; sei/* rj+ )EIICI(); % @ay err%r &a&% aJ?Q .%r# 0; la sei/* R 3 rj+ )EIICI(); Err%r aJ?Q %rJ?e se s%laa* %* R
'acros 4samblea
http://www.avr- tutorials.com/projects/avr- microcontroller-based-projects ¿Qué es un Macros? En la programación de ensambla3e de una macro es b/sicamente un con3unto de instrucciones representado por una sola sentencia= *na macro puede ser visto como una nueva instrucción creado por el programador para el microcontrolador= Tenga en cuenta sin embargo >ue esta nueva instrucción "la macro# se crea mediante el uso de las instrucciones e7istentes >ue se proporcionan con el microcontrolador 48%=
El uso de un 'acros 4samblea
Digamos >ue usted >uiere iniciali)ar el puntero de pila 48%= Se necesitar6an cuatro "?# instrucciones para reali)ar esta tarea2 como se muestra en el código ensamblador 48%
continuación= 4>u6 estamos cargando la @ltima dirección de S%4' en el puntero de pila microcontrolador 48%=
; Inicializar el puntero de pila microcontrolador AVR LDI R16, baja (RAMEND) OUT
SPL, R16
LDI R16,
SPH, R16
alta (RAMEND) OUT
4:ora2 en lugar de escribir los cuatro "?# de instrucciones para iniciali)ar el puntero de pila 48% puede de!inir una macro2 decir LSP, con estas instrucciones y utilizar esta macro para reemplazar el conjunto de la instrucción como se muestra en el código ensamblador AVR continuación.
; Inicializar la pila LSP R16, RAMEND
$asos en escritos macros monta3e 48%
1as macros son simples de código2 como se muestra en el e3emplo de código a continuación2 sólo tienes >ue seguir los sencillos pasos dados a>u6A = Todas las de!iniciones de macros se inicia con la MACR Directiva ensamblador seguido por el nombre de la macro en la misma l6nea= 4>u6 el nombre de nuestro macro es LSP. = (63ese en la de!inición macro por deba3o de la ! " y ! # s6mbolos= Estos son marcadores de posición para los argumentos >ue se pasar/n a la macro2 ! " y ! # se reempla)an con el primer y segundo argumentos respectivamente= +ota >ue tambin podr6a tener 2 F y as6 sucesivamente= F= *tilice la $%&MA'R Directiva ensamblador 48% para poner !in a la de!inición de la macro= . MACRO
LSP LDI @ 0, baja (@ 1) SPL, @ 0 OUT LDI @ 0, alta (@ 1) OUT
SPH, @ 0. ENDMAKRO
*na ve) >ue :aya de!inido su macro se puede utili)ar como cual>uier otra de las instrucciones de microcontroladores 48%= 4 continuación se muestra como se puede utili)ar la macro simplemente de!inir arriba=+ótese a>u6 >ue ! " y ! # ser/ sustituido por R#( y RAM$%&, respecti)amente, en la de*inición de la macro.
LSP R16, RAMEND
48% Tutoriales espera este tutorial monta3e sobre escribiendo macros monta3e 48% !ue bene!icioso para usted y espera con inters sus continuas visitas para todas sus necesidades de tutor6a microcontrolador=
El relo3 4Tmega 1CD Digital
En este proyecto 4Tmega 48% estaremos diseando e implementando un relo3 digital con la ayuda de un microcontrolador 4tmel 48% 4Tmega y una pantalla de cristal l6>uido al!anumrico "1CD#= %ota+ 4un>ue este proyecto 48% !ue diseado alrededor del 4Tmega el proyecto podr6a :aber utili)ado otra microcontrolador tal como un 4TmegaF2 4T'egaH2 etc= Amega#( LC& peración Reloj &igital +uestro relo3 digital !unciona como sigue= Cuando el circuito se enciende el relo3 comien)a a -""+""+""- para -+ MM+ SSJ= Kay dos pulsadores utili)ados para a3ustar la :ora= Interruptor S/# se utili)a para con!igurar los minutos, al pulsar este botón los minutos en aumento 0asta llegar a 12 y luego restablecer y empezar a contar desde ". 3nterruptor S/4 es para establecer las 0oras.
4Tmega 1CD %elo3 Digital Descripción del :ardare
1a !igura a continuación da el diagrama de circuito para la pantalla 1CD %elo3 Digital 4Tmega=
%ota 3mportante+ $ara >ue nuestro relo3 digital para >ue !uncione correctamente el oscilador interno del microcontrolador 4Tmega 48% debe estar :abilitado y se puso a ? 'K)=
So!tare 4Tmega 1CD %elo3 Digital
4 continuación se muestra la e3ecución 48% C de todo el código para el relo3 digital 1CD basada 4Tmega= El código !ue implementado y construido con AVR Studio = %ecurdese >ue el relo3 interno del microcontrolador 4Tmega debe estar :abilitado y programado para !uncionar a ? 'K) para el código 48% C para !uncionar correctamente= *n video del relo3 digital 1CD en la operación se presenta al !inal de esta p/gina=
/ * * LCD-Digital-Clock.c * * Escrito en AVR tudio ! * Compilador" AVR #$% C Compiler CC' * * Creado" ()/))/)(( +",",+ * Autor" AVR 0utoriales * itio 1e2" 111.AVR-0utorials.com * / #define F_CPU 000000UL #in!"de $%&' ( de"%.*+ #in!"de $%&' ( i.*+ #in!"de $-'in/.*+ #in!"de $%&' ( ine''.*+
/ * Varia2les glo2ales Declaraciones * / n-i/ned C*%' *'%- 02 -in fi'3%' C*%' 3in- 02 -in fi'3%' C*%' -e/nd 02 C*%' ie3 45 007007002
/ * Declaraciones de 3unciones LCD */ &id LCD_-end_!33%nd 8 n-i/ned !*%' !3nd ) 2 &id LCD_-end_d%% 8 n-i/ned !*%' d%% ) 2 &id LCD_ini 8 ) 2 &id LCD_/ 8 n-i/ned !*%' , n-i/ned !*%' 9 ) 2 &id LCD_'in 8 !*%' : -'in/ ) 2 &id LCD_d%e_i3e 8 &id ) 2
/ * Contador 0emporizador ( Comparar rutina de a4uste de un er5icio de Interrupci6n / Interrumpir ane4ador * / ISR 8;IMER1_COMPA_&e!)2 #define LCD_DA;A_POR; POR;< #define LCD_DA;A_DDR DDR< #define LCD_DA;A_PIN PIN< #define LCD_CN;RL_POR; POR;C #define LCD_CN;RL_DDR DDRC #define LCD_CN;RL_PIN PINC #define #define #define #define #define
LCD_RS_PIN = LCD_R>_PIN 6 LCD_ENA
in 'in!i%" 8&id) n-i/ned !*%' i2 LCD_ini 8)2 LCD_/ 81, B)2 LCD_'in 8AR'i%"e-)2 LCD_/ 8B, )2 LCD_'in 8ie3)2 LCD_CN;RL_POR;
81 $$ SE;_HOUR
1 $$ SE;_MINU;E)2
;CCR1< 81 $$ CS1B 1 $$ >M1B)2 OCR1A 1= 6B= 12 ;IMSK 1 $$ OCIE1A2 -ei 8)2 G*i"e 8 1 ) if 8 8 LCD_CN;RL_PIN 8 1 $$ SE;_HOUR ) ) ) *'- JJ2 if 8 *'- + B ) *'- 0 2 if 8 8 LCD_CN;RL_PIN 8 1 $$ SE;_MINU;E ) ) ) 3ine- JJ2 if 8 3ine- + = ) 3ine- 0 2 _de"%_3- 8 B=0 ) 2
/ * Esta 3unci6n en57a un comando 8C$D8 al LCD module*/ &id LCD_-end_!33%nd 8 n-i/ned !*%' !3nd ) LCD_DA;A_POR; !3nd 2 LCD_CN;RL_POR; 8 1 $$ LCD_R>_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_RS_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_ENA
/ * Esta 3unci6n en57a 8datos8 los datos al LCD module*/ &id LCD_-end_d%% 8 n-i/ned !*%' d%% ) LCD_DA;A_POR; d%% 2 LCD_CN;RL_POR; 8 1 $$ LCD_R>_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_RS_PIN ) 2 LCD_CN;RL_POR;
8 1 $$ LCD_ENA
_de"%_- 8 B ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_ENA
2 8 8 8 2 8
09 ) 2 090C ) 2 0901 ) 2 0906 ) 2
/ * Esta 3unci6n mue5e el cursor a la recta 9 la columna : en el m6dulo LCD * / &id LCD_/ 8-in fi'3%' !%'n , -in fi'3%' !%'n 9) n-i/ned !%'n fi'-Add'e-- 45 090, 09C0, 09, 09D2
LCD_-end_!33%nd 8fi'-Add'e-- 4 15 _de"%_3- 810)2
&id LCD_'in 8C*%'
J 9 1)2
: !%den%) n-i/ned !*%' i2
3ien'%- 8-'in/ 4i5 0) LCD_-end_d%% 8-'in/ 4i5)2 i JJ2 &id LCD_d%e_i3e 8) n-i/ned !%'n e32
LCD_/ 8B, )2 i% 8*'%- ( 10, e3, 10)2 LCD_'in 8e3)2 i% 8*'%Q 10, e3'%"e-, 10)2 LCD_'in 8e3)2 LCD_'in 87)2 i% 83in- ( 10, e3, 10)2 LCD_'in 8e3)2 i% 883inQ 10), e3e'%'%, 10)2
LCD_'in 8e3)2 LCD_'in 87)2 i% 8-e/nd- ( 10, e3, 10)2 LCD_'in 8e3)2 i% 8-e/nd-Q 10, e3, 10)2 LCD_'in 8e3)2 / * Contador 0emporizador ( Compara artido %n
ser5icio de interrupci6n Rutina / Interrumpir ane4ador * / ISR 8;IMER1_COMPA_&e!) -e/nd JJ2
-i 8-e/nd
60)
-e/nd- 02 3in- JJ2 -i 83in-
60)
3in- *'%- JJ2
02
-i 8*'%+ B) *'%- 02 LCD_d%e_i3e 8)2
El Termómetro Digital 1'F 4Tmega 1CD
En este proyecto 4Tmega 48% estaremos diseando e implementando un termómetro digital con la ayuda de un microcontrolador 4tmel 48% 4Tmega2 una temperatura 1'F sensor < transductor y un módulo 1CD al!anumrico= %ota+ 4un>ue este proyecto 48% !ue diseado alrededor del 4Tmega el proyecto podr6a :an utili)ado otro microcontrolador tales como 4TmegaF2 etc= El microcontrolador debe contener un 4nalog-to-Digital Converter "4DC# sin embargo= ATmea!" #$% Term&metro 'peraci&n %iital ( )ardware %escripci&n+uestro circuito 1CD termómetro digital y el programa C es la siguiente= Cuando el circuito se enciende la temperatura del aire actual se mostrar/ en la pantalla 1CD= 1a !igura a continuación da el diagrama de circuito para el Termómetro Digital 1CD 4Tmega=
%ota 3mportante+ $ara >ue la unidad Termómetro Digital 1'F 1CD para >ue !uncione correctamente el oscilador interno del microcontrolador 4Tmega 48% debe estar :abilitado y se puso a ? 'K)=
*o+tware
para
el
Term&metro
%iital
#
%$ATmea!"
4 continuación se muestra la e3ecución 48% C de todo el código de los 4Tmega Termómetro Digital 1CD basada= El código !ue implementado y construido con AVR Studio = %ecurdese >ue el relo3 interno del microcontrolador 4Tmega debe estar :abilitado y programado para !uncionar a ? 'K) para el código 48% C para !uncionar correctamente= *n video del Termómetro Digital 1CD en !uncionamiento se presenta al !inal de esta p/gina=
/ * * Digital0
/ * Varia2les glo2ales Declaraciones * / / * Declaraciones de 3unciones LCD */ &id LCD_-end_!33%nd 8 n-i/ned !*%' !3nd ) 2 &id LCD_-end_d%% 8 n-i/ned !*%' d%% ) 2 &id LCD_ini 8 ) 2 &id LCD_/ 8 n-i/ned !*%' , n-i/ned !*%' 9 ) 2 &id LCD_'in 8 !*%' : -'in/ ) 2
/ * Con5ersi6n ADC completa rutina de ser5icio de interrupci6n &IR' * / ISR 8ADC_&e!)2 #define LCD_DA;A_POR; POR;< #define LCD_DA;A_DDR DDR< #define LCD_DA;A_PIN PIN< #define LCD_CN;RL_POR; POR;C #define LCD_CN;RL_DDR DDRC #define LCD_CN;RL_PIN PINC #define #define #define #define #define
LCD_RS_PIN = LCD_R>_PIN 6 LCD_ENA
in 'in!i%" 8&id) n-i/ned !*%' i2
LCD_ini 8)2 LCD_/ 81, B)2 LCD_'in 8L% e3e'%'% e-)2
LCD_CN;RL_POR;
81 $$ SE;_HOUR
1 $$ SE;_MINU;E)2
DDRA 09002 // Con3igurar ortA como entrada ADCSRA
09F2
//
Acti5ar
el
ADC
9
su
3unci6n de interrupci6n // 9 esta2lecer el ACD relo4 preescalar a CL= / ()> ADMU 09E02 // eleccione ).!+V interna como Vre3? de46 4usti3icar // registros de datos 9 seleccione ADC como canal de entrada
//
-ei 8)2
@a2ilitar
interrupciones ADCSRA
1 $$ ADSC2 // Iniciar con5ersi6n
3ien'%- e 81)2
/ * Esta 3unci6n en57a un comando 8C$D8 al LCD module*/ &id LCD_-end_!33%nd 8 n-i/ned !*%' !3nd ) LCD_DA;A_POR; !3nd 2 LCD_CN;RL_POR; 8 1 $$ LCD_R>_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_RS_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_ENA
/ * Esta 3unci6n en57a 8datos8 los datos al LCD module*/ &id LCD_-end_d%% 8 n-i/ned !*%' d%% ) LCD_DA;A_POR; d%% 2 LCD_CN;RL_POR; 8 1 $$ LCD_R>_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_RS_PIN ) 2 LCD_CN;RL_POR; 8 1 $$ LCD_ENA
#lo2al
_de"%_3- 8 10 ) LCD_-end_!33%nd LCD_-end_!33%nd LCD_-end_!33%nd _de"%_3- 8 10 ) LCD_-end_!33%nd
2 8 8 8 2 8
09 ) 2 090C ) 2 0901 ) 2 0906 ) 2
/ * Esta 3unci6n mue5e el cursor a la recta 9 la columna : en el m6dulo LCD * / &id LCD_/ 8-in fi'3%' !%'n , -in fi'3%' !%'n 9) n-i/ned !%'n fi'-Add'e-- 45 090, 09C0, 09, 09D2
LCD_-end_!33%nd 8fi'-Add'e-- 4 15 _de"%_3- 810)2
&id LCD_'in 8C*%'
J 9 1)2
: !%den%) n-i/ned !*%' i 02
3ien'%- 8-'in/ 4i5 0) LCD_-end_d%% 8-'in/ 4i5)2 i JJ2
/ * Con5ersi6n ADC completa rutina de ser5icio de interrupci6n &IR' * / ISR 8ADC_&e!) C*%' e3C, e3F, %n%""%2 f"% e3ff2
e3C ADCH2 // ADC@ alida a R0D e3ff 8f"%) e3C2 e3ff 8e3ff : ) ( = J B2 e3F e3ff2 LCD_/ 8 B , ) 2 i% 8 e3C ( 10 , di-"% LCD_'in 8 di-"% ) 2 i% 8 e3C Q 10 , di-"% LCD_'in 8 di-"% ) 2 LCD_-end_d%% 8 09DF ) 2 LCD_'in 8 C ) 2 i% 8 e3F ( 10 , di-"% LCD_'in 8 di-"% ) 2 i% 8 e3F Q 10 , di-"% LCD_'in 8 di-"% ) 2 LCD_-end_d%% 8 09DF ) 2 LCD_'in 8 F ) 2 _de"%_3- 8 =00 ) 2
, 10 ) 2 , 10 ) 2
, 10 ) 2 , 10 ) 2
ADCSRA Cn&e'-in
1 $$ ADSC 2
// Comience
El 4Tmega siete segmentos %elo3 Digital
En este proyecto 4Tmega 48% estaremos diseando e implementando un relo3 digital con la ayuda de un microcontrolador 4tmel 48% 4Tmega y siete segmentos Displays= Como tal antes de ir a travs de este proyecto 48% relo3 digital se recomienda para completar el tutorial sobre Intercone7ión una pantalla de siete segmentos con el 48% microcontrolador= %ota+ 4un>ue este proyecto 48% !ue diseado alrededor del 4Tmega el proyecto podr6a :aber utili)ado otro microcontrolador tales como 4TmegaF 2 4T'egaH2 etc= ATmea!" ,eloj %iital 'peraci&n +uestro relo3 digital !unciona como sigue= Cuando el circuito se enciende el relo3 comien)a a-""+""+""- para -+ MM+ SSJ= Kay dos pulsadores utili)ados para a3ustar la :ora= Interruptor S/# se utili)a para con!igurar los minutos, al pulsar este botón los minutos en aumento 0asta llegar a 12 y luego restablecer y empezar a contar desde ". 3nterruptor S/4 es para establecer las 0oras.
4Tmega %elo3 Digital Descripción del :ardare
1a !igura a continuación da el diagrama de circuito para el 4Tmega Seven Segment Display Digital ClocL= *na caracter6stica a tener en cuenta en >ue los siete e7:ibiciones de segmento son impulsados por el mismo puerto 5Port67. El microcontrolador a travs de controles de Puerto C indican cuales siete pantalla segmento se muestra en cada d6gito= Tenga en cuenta >ue estos siete segmentos 'uestra son c8todo com9n pantalla=
%ota 3mportante+ $ara >ue nuestro relo3 digital para >ue !uncione correctamente el oscilador interno del microcontrolador 4Tmega 48% debe estar :abilitado y se puso a ? 'K)=
4Tmega So!tare Digital ClocL
4 continuación se muestra la implementación 48% C de todo el código para el relo3 digital basado 4Tmega= El código !ue implementado y construido con AVR Studio = %ecurdese >ue el relo3 interno del microcontrolador 4Tmega debe estar :abilitado y programado para !uncionar a ? 'K) para el código 48% C para !uncionar correctamente= *n video del relo3 digital en la operación se presenta al !inal de esta p/gina= $or
!avor
ver
la Inter!a)
de
una
pantalla
de
siete segmentos
con
el
48%
'icrocontrolador tutorial para obtener m/s in!ormación en la pantalla de siete segmentos= 4 continuación se muestra el código 48% C para el relo3 digital basada 4Tmega= Este código !ue escrito en 48% Studio =
/ * * DigitalClock.c * Escrito en AVR tudio ! * Compilador" AVR #$% C Compiler CC' * * Creado" (/()/)(( ("(B"( * Autor" AVR 0utoriales * itio 1e2" 111.AVR-0utorials.com * / #define F_CPU #in!"de $%&' #in!"de $%&' #in!"de $%&'
000000UL ( de"%.*+ ( i.*+ ( ine''.*+
#define Se/D%%P' POR;< #define Se/D%%Pin PIN< #define Se/D%%DDR DDR< #define Se/Cn'"P' POR;C #define Se/Cn'"Pin PINC #define Se/Cn'"DDR DDRC
/ * Varia2les glo2ales Declaraciones * / n-i/ned C*%' *'%- 02 -in fi'3%' C*%' 3in- 02 -in fi'3%' C*%' -e/nd 02
/ * unci6n D7gitos &-' a siete 5alores del segmento Encoder * / n-i/ned !%'n Di/i;?Se/En!de' fi'3%' !%'n !3n)2
8-in fi'3%'
!%'n dT/i-, -in
/ * Contador 0emporizador ( Comparar rutina de a4uste de un er5icio de Interrupci6n / Interrumpir ane4ador * / ISR 8;IMER1_COMPA_&e!)2
/ * Inicio rogram*/ / ************************************************************************* ****/ in 3%in 8 &id ) Se/D%%DDR 09FF 2 Se/Cn'"DDR 09F 2 Se/Cn'"P' 09FF 2 ;CCR1< 81 $$ CS1B 1 $$ >M1B)2 OCR1A 1= 6B= 12 ;IMSK 1 $$ OCIE1A2 -ei 8)2 3ien'%- e 81) ( : Min- e-%"e!id- %" "-%' Se/Cn'" Pin 6 Ine''' : ( -i 88Se/Cn'"Pin
090)
0)
_de"%_3- 8B00)2 -i 83in $=) 3in- JJ2 e"-e 3in- 02
/ * @oras esta2lecidos al pulsar egCntrl in B Interruptor * / -i 88Se/Cn'"Pin
090)
0)
_de"%_3- 8B00)2 -i 8*'%- $B) *'%- JJ2 e"-e *'%- 02
Se/D%%P' Di/i;?Se/En!de' Se/Cn'"P' 0901 2 Se/D%%P' Di/i;?Se/En!de' Se/Cn'"P' 090B 2 Se/D%%P' Di/i;?Se/En!de' Se/Cn'"P' 090 2 Se/D%%P' Di/i;?Se/En!de'
8 -e!nd- Q 10 , 1 ) 2 8 -e!nd- ( 10 , 1 ) 2 8 3ine- Q 10 , 1 ) 2 8 3ine- ( 10 , 1 ) 2
Se/Cn'"P' 090 2 Se/D%%P' Di/i;?Se/En!de' 8 *'- Q 10 , 1 ) 2 Se/Cn'"P' 0910 2 Se/D%%P' Di/i;?Se/En!de' 8 *'- ( 10 , 1 ) 2 Se/Cn'"P' 09B0 2 "&e'
/ * * * * * * * * * * * *
02
* unci6n descripti5a" Codi3icar un d7gito decimal - a su eui5alente de siete segmentos. Argumentos de 3unci6n" D7gito - d7gito decimal a codi3icar ComFn - Gnodo comFn &'? CHtodo ComFn &(' egVal - Codi3icado Valor siete segmentos Cone:iones" Encoded egVal es el retorno en la otra #EDCA es A es el menos oco signi3icati5o &2it ' 9 # 2it +. /
Un-i/ned !%'n Di/i;?Se/En!de' 8-in fi'3%' fi'3%' !%'n !3n) n-i/ned !%'n Se/%"2
-Gi!* 8 di/i ) !%-e 0 7
if 8 !33n
1 )
!%'n dT/i-, -in
Se/%"
000111111
2 e"-e
Se/%"
000111111 2 break 2
!%-e
1 7
if 8 !33n
1 )
Se/%"
000000110
2 e"-e
Se/%"
000000110 2 break 2
!%-e
B 7
if 8 !33n
1 )
Se/%"
001011011
2 e"-e
Se/%"
001011011 2 break 2
!%-e
7
if 8 !33n
1 )
Se/%"
001001111
2 e"-e
Se/%"
001001111 2 break 2
!%-e
7
if 8 !33n
1 )
Se/%"
001100110
2 e"-e
Se/%"
001100110 2 break 2
!%-e 2
= 7
if 8 !33n
1 )
Se/%"
001101101
e"-e
Se/%"
001101101 2 break 2
!%-e
6 7
if 8 !33n
1 )
Se/%"
001111101
2 e"-e
Se/%"
001111101 2 break 2
!%-e
? 7
if 8 !33n
1 )
Se/%"
000000111
2 e"-e
Se/%"
000000111 2 break 2
!%-e
7
if 8 !33n
1 )
Se/%"
001111111
2 e"-e
Se/%"
001111111 2 break 2
!%-e
7
if 8 !33n
1 )
Se/%"
001101111
2 e"-e
Se/%"
001101111 2 'e'n Se/%" 2
/ * Contador 0emporizador ( Comparar artido %n ser5icio de interrupci6n de rutina / Interrumpir ane4ador * / ISR 8;IMER1_COMPA_&e!) -e/nd JJ2
-i 8-e/nd
60)
-e/nd- 02 3in- JJ2 -i 83in-
60)
3in- *'%- JJ2 -i 8*'%+ B) *'%- 02
02