Está en la página 1de 20

DISPOSITIVOSLGICOS

MICROPROGRAMABLES
ndice/Introduccin

Ellenguajeensambladordel
PIC16F84A

CaractersticasespecialesdelPIC16F84A

8.1

InstruccionesdelPIC16F84A

EllenguajeensambladordelPIC16F84A
ndicedecontenidos
EllenguajeensambladordelPIC16F84A
ndicedecontenidos
Introduccin
Programaenensamblador
Desventajasdelensamblador
Mnemnicos
Identificacindeelementos
FlagsoBanderas
Registros
Elementosdeunainstruccin
f(fileregister)
w(workingregister)
b(bitaddresdentrodeunregistro)
lok(literal)
d(destinybit)
Estructuradeunprogramaenensamblador
Delimitadores(separacinentrecampos)
Etiquetas(label)
Operandosydirecciones
Directivasdelensamblador
DirectivaEQU
DirectivaORG
Directiva#INCLUDE
DirectivaLIST
DirectivaEND
Directiva#DEFINE
DirectivaTITLE
DirectivasIF...ELSE...ENDIF
DirectivaMACRO

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Introduccin

Ellenguajeensambladordel
PIC16F84A

8.2

Eljuegodeinstruccionesdeunmicroprocesdoromicrocontroladoreselconjuntodeentradasbinarias
queproducenaccionesdefinidasduranteunciclodeinstruccin.Unjuegodeinstruccionesesparael
microcontroladorlomismoqueunatabladeverdadesparaunapuertalgica,unregistrode
desplazamientoounsumador.Porsupuesto,lasaccionesquerealizaunmicrocontroladorconcada
instruccin,sonmscomplejasquelasquerealizanlosdispositivosypuertasantesmencionados.
Unainstruccinesunpatrndedgitosbinarioselcualdebeestaradisposicindelmicrocontrolador
eneltiempoyformaquestelorequiera.
Porejemplo,cuandoelprocesadordeunmicrocontroladorPIC16F84Arecibeelpatrnbinariode12
bits'000001000000'enelmomentoadecuado,significa:Clear(borraroponeracero)elregistroW,y
correspondealainstruccinCLRW.
EninstruccionesdelPIC16F84AsemuestraeljuegodeinstruccionescompletodelPIC16F84A
ParalosPICsehancreadounasinstruccionesyunaestructuradeprogramaqueloshacenms
sencillosyatractivostodava..
LasinstruccionesdelosmicrocontroladorPICcumplenconlassiguientescondiciones:
Juegodeinstruccionesreducido:Porejemplo,soloexisten35instruccionesenelPIC16F84A.
Sencillasyrpidas:Lamayoraseejecutaenunciclodeinstruccin,ysololasdesaltoprecisan2
ciclos.Elciclodeinstruccinconstade4ciclosderelojprincipal.Deestamaneraundispositivo
conuncristaldecuarzode20MHzrealiza5millonesdeinstruccionesporsegundo.
Ortogonalidad:Laubicacindelosoperandosquemanejanesmuyflexible.Cualquierobjetodel
procesadorpuedeactuarcomoorigenocomodestino.
Formatouniformedelasinstrucciones:Todaslasinstruccionestienenunalongitudfijadebits.
Estacaractersticasignificaunnotableahorrodelamemoriadeprogramayunafacilidadenla
construccindecompiladores.
Formatouniformedelosdatos.
UnprogramaesunaseriedeinstruccionesmediantelascualesunsistemabasadoenCPUrealizauna
tareaenparticularylaformamassimplederealizarunprogramaesmedianteellenguajeensamblador
(VerSistemasmicroprogramables,LenguajesdeprogramacinparasistemasbasadosenCPU).
Podramosdecirqueellenguajeensamblador"escomplejoporsusencillez".Estoquieredecirque,a
diferenciadeloslenguajesdealtonivel,aqunohayfuncionesquesolucionenysimplifiquenalgoritmos,
sinoquehayqueimplementarhastalospasosmselementales.

Programaenensamblador
ParaintroducirunprogramaenensambladorenunsistemabasadoenCPUtenemosquetraducirloa
hexadecimaloabinario.Pararealizarloasuvezseutilizaunprogramadeordenador,llamadoprograma
ensamblador.steseraunejemplodeprogramacinenensambladoromnemnicos:

start

org
movlw
movwf
movlw
addwf
end

0
0Eh
REG1
100
REG1,1

Desventajasdelensamblador
ExisteunagrandiferenciaentreeljuegodeinstruccionesdeunsistemabasadoenCPUylastareas
queestedeberealizar.Lasinstruccionestiendenahacercosascomo:sumarcontenidosdedosregistros,
desplazarelcontenidodeunacumuladorunbit,ocolocarunnuevovalorenelcontadordeprograma.
Porotrolado,centrandonosenelcasodelosmicrocontroladores,estedeberhacercosascomo:
reaccionarcuandounaentradadigitalseactiva,comprobarsiunvaloranalgicosehaexcedidodeun
ciertoumbral,activarunrelenunmomentodeterminado,mostrarresultadosenunpanelLCD,
comunicarsevaserieconotrosdispositivos,etc.Elprogramadorenlenguajeensambladordebe
"traducir"estastareasasecuenciasdesimplesinstrucciones.Estonosueleserfcilyconsumetiempode
trabajo.
Otroinconvenienteeslanoportabilidad.Cadamicroprocesadoromicrocontroladorposeesupropio
juegodeinstruccionesenelysupropiaarquitecturainterna.
UnprogramaenensambladorescritoparaelPIC16F84A,nocorrerenun65C02,Z80,8080,8051,o
cualquierotrosistemabasadoenCPU.InclusodentrodelosPIChaydiferenciasentrelasdistintasgamas
comonmeroytipodeinstrucciones,recursosdisponibles,direccinderegistrosousodelamemoria.
Parasolucionarestosproblemasestnlosprogramasdealtonivel,comoellenguajeCoBasic.

Mnemnicos
Latareaprincipaldelensambladoreslatraduccindeloscdigosdeoperacinenmnemnicoensus
equivalentesbinarios.
Elensambladorrealizastatareausandounatablacomosilohicisemos"amano"peroademsdebe
determinarcuantosoperandosrequierelainstruccinydequetipo.Estoesunpococomplejoalgunas
instrucciones(comoCLRW,SLEEP)notienenoperandos,otras(ADDLW13,GOTOFIN)tienenuna,
mientrasqueotras(BSFSTATUS,CoBTFSSPORTA,O)requierendos.

Identificacindeelementos
FlagsoBanderas
LosFlagsobanderassonmarcadores,representadosporbitsdentrodelregistrodeSTATUS,losmas
importantesson:
Z:Flagdecero,seponea1cuandounaoperacinqueleafectadacomoresultadoun0.
C:FlagdeCarry,seponea1cuandolaoperacinqueleafectasobrepasaelnivelde
representacindelprocesador,ennuestrocasoes8bits,deestamanerasisumamosa11111111b
un00000011belresultadoseria00000010byelbitdeCarrypasaraa1.
DC:Flagdecarrydelnibblesinferior,estesecomportaigualqueelbitdeCarry,soloqueel
limitederepresentacinsonlos4bitsinferiores,deestamanerasitenemos00001111by
sumamos00000111b,elresultadoser00010110byelbitdeDCseponea1,elbitdeCarry
estara0alnosuperarselos8bitsyelbitZa0alserelnmerodiferentede0.

Registros

Unregistroesunespacioenlamemoriadedatosdelmicrocontroladorenelquepodemosguardar
informacin,existentambinunosregistrosenloscualespodemosconfigurarelmicrocontroladoro
saberelestadodeesteoalgunosdesusperifricos.
Unregistroestcompuestopor8bitsloscualesserepresentandndolesunnumerosegnsuposicin,
deestamaneraelbitmenossignificativo(LSB)seledaelnmero0yelmssignificativo(MSB)el7.
BIT

REGISTRO X X X X X X X X
DondeXpuedeser10.
Alosbitsdel0al3selesdenominanibblesinferior,ydel4al7sedenominannibblessuperior.
Laformaderepresentacindepartedelosbitsdeunregistrosueleser:
Registro<3:0>
loqueindicalosbitsdel3al0delregistro.
Deestaforma,paraidentificarelBITZdeSTATUSsepondra:
STATUS<2>

Elementosdeunainstruccin
EnelcasodelPIC16F84AylosdelosPICdelagamamediacadainstruccinestformadaporuna
palabrade14bitsqueutilizauntipodecdigodenominadoOPCODE(CdigodeOperacin),que
especificaelmnemnicodelaoperacinylosoperandosquecorrespondan,quesonlosdatosconlos
queoperalainstruccin.
Ejemplo,instruccinCLRFf:
CLRF

CLRF
Clearf

Operacin

00hf
1Z

Sintaxis

[Etiqueta]CLRFf

Operadores

0<f<127

Ciclos
OPCODE
Descripcin

1
00

0001

1fff

SeborraelcontenidodelregistrofyelflagZseactiva

ffff

ElOPCODEdeCLRFfesenbinario"0000011fffffff"donde"fffffff"sesustituiraporelregistroque
sequieraborrar.fesunadelasabreviaturasqueseutilizanparadescribirlasinstruccionesdelPIC
usadosenellenguajeensambladoryqueson:
fRepresentaunregistrocualquieradelamemoradedatos.
wRegistrodetrabajo(WorkingRegister).
bDireccindeunbitdentrodeunregistrode8bits(07).
lkLiteraloconstantede8bits.
dBitdedestino,01.
xLosbitsqueestnrepresentadosporestetipodedatonotienenningunafuncinysuvalorlo
defineelcompilador.

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Ellenguajeensambladordel
PIC16F84A

8.3

Acontinuacinseexplicanconmsdetalle:

f(fileregister)
Estecarcterseusaparadefinirregistrosdecualquiertipo.Cualquierinstruccinquecontengaeste
campo,contendrladireccindeunregistro,nosucontenido.Unregistropuedevariarentrelas
direcciones00hy7Fh.
Enelcasodelosregistrosespecialesenvezdeladireccinpodemosponerdirectamenteelnombredel
registroqueelensambladorseencargarluegodetraduciralasdireccinreal.
Ejemplo,instruccinBSFf,b,Ponea1elbitbdelregistrof.
Enlugardeponer:

BSF

03,5

podemosponer:

BSF

STATUS,5

conloseponea1elbit5delregistrroSTATUS.

w(workingregister)
wdanombrealacumuladordelosPICs,elcuallovimosanteriormentecuandotratamoslosregistros.
Estenoesunregistrosituadoenunbancodememoria,sinoqueesindependiente.Adiferenciaqueel
anterior,cuandonosreferimosal,nosreferimosalcontenido.Suusoesmuysencillo,pueslousaremos
principalmenteparapasarinformacindeunregistroaotro,oparacontenerlainformacinentredoso
msinstrucciones.

b(bitaddresdentrodeunregistro)

Estaletradefineladireccindeunbitdentrodeunbyte.Enciertasocasionesenvezdemodificaro
accederabytestendremosquemodificaroaccederabits.Deestamanerapodemosespecificarauna
instruccinqueposicinocupaelbitsobreelcualrecaerlaaccinqueestaejecute.Aligualqueenlos
registrosespeciales,podemosponerdirectamenteelnombredeunbitdentrodeunregistro.
Ejemplo:
Enlugarde:

BSF

STATUS,5

ponemos:

BSF

STATUS,RP0

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Ellenguajeensambladordel
PIC16F84A

8.4

lok(literal)
Estevalorseralmacenadoenlapropiainstruccinentiempodeensamblado,estosignificaqueson
losvaloresqueintroducimosenlasinstruccionesparaquetrabajeconellos(independientementedelos
datosquepodamosalmacenarocontenerenlaEEPROMdedatos).Elvalorquepodemosintroducir
dentrodeunliteralestcomprendidoentre0y255,yaqueeselmximoquepuederepresentarunbyte.

d(destinybit)
Dondeencontremosestaletra,debemosespecificardondesealmacenarelresultadodeuna
instruccin,enwoenunregistro.Puestoqueestonoesunlenguajedealtonivel,nopodemosalmacenar
elresultadodeunaoperacinsobreunaterceravariableoregistro,asqueestedeberseralmacenadoen
elregistroorigen(sobrescribindose),oenelacumulador.Estosedefineatravsdedosvalores:
1:Elresultadosealmacenarenf.
0:Elresultadosealmacenarenw.

Estructuradeunprogramaenensamblador
Parahacerlatareadelprogramadormsgrata,seusanalgunasconvenciones.Cadaunopuedeadoptar
lasquemsleagradenyayudenparasermsproductivo.Engeneral,lasconvencionessoncualquier
accinquefacilitalarevisinycomprensindeunprograma,especialmenteelqueunomismohaescrito
cuandotienequerevisarloalgunosmesesdespus.Comentamosalgunasconvencionesqueusaremos:
Losficherosdecdigofuentellevarnlaextensin*.ASM
Losficherosdelistadollevarnlaextensin*.LST
Losficherosdecdigoobjetollevarnlaextensin*.OB]
Losficherosdeerroresllevarnlaextensin*.ERR
LosficherosejecutablesenformatoIntelHexllevarnlaextensin*.HEX
Comentariodescriptivodelprograma(utilizarunacabeceraestandarizada).
Definirelmicrocontroladorqueseusar(conlasdirectivasLISTeINCLUDE).

Introducirlasopcionesdecompilacin(quesernvistasmsadelante)(opcional).
Establecerlasconstantesqueseusarn(conladirectivaEQU).
Reservarespaciosdememoria(directivaRES)(siesnecesario).
Configurarlospuertos.
Desarrollarelprogramaconcomentarios,enloposibleexplicandocadalneadecdigo..
Losmnemnicosescritosenminsculaylasconstantesyvariablesenmaysculahacenqueel
cdigoescritoseamsvisible.
Colocarlasrutinasenelmismositio,todascontiguas.
Dibujardiagramasdeflujooescribirseudocdigo.
Suestructuraenunprogramaejemplomuysimple:

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Ellenguajeensambladordel
PIC16F84A

Hemosvistolaestructurageneral.Ahoraveremoslaposicindeloselementosdelcdigopor4
columnas:

Columna1:Etiquetas.Lasetiquetasserigenporlassiguientesnormas:
Debesituarseenlaprimeracolumna.
Debecontenernicamentecaracteresalfanumricos.

8.9

Elmximodecaracteresesde31.
Columna2:Operacin.Enestacolumnasesituarnlasinstrucciones.Elcampodelcdigode
operacineselnicoquenuncapuedeestarvacostesiemprecontieneunainstruccinouna
directivadelensamblador.
Columna3:OperandosElcampodeoperandosodedireccinpuedecontenerunadireccinoun
dato,opuedeestarenblanco.Normanmentecontendrregistrosoliteralesconlosqueseoperar
(f,lok,byw).
Columna4:Comentario.Elcampodelcomentarioodeetiquetasesopcional.Aqusesituar
cualquiercomentariopersonalizadoquedeseemos.Estossontilesparasaberquhaceun
programasintenerquedescifrarelcdigoentero.Elcompilador(ensamblador)ignorartodotexto
msalldelcarcterpuntoycoma"".
Loscomentariosgeneralmentesesitanenlacuartacolumnaparadescribirlaaccindeunalneade
cdigo,peropuedensituarseencualquierpartedeprogramaparadescribircualquierotroevento,siempre
queestndespusdelcarcter""(semicoloneningls).
Normalmentelascolumnassonseparadasporunatabulacin.Elespaciomnimoentredoscolumnas
esdeuncarcter,quepuedeserunespacioenvezdeunatabulacin.

Delimitadores(separacinentrecampos)
Loscamposvanseparadossloconespaciosy/otabulaciones.Noagreguenuncaotroscaracteres
(comas,puntos,etc.)
Noutiliceespaciosextra,particularmentedespusdecomasqueseparanoperandos.(Ej:movlw5,
w)
Nousecaracteresdelimitadores(espaciosytabulaciones)ennombresoetiquetas.

Etiquetas(label)
Lasetiquetassesitanalaizquierdadelasinstruccionesysirvenparaagruparfragmentosdecdigo.
Estosfragmentospuedenserdedostipos:
Elprimertiponoesunfragmentotalcual,sinoqueesunpuntodelprogramaalquepodremos
saltardemaneraincondicionalatravsdelainstruccinadecuada.
Elsegundotipoesdenominadosubrutina.Esteempiezaconunaetiquetayacabaconlainstruccin
RETURNoRETLW,queveremosmsadelante.
Deberemostenerencuenta:
Laetiquetaeselprimercampoenunalneaenlenguajeensambladorypuedenoexistir.
Siunaetiquetaestpresente,elensambladorladefinecomoelequivalentealadireccindel
primerbytecorrespondienteaesainstruccin.
Estaetiquetapuedevolverausarseenotrolugarperocomooperandodeunainstruccin.El
ensambladorreemplazarstaetiquetaporelvalordecuandofuecreada.Seusanfrecuentemente
enlasinstruccionesdesalto.
Nopuedeexistirmsdeunaetiquetaenlaprimeracolumnaoprimercampodeinstruccin.
Nopuedenusarsecomonombresdeetiquetasapalabrasyareservadasporelensamblador(ORG,
EQU,etc.)onombresdeinstrucciones(movlw,call,nop,etc.)
Ejemplo:

DATOEQU05h
INICIOmovlwDATO
gotoINICIO

LainstruccingotoINICIOcausaqueladireccindelainstruccinconlaetiquetaINICIO(movlw)
secargueenelPC(ContadordePrograma).Porlotantostainstruccinserluegoejecutada.
Nosepermiteelusodenmerosocaracteresnoalfabticoscomoprimeraletradelaetiqueta.Como
reglaprctica:usarsiempreletras,yenmayscula,almenoslaprimera.
Ejemplos:
TABLA2X2Perrmitido
+PESONOpermitido!
=>SALIDANOpermitido!
SALTONOpermitido!
5ALFANOpermitido!
Dato1Permitido
Dato2Permitido
Loop_APermitido

Operandosydirecciones
Losensambladorespermitenelegirconlibertadeltipodeelementoacolocarenelcampodeoperando
odireccin.
Sistemasdenumeracin
LosensambladoresaceptannmerosHexadecimales,octales,binariosodecimal.Estaeslaformade
representarlos:
Hexadecimal:
0A00h
$0A00
Binario:
%01001011
B'00100101'
01011010b
Octal:
@123
123Q
Decimal:
D'250'
.250

Ejemplo:
movlw.100

Significa:"moverelnmeroliteral100endecimalalregistrodetrabajoW"
YahemosindicadoqueMPLABeselentornodedesarrollodeMicrochipeincluyeelensamblador

MPASM,paraobtenerinformacinsobrelaconvencinutilizadaporesteverMPASM,elensamblador
deMicrochip
Nombres
Losnombrespuedenaparecerenelcampodeoperandostossontratadoscomoeldatoque
representan(VerdirectivaEQU).
Cdigosdecaracteres
AlgunosensambladorespermitenelusodecaracteresenASCII.Porejemplo:
data"hola1,2,3";cadenadecaracteres
data'N';carctersencillo
CHARequ't'
movlw'R'

Expresioneslgicasyaritmticas
Losensambladorespermitenconbinacionesdedatosconoperandosespeciales,aritmticosolgicos.
stosoperandossellamanexpresiones.
Porejemplo:
REG1EQU05h
VALOREQU20h
movlwVALOR+2
addwfREG1,1
addwfREG1+1,1

Enestoscasooelcompiladorutilizarelresultadodesumar(VALOR+2)o(REG+1)comooperando.

Directivasdelensamblador
Lasinstruccionesquepodemosutilizarconundispositivosonlasqueproporcionaelfabricanteparasu
productoyqueformanpartedelllamado"repertoriodeinstrucciones".Peroalutilizarunprograma
ensambladorpodemosintroducirademsinstruccionesocomandoqueproporcionaelpropio
ensamblador.Estoscomandosgeneralmenteseutilizanparasimplificarlatareadeprogramar,yreciben
elnombrededirectivas.
Porlotantolasdirectivasnosetraducendirectamenteainstruccionesdellenguajemquinasinoque
asignanalprogramaciertasreasdememoria,definensmbolos,designanreasdeRAMpara
almacenamientodedatostemporales,colocantablasodatosconstantesenmemoriaypermiten
referenciasaotrosprogramas.
Lasdirectivasseutilizancomocomandosescritosenelcdigofuentepararealizaruncontroldirectoo
ahorrartiempoalahoradeensamblar.Elresultadodeincorporardirectivassepuedeverenelfichero
*.LST,despusdeensamblarelprograma.
Parausarstasdirectivasopseudooperandos,elprogramadorlascolocaenelcampodelcdigode

operacin,y,silorequiereladirectiva,unadireccinodatoenelcampodedireccin.
HayqueaclararquelasinstruccionesdelosPIC'ssonnicasyquenohaynadamas,porejemploenel
PIC16F84Asonslo35(verinstruccionesdelPIC16F84A).Estodebetenerseclaroporquecuandose
comienzaconelensambladorpuedenconfundirseunpocolaspropiasinstruccionesdelosPIC'sconlas
directivaspropiasdelensamblador.
Acontinuacinseexponenlasmsrelevantes.

DirectivaEQU
Elnombrevienedelapalabra"equal",(igual)".LadirectivaEQUpermitealprogramador"igualar"
nombrespersonalizadosadatosodirecciones.Losnombresutilizadosserefierengeneralmentea
direccionesdedispositivos,datosnumricos,direccionesdecomienzo,direccionesfijas,posicionesde
bits,etc.Unnombreesmsdescriptivoqueunasimpledireccinylatareadeprogramarseharmucho
mssencilla.Tambinpodemosasignarunnombreaunainstruccinquerepitamosvariasvecesalo
largodeunalgoritmo,demaneraqueseamuchomssencillalaprogramacin.Aestosnombreque
asignamosmedianteestadirectivaselesdenominaconstantes,yaqueelregistroalqueapuntanno
variarduranteelprograma
Ejemplos:
tempequ12
DATOEQU22
PORT_AEQU5
STARTEQU0
CARRYEQU3
TIEMPOEQU5
Bank_1EQUBSFSTATUS,RP0

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Ellenguajeensambladordel
PIC16F84A

8.5

EstaslneastambinpuedenestnincluidasenunarchivoapartealASM(vasedirectivaINCLUDE).
Nosiempreesnecesarioqueconestadirectivaseigualenposicionesdememoriaalasetiquetas,ya
quepodemosponernombresadatos.Podemosdefinirunaequivalenciaconelnombredeotra
equivalenciayadefinidayrtealizaroperacionesmatemticas.Porejemplo,podemoscalcularla
frecuenciadelciclomquinaapartirdelafrecuenciaderelojconlafinalidaddeemplearlaparahacer
otrosclculosdelamaneraquesedescribeacontinuacin:
PORT_BEQUPORT_A+1
PORT_CEQUPORT_A+2
FINEQUSTART+100
FIN2EQUSTART+200
clockrateEQU.4000000;frecuenciadelcristal
fclkEQUclockrate/4;frecuenciadelrelojinterno

Elvalordeloperandodebeestaryadefinidoanteriormente,sinoelcompiladorentregarunerror.
Ademsdeesto,podemosigualaralasetiquetascualquierotrotipodevaloresqueusemos,como,por
ejemplo,elceroyel1enelbitdedestino:

W
F

EQU
EQU

0
1

Conestoltimo,cuandousemosunainstruccinendondedebamosespecificardondesealmacenarel
resultado,enwoenunregistro,enlugardeescribir:
1:paraqueelresultadosealmaceneenf.
0:paraqueelresultadosealmaceneenw.
Pondremos:
F:paraqueelresultadosealmaceneenf.
W:paraqueelresultadosealmaceneenw.
Generalmenteestoltimonosernecesariorealizarlo,siemprequeincluyamoselfichero"INC"
correspondientealPICconelqueestemostrabajando(vasedirectivaINCLUDE).

DirectivaORG
Estadirectivadicealensambladorapartirdequeposicindememoriadeprogramasesituarnlas
siguientesinstrucciones.Rutinasdecomienzo,subrutinasdeinterrupcinyotrosprogramasdeben
comenzarenlocacionesdememoriafijadosporlaestructuradelmicrocontrolador.Recordemosqueel
16F84slotiene1024posicionesdememoriaflashparacdigo.
LadirectivaORGhacealcompiladorcolocarelcdigoquelesigueenunanuevadireccinde
memoria(lasalidadelcompiladornosolocolocaloscdigosdeoperacinsinotambinlasdirecciones
decadainstruccindelprograma).Usualmenteselautilizapara:reset,programasdeserviciosde
interrupcin,programaprincipal,subrutinas.
Ejemplos:
1)Iniciaelprogramaenlaposicincero:
ORG

0x00

2)Iniciaelprogramaenlaposicin0000hyluegopasaala0005hparanoutilizarlaposicindel
vectordeinterrupcin(0004h)

Inicio

ORG
GOTO
ORG
xxx...

0x00
;Elprogramacomienzaenladireccin0y
inicio ;saltaaladireccin5parasobrepasar
0x05
;elvectordeinterrupcin,situadoenlaposicin4

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Ellenguajeensambladordel
PIC16F84A

3)Iniciaelprogramaenlaposicin0000hyluegopasaala0005hparanoutilizarlaposicindel
vectordeinterrupcin(0004h).Siseproduceunainterrupcinsepasaalaposicininterr.Las
subrutinascomienzanapartirdeladireccin0300h.
ORG00h;vectordereset
gotoinicializa

8.6

ORG04h;vectordeinterrupcin
gotointerr
ORG05h
inicializamovlw08h;aqucomienzaelprograma
.
.
ORG300h;subrutinas
Subrutina1
.
.
return
Subrutina2
.
.
return

Directiva#INCLUDE
Estadirectivaindicaquearchivosdeberntomarseencuentaalahoradecompilarelcdigo.
NormalmenteseusaparaincluirelarchivodePICqueelensambladortieneentresusarchivos,conel
cualelcompiladorsercapazdereconocertodoslosregistrosespecialesysusbits.Suusonosrecordar
al#includedellenguajeC.Estalneadebecolocarsealprincipio,ytienelasiguientesintaxis:
#INCLUDE

;Listadeetiquetasdemicrochip

Enciertasocasionesgrancantidaderroressondebidosaqueelnombredelarchivopuestoentre
comillasnoseescribecorrectamente.
SiutilizamosMPLAB,unentornodedesarrolloqueproporcionagratuitamenteMicrochip,
dispondermosdelosarchivosconextension.INCparacadaunodelosPICdesarrolladoshastala
aparicindelaversindeMPLABqueutilicemos.Enestosarchivossedefinentodoslosregistrosas
comootroselementosdeacuerdoalmicrocontroladorqueestemosutilizando.
Tambinpodemoscrearnuestrospropiosarchivos"INC"confunciones,definicionesysubrutinasque
utilicemosamenudoennuestrocdigoparaevitartenerquecopiarlascadavez.
ElarchivoP16F84A.INCquevieneconMPLABcontienedefinicionesderegistros,bitsybitsde
configuracin.LosarchivosINCpuedenverseconcualquiereditordetextoperonoserecomienda
modificarlos,paranoperdercompatibilidadconprogramasdesarrolladosporotros.
UtilizarelINCdelPICqueestamosutilizandoennuestroprogramanoesobligatorio,ypodemos
omitirlo,peroacambiotendremosquedefinirlosnombresdelosregistrosqueusemosobienllamarlos
porsuposicindememoria.
EstopuedealalargaserproblemticodemaneraqueserecomiendautilizarlosarchivosINC
correspondientesalPICqueutilicemosporqueademsdefacilitarlacreacindelprogramaalnotener
querecordarlasdireccionesrealesdelosregistrostambinsefacilitaelpasodeunprogramadiseado
paraunmicrocontroladorhaciaotrodistinto.
Siutilizamoslasposicionesdememoriaconladireccinreal,podemoshacerincompatibleslas
operacionesentreregistros.Porejemplo,CLRF0x05,borraelregistroubicadoenesadireccion,queno
esnimasnimenosqueelPORTA(PuertoA)enelPIC16F84A.Puesbien,siqueremosactualizarnosa
otromicrocontroladorperoresultaqueenesteelregistro0x05tieneotrafuncinnossermuchomas
dificilactualizarelprograma.Ahorabien,sihubisemosutilizadoCLRFPORTA,yel.INC

correspondientealnuevomicrocontroladoryaseocuparelensambladorderealizarlas
correspondencias.
YporsupuestosiempresermasfcilrecordarPORTAqueno0x05.
Tambinpermiteincluirotrosprogramas.Porejemplo:
#INCLUDE"DISPLAY.ASM"

EstoledicealcompiladorqueincluyaelcdigoqueseencuentraenelarchivoDISPLAYY.ASM
comosifuesepartedelpropioprograma.Estoesmuyutilparareutilizarcdigosrealizadoscon
anterioridad.

DirectivaLIST
Estecomandosirveparaqueelcompiladortengaencuentasobrequprocesadorseesttrabajando.
Estecomandodebeestarentodoproyecto,situadodebajodel"include",conlasiguientesintaxis.

LISTP=PIC16F84A

DirectivaEND
Aligualquelasdosanteriores,estadebeirincluidaunasolavezentodoelprograma.Enconcreto,
estadebesituarsealfinal,paraindicaralensambladorqueelprogramahafinalizado.Estasiempredebe
estarpresente,aunqueelflujodenuestroprogramaacabeenunbucle.

Directiva#DEFINE
#DEFINEesunadirectivamuyutil.Defineseusaparacrearpequeasmacros.Conestasmacros
podremosponernombresapequeosfragmentosdecdigoquenosfacilitarnlarealizaciny
comprensindelalgoritmo.
Porejemplo,podremosponernombresabits.
#defineCEROSTATUS,2

As,envezdetenerquellamaralbitporunnumeroyunregistro,podremosusardirectamentela
palabraCERO.
#defineCINCO5

CadavezqueseutilicelapalabraCINCOserreemplazadaenelmomentodelacompilacinporel
nmero5.

DISPOSITIVOSLGICOS
MICROPROGRAMABLES

Ellenguajeensambladordel
PIC16F84A

Otroejemplomuyprcticoeseldeponernombreaunfragmentodecdigousadofrecuentemente.
Estefragmentodecdigo,puedeserporejemplo,elqueconmutaentrelosdosbancos.

8.7

BSF
BCF

OPTION,RP0
OPTION,RP0

Comocambiamosvariasvecesdebancoalolargodeunalgoritmo,puederesultarmsprctico
ponerleunnombre.
#defineBANCO1 BSFOPTION,RP0
#defineBANCO0 BCFOPTION,RP0

DeestemodobastarconponerBANCO1oBANCO0paraconmutarentrelosdosbancosde
memoriademaneraquecadavezqueseutilicelapalabraBANCO1,enrealidadseestarutilizandola
instruccinBSFSTATUS,RPO
Enelsiguienteejemplo:
#definesalidaPORTA,3

Notendremosnecesidadderecordarcualeralapatilladesalida,sinoquesololomencionaremos
comosalida.Cadavezqueaparezcalapalabrasalidaenelcdigo,staserinterpretadacomo
PORTA,1queesunainstruccinvlida.Podemosponerloaceroconlainstruccin.
BCFsalida

Envezdetenerqueponer.
BCFPORTA,3

UnacosaatenerencuentaesqueconladirectivaINCLUDE,podemosprescindirdelcarcter
almohadilla(#),peroenelcasodeladirectivaDEFINE,no.
Estadirectivaesmuyutilporquehaceelcdigomsfcildeleeryentender.

DirectivaTITLE
Estadirectivanosirvedemucho,perosertilparaaquellosquequieranqueelcompiladortengaen
cuentaelttuloquelehapuestoasucdigo.Tienelasiguientesintaxis:
TITTLE"Nombredelcdigo"

Estenombreaparecerenlosarchivos.lst(listados)quecreeelcompilador.

DirectivasIF...ELSE...ENDIF
Algunosensambladorespermitenincluiroexcluirpartesdelprogramadependiendodecondiciones
queexistaneneltiempodecompilacin.
Laformatpicaes:
IFCONDICION
.
.
ELSE
.
.

ENDIF

Ejemplo:
SINKEQU1;(cambiarpor0encasonecesario)
IFSINK=1
BCFPORTA,0
ELSE
BSFPORTA,0
ENDIF

EnestecasoelvalordeSINKharqueelcompiladorutilicedistintasinstruccionesdecdigo.
Silacondicinesverdaderaeneltiempodecompilacin,lasinstruccionesqueestnentreIFyELSE
seincluirnenelprograma.Silacondicinesfalsaseincluirnenelprogramalasinstruccionesentre
ELSEyENDIF.
Losusostpicosson:
Paraincluiroexcluirvariablesextras
Paraincluircdigodediagnsticoencondicionesdetesteo(DEBUG).
Parapermitirdatosdedistintostamaos.
Desgraciadamente,elensambladocondicional,tiendeacomplicarlalecturadelprograma,porlotanto,
slodebemosutilizarlosiesnecesario.

DirectivaMACRO
Estadirectivaresultamuypotenteyadiferenciadeladirectiva#definesepuedencrearmacrosms
extensas,loquenosevitartenerqueejecutarreiteradamentefragmentosdecdigoidnticos.Cuando
unamacroesinvocada,estaescopiadaporelensambladorenellugardelainvocacindentrodelcdigo
fuente.LamacrosedeclaraconladirectivaMACRO,yterminaconladirectivaENDM.
Creacindeunamacrodenominadaactivar:
activarmacro
CLRFPORTA
BSFPORTB,2
endm

Hemoscreadounamacrollamadaactivardemaneraqueennuestrocdigocadavezquepongamosla
palabraactivar,elensambladorlareemplazarporCLRFPORTA...etc.hastaelfinaldelamacroque
terminaconladirectivaENDM(finmacro).
Lasmacrospermitenasignarunnombreaunasecuenciadeinstruccionesdemaneraquesontiles
cuandoocurrensecuenciasdeinstruccionesrepetitivas.Luegoseutilizaelnombredelamacroenel
programacomosiseusaralasecuenciadeinstruccionesanterior.
Lasmacrosnosonlomismoquelassubrutinas.Elcdigodelassubrutinasapareceunasolavezenun
programaylaejecucindelprogramasaltaalasubrutina.Encambio,elensambladorreemplazacada
aparicindelnombredelamacroconlasecuenciaespecificadadeinstrucciones.Porconsiguientela
ejecucindelprogramanosaltaalamacrocomounasubrutina.
Ejemplo:

Archivo"MULX10.ASM"
MULX10MACRO;comienzodelamacro
MOVFtiempo,W;guardaeltiempoenW
RLFtiempo;multiplicapor2
RLFtiempo;multiplicapor2
RLFtiempo;multiplicapor2
ADDWFtiempo;lesumaunavezms
ADDWFtiempo;lesumaunavezms
ENDM;findelamacro

Archivo"EJEMPLO1.ASM":
#INCLUDE"MULX8.ASM"
tiempoEQU 0Ch
resultadoEQU 0Dh
MOVLW20
MOVWFtiempo
MULX10
MOVWFresultado
END

Siensamblamos"EJEMPLO1.ASM"notaremosqueellistadofinal(EJEMPLO.LST)quedadela
siguienteforma:
tiempoEQU0Ch
resultadoEQU0Dh
MOVLW20
MOVWFtiempo
MOVFtiempo,W;guardaeltiempoenW
RLFtiempo;multiplicapor2
RLFtiempo;multiplicapor2
RLFtiempo;multiplicapor2
ADDWFtiempo;lesumaunavezms
ADDWFtiempo;lesumaunavezms
MOVWFresultado
END

ProblemasconlasMACROS
Conlasmacrossepuedetrabajarrpidamente,peropuedenresultaerpocoeficientes.Veamosunerror
muycomnalutilizarmacros,enestecasoseutilizaunamacrodenominadaMOVFF:
MULX10MACRO;comienzodelamacro
MOVFAUX1,W;Muevecontenidodeunregistroaotro
MOVWFAUX2;atravsdelacumulador
ENDM;findelamacro

Porcindecdigo:

MOVLW.1;TEMP=1
MOVWFTEMP
DECFTEMP,F;Zsevaa1
BTFSSSTATUS,Z;saltasiosi
MOVFFAUX1,AUX2;Macro
MOVWFPORTA
;...

Enlalneadelamacroestelerrorporquelossaltos(BTFSS)nopuedensaltarmacros.Lasmacros
estncompuestaspormsdeunainstruccin,yelsaltoseproducirdentrodelamisma.
Elcdigoanteriorconlamacroincrustadasera:
MOVLW.1;TEMP=1
MOVWFTEMP
DECFTEMP,F;Zsevaa1
BTFSSSTATUS,Z;saltasiosi
MOVFAUX1,W;lneasdeanteriormacro
MOVWFAUX2;
MOVWFPORTA
;...

Otrotemaimportante,queseilustraenesteejemplo,esquelasmacrospuedenmodificarregistros(en
estecasoW)deformaqueelprogramadorpodranotenerencuenta.
Enelejemploanterior,PORTAsedeberacargarcon1,queaparentementeeraelvalordeW,perola
macrolohamodificado,loqueresultaenotroerror.
Ejemplosdemacros
;************************************************************
;macros.asm;
;"MACROSpara16F84";
;************************************************************
callzmacrosubbrutina
btfscSTATUS,Z
callsubrutina
endm

callnzmacrosubrutina
btfssSTATUS,Z
callsubrutina
endm
movffmacrof2,f1;(atencin,sedestruyeW)
movff1,w
movwff2
endm
movlfmacrofile,literal;(atencin,sedestruyeW)
movlwliteral
movwffile
endm
;Atencin,parausarestasmacrosyadebeestaractivoelbanco1
CONF_PORTAmacrodato
movlwdato

movwfTRISA
endm
CONF_PORTBmacrodato
movlwdato
movwfTRISB
endm
;configurarOptionRegister:
CONF_OPTIONmacrodato
movlwdato
movwfOPTION_REG
endm
;configurarelregistrodeinterrupciones:
CONF_INTCONmacrodato
movlwdato
movwfINTCON
endm
SET_BANK_0macro
BCFSTATUS,RP0
endm
SET_BANK_1macro
BSFSTATUS,RP0
endm
;enableydisableallthemascarableinterrupts(16F84):
EImacro
bsfINTCON,GIE
endm
DImacro
bcfINTCON,GIE
endm
#defineiEnableEI
#defineiDisableDI
;arrancareltimer:
RESET_TIMERmacro
bcfINTCON,T0IF
endm
;inicializartimerantesdehacerRESET_TIMERparaquearranque.
INIT_TIMERmacrodato
movlwdato
movwfTMR0
endm
jmpmacrosalto
gotosalto
endm
retmacro
return
endm
;Complementoa1deW:
comwmacro

xorlw0xff
endm
;InstruccionesdesaltotipoZ80
jzmacro_salto ;saltasizero
btfscSTATUS,Z
goto_salto
endm
jnzmacro_salto ;saltasinozero
btfssSTATUS,Z
goto_salto
endm
jcmacro_salto ;saltasicarry
btfscSTATUS,C
goto_salto
endm
jncmacro_salto ;saltasinocarry
btfssSTATUS,C
goto_salto
endm
;************************************************************
;
FIN
;************************************************************

DISPOSITIVOSLGICOS
MICROPROGRAMABLES
ndice/Introduccin

Ellenguajeensambladordel
PIC16F84A

CaractersticasespecialesdelPIC16F84A

8.8

InstruccionesdelPIC16F84A

También podría gustarte