Está en la página 1de 64

INDICE

1. Especificacionesdemikrobasic
1.1 Predefiniendoglobalesyconstantes
1.2 Accesandoalosbitsindividuales
1.3 Interrupciones
1.3aLlamandorutinasdesdeinterrupciones
1.4Rutinasconstruidasopredefinidas(builtinroutines)
1.4aRutinas

Inc

Dec

Chr

Ord

SetBit

ClearBit

TestBit


Lo

Hi

Higher

Highest

SizeOf

Swap

Clock_Khz

Clock_Mhz

Reset

ClrWdt

1.4 Optimizacindecdigo

2. EspecificacionesdelPIC

2.1. TiposdeEficiencia

2.2.LimitacionesdeLlamadasAnidadas

2.3.EspecificacionesfamiliaPIC16

3.ReferenciadelLenguajemikroBasic.
3.1.Elementoslxicos
3.1aespaciosenblanco
3.1bcomentarios
3.1ctokens
3.1c.1literales
3.1c.2palabrasclave
3.1c.3identificadores.
3.1c.4signosdepuntuacinoseparadores

3.2 OrganizacindePrograma
3.2.a OrganizacindelPrograma

3.2.b AlcanceyVisibilidad

3.2.c Mdulos

3.3
3.4
3.5
3.6
3.7

Variables

Constantes

Etiquetas

Smbolos

FuncionesyProcedimientos

3.7.a Funciones

3.7.b Procedimientos

3.8 Tipos
3.8.a Tipossimples

3.8.b Arreglos

3.8.c Cadenas

3.8.d Punteros

3.8.e Estructuras

3.8.f Tiposdeconversin

3.8.f.1 Conversinimplcita

3.8.f.2 Conversinexplicita

3.8.f.3 Conversinaritmtica

3.9 Operadores
3.9.a Precedenciayasociatividad

3.9.b Operadoresaritmticos

3.9.c Operadoresrelacionales

3.9.d Operadoresinteligentes

3.10Expresiones

3.11Declaraciones
3.11.aDeclaracionesdeasignacin
3.11.bdeclaracionescondicionales
3.11.b.1DeclaracionesIF
3.11.b.2DeclaracionesSELECTCASE
3.11.cDeclaracionesdeIteracin(ciclos)
3.11.c.1DeclaracionFOR
3.11.c.2DeclaracionWHILE
3.11.c.3DecalaracionDO
3.11.dDeclaracionesdeSaltos
3.11.d.1DeclaracionesBREAKyCONTINUE
3.11.d.2DeclaracionEXIT
3.11.d.3DeclaracionGOTO
3.11.d.4DeclaracionGOSUB
3.11.eDeclaracionesASM
3.12Directivas
3.12.aDirectivasdelcompilador
3.12.bDirectivasdelLinker

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

ACERCADE
Dedicado:alaluzdemividaIzzyyamifuturoBebe
Motoresdemiexistencia

Estedocumentoeslatraduccin avecesinterpretativa,avecesayudadapor
programastraductoresdelaayudademikroBasic.Estedocumentonopersigue
ningnotrofinquenoseaayudaralosAficionadosalmundodelosPICSdehabla
hispanaydellenguajetanprometedorcomoloesmikroBasic.
Estedocumentoesgratuitoynotienecopyrightsololosquemikroelektronika
dispongaensusdocumentos.
Algunoserroresinterpretativospodrnencontrar,comounejemplodeelloesver
delantedelatraduccinlossiguientessignos(?),estoesquenopudeencontrar
la manera correcta de interpretar o traducir el enunciado. Tambin podrn
encontrardiferenciasenlatraduccin,comopuedeserlapalabra declaracin en
lugardeusarlapalabrasentencia.Dealgunaformatratedehacerunatraduccin
lomascristalinaposible,sinusarmuchasinterpretacionesaunqueavecesfue
necesarioomodismosdemipas(Mxico).
Creoyoqueeldocumentoesentendibleynospuedebrindarunpocodeayuda
parahacermasfcillainterpretacindelasreglas,instruccionesylibrerasdel
mikroBasic.Reiteroquenomanejoellenguajeinglesal100%ymenosellenguaje
tcnicoeninglesperoporlapocaexperienciaquetengousandoelmikroBasic
tratederealizarestedocumento.
Latraduccindelaayudacomomarcaenlosencabezadosdecadapginalahice
comountributoalmejorforodeMicrocontroladoresdehablahispana:TODOPIC.
Porlotantoestedocumentopertenecealforoyatodossususuarios.Pormiparte
este documento tiene licencia GPL al menos la traduccin y puede ser
modificadasiempreycuandoserespetealautororiginaldelatraduccin(eneste
casonavaismo)ysehagareferenciaalforoTODOPIC.
Pues sin nada mas que decir, solo me resta desearles suerte en este viaje
interminablehaciaalmundodelosPICSyalaintroduccindeunlenguajeenvas
dedesarrollocomoloeselBASICparaPICmicros.
Gracias a TOD@S y en especial a mikroelektronika por su Software demo:
mikroBasic

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
PREDEFINIENDOGLOBALESYCONSTANTES
Parafacilitarlaprogramacin,MikroBasicimplementaunnmeropredefinidodeVariablesglobales
yconstantes
TodoslosRegistrosSFRdelPICestndeclaradosimplcitamentecomovariablesglobalesdeltipo
byte,ysonvisiblesentodoelproyecto.Cuandosecreaunproyecto,MiKrobasicincluirelarchivo
apropiadoconextensin.def,elcualcontienelasdeclaracionesdisponiblesdelSFRyconstantes
(comoPORTB,TMR1,etc.).Losidentificadoresestntodosenmaysculas,idnticosalas
nomenclaturasdelashojasdedatosdeMICROCHIP.
Paraelsetcompletodeconstantesyglobalespredefinidas,Busque"DEFS"eneldirectoriode
instalacindeMikroBasic,opruebeelasistentedecdigoparaletrasespecificas(ctrl.+espacioen
eleditordecdigo).
ACCESANDOALOSBITSINDIVIDUALES
MikrobasicpermiteaccederdeformaindividualacadaBitdeunavariable.Simplementeuseun
punto(.)conlavariable,seguidodeunnumero.
PorEjemplo:
Dimmyvaraslongint
'rangodelosbitsdemyvaresdemyvar.0...myvar.31
'...
'siRB0es1,pon1enel28vo.bitdemyvar:
ifPORTB.0=1then
myvar.27=1
endif
Nohaynecesidadporunadeclaracinenespecial;estetipodeaccesoselectivoesuna
caractersticaintrnsecademikrobasicypuedeserusadaencualquierpartedelcdigo.Asegrese
denoexcedereltamaodeltipoapropiado.(P.E.PORTB.12retornaraunerroryaqueelPORTBes
unavariablede8bits).
SiestafamiliarizadoconunChipenparticular,puedeaccederasusbitsporsunombre:
'LimpiarTMR0F
INTCON.TMR0F=0
VeaPredefiniendoGlobalesyConstantesparamsinformacindelosnombresde
REGISTROS/BIT.
NOTA:Puedetambinaccederalosbitsindividualesdeunavariableflotantedeestaforma,pero
necesitaestarfamiliarizadoconelalmacenamientointernodetipoflotante.

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
INTERRUPCIONES
Puedenocuparseinterrupcionesfcilmentepormediodelapalabrareservadainterrupt.
mikroBasicimplcitamentedeclaraprocedimientointerrupt,elcualnopuedeserredeclarado.
Escribasupropioprocedimientoparaocuparinterrupcionesensuaplicacin.Notequenopuede
llamarrutinasdentrodelainterrupcindebidoalaslimitacionesdelapila(stack).
MikrobasicsalvalossiguientesSFRdentrodelapilayloseliminacuandoretorna:
FamiliaPIC12:W,STATUS,FSR,PCLATH
FamiliaPIC16:W,STATUS,FSR,PCLATH
FamiliaPIC18:FSR(Elcontextorpidoes
usadoparasalvarWREGBSR,STATUS)
NOTA:MikroBasicnosoportainterrupcionesdebajaprioridad;paralaFamiliaPIC18,las
interrupcionesdebenserenaltaprioridad.
LLAMANDORUTINASDESDEINTERRUPCIONES
Llamarfuncionesyprocedimientosdentrodeunarutinaesahoraposible.Elcompiladorseencarga
delosregistrosqueestnsiendousados,amboseninterruptyenmain.Yrealizaunswitcheo
inteligenteentreamboscontextos,salvandosololosregistrosqueamboshilospuedenusar.
LasFuncionesyprocedimientosquenotengansupropiomarco(sinargumentosovariables
locales)puedenserllamadosdesdelainterrupcinodesdemain.
EJEMPLOSDEINTERRUPCION
AquestaunejemplosimpledelmanejodeinterrupcionesdesdeTMR0(siningunaotra
interrupcinesrequerida)
subprocedureinterrupt
counter=counter+1
TMR0=96
INTCON=$20
endsub
Encasodemltiplesinterrupcioneshabilitadas,necesitaprobarcualdelasinterrupcionesocurrey
despusprocederconelcdigoapropiado(manejodeinterrupcin):
subprocedureinterrupt
ifTestBit(INTCON,TMR0IF)=1then
counter=counter+1
TMR0=96
ClearBit(INTCON,TMR0F)
'ClearBitsecomprendecomounafuncininline
'ydebeserllamadadentrodelainterrupcin
else

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
ifTestBit(INTCON,RBIF)=1then
counter=counter+1
TMR0=96
ClearBit(INTCON,RBIF)
endif
endif
endsub

RUTINASCONSTRUIDASOPREDEFINIDAS(BUILTINROUTINES)
ElcompiladormikroBasicestaprovistodeunaserietilderutinaspredefinidas.Lasrutinas
predefinidasnorequierendenadaespecial;puedehacerusodeellasencualquierpartedel
proyecto.
Algunasrutinaspredefinidasestnimplementadascomoinline;porejemplo:elcdigosegeneraen
ellugardelallamada,paraquelallamadanoestcontraellmitedellamadasanidadas.

RUTINAS

Inc

Dec

Chr

Ord

SetBit

ClearBit

TestBit


Lo

Hi

Higher

Highest

SizeOf

Swap

Clock_Khz

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

Clock_Mhz

Reset

ClrWdt

Inc
Prototipo:

subfunctionInc(dimbyrefparaslongint)aslongint

Regresa:

Elvalorincrementadodelparmetro

Descripcin: Incrementaelparmetroparpor1.Notequelafuncindebeserllamadacomo
unadeclaracinautocontenida.
Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas
Requiere:

Nada

Ejemplo

a=4
b=Inc(a)'aybahorasoniguala5

DEC
Prototipo:

subfunctionDec(dimbyrefparaslongint)aslongint

Regresa:

Elvalordecrementadodelparmetro

Descripcin: Decrementaelparmetroparpor1.Notequelafuncindebeserllamadacomo
unadeclaracinautocontenida
Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas.
Requiere:
Ejemplo:

nada
b=Dec(a)'aybahorasoniguala3

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Chr
Prototipo:

subfunctionChr(dimcodeasbyte)aschar

Regresa:

Regresauncarcterasociadoconelcarcter
especificodecode

Descripcin: Regresauncarcterasociadoconelcarcterespecificodecode.Nmerosde0a
31sonloscdigosASCCInoimprimibles
Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas.
Requiere:

Nada

Ejemplo:

c=Chr(13)'regresaunretornodecarro(enter)

Ord
Prototipo:

subfunctionOrd(dimcharacteraschar)asbyte

Regresa:

ElcdigoASCIIdecharacter

Descripcin: LafuncinregresaelcdigoASCIIdelcarcter.
Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas.
Requiere:

Nada

Ejemplo:

c=Ord("A")'Cahoraes65

SetBit
Prototipo:

subprocedureSetBit(dimbyrefregisterasbyte,dimrbitas
byte)

Regresa:
Descripcin:

Nada
Lafuncin"setea"(ponerenunooverdadero)elbitrbitdelregistro.El
parmetrorbitdebeserunavariableounaliteralcuyovalorseade0...7.Vea
redefiniendoglobalesyconstantesparamayorinformacindelos
identificadoresderegistros.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraque
lallamadanoestcontraellmitedellamadasanidadas.
Nada
SetBit(PORTB,2)'seteaRB2

10

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

ClearBit
Prototipo:

subprocedureClearBit(dimbyrefregisterasbyte,dimrbitas
byte)

Regresa:
Descripcin:

Nada
Lafuncionalimpiaelrbitdelregistro.Elparmetrorbitnecesitaseruna
variableounaliteralcuyovalorseade0...7.Veapredefiniendoglobalesy
constantesparamayorinformacindelosidentificadoresderegistros.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para
quelallamadanoestcontraellmitedellamadasanidadas.
Nada
ClearBit(PORTC,7)'LimpiaRC7(Limpiaroponera0ofalso)

TestBit
Prototipo:

subfunctionTestBit(dimregister,rbitasbyte)asbyte

Regesa:
Descripcin:

Sielbitestaseteado(verdadero),regresa1,enotrocasoregresa0
Lafuncinrevisasielrbitdelregistroestaseteado.Siestaseteado,lafuncin
retorna1,cualquierotrocasoretorna0.Elparmetrorbitnecesitaseruna
variableoliteralcuyovalorseade0...7.Veapredefiniendoglobalesy
constantesparamayorinformacindelosidentificadoresderegistros.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para
quelallamadanoestcontraellmitedellamadasanidadas.
Nada
flag=TestBit(PORTE,2)'1siRE2estaseteado,0sinoloesta.

Lo
Prototipo:

subfunctionLo(dimnumberasbyte..longint)asbyte

Regresa:
Descripcin:

Regresalos8bitsmenoresdenumber,bits0...7
Lafuncinregresalos8bitsmenoresdenumber.Lafuncinnointerpretalos
patronesbitdenumbersolamenteregresalos8bitsencontradosenelregistro.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraque
lallamadanoestcontraellmitedellamadasanidadas.
Nada
a=Lo(0x1AC30F4)'aseriguala0xF4

11

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Hi
Prototipo:

subfunctionHi(dimnumberasword..longint)asbyte

Regresaellossiguientes8bits(byte)delos8bitsmenoresdenumber,bits8...15
Regresa:
Descripcin: LafuncinregresaelsiguienteBytedelmenorbytedenumber.Lafuncinno
interpretalospatronesbitdenumbersolamenteregresalossiguiente8bits
encontradosenelregistro.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas.
Nada
a=Hi(0x1AC30F4)'aesiguala0x30

Higher
Prototipo:

subfunctionHigher(dimnumberaslongint)asbyte

Regresa:

Regresaelsiguientebytedelbytemasaltodenumber,bits16...23

Descripcin:

Requiere:
Ejemplo:

Lafuncinregresaelsiguientebytedelbytemsaltodenumber.Lafuncin
nointerpretalospatronesbitdenumbersolamenteregresalossiguiente8
bitsencontradosenelregistro.
Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para
quelallamadanoestcontraellmitedellamadasanidadas.
Nada
a=Higher(0x1AC30F4)'aesiguala0xAC

Highest
Prototipo:

subfunctionHighest(dimnumberaslongint)asbyte

Regresa:

RegresaelBytemasaltodenumber,bits24...31

Descripcin:

LafuncinregresaelBytemasaltodenumber,Lafuncinnointerpretalos
patronesbitdenumbersolamenteregresalossiguiente8bitsencontrados
enelregistro.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para
quelallamadanoestcontraellmitedellamadasanidadas.
Nada
a=Highest(0x1AC30F4)'aesiguala0x01

12

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
SizeOf
Prototipo:

subfunctionSizeOf(dimvariable_nameasstring[100])asword

Regresa:
Descripcin:

Regresaeltamaoenbytesdelavariable
EstafuncindaeltamaoenBytesdecuntoespaciodememoriaesusado
poreloperando.
Nada
structureTStruct
dimFieldAasbyte'1byte
dimFieldBasword'2bytes
endstructure'total3bytes

Requiere:
Ejemplo:

dimSomeVarasTStruct
dimSomeOtherVarasword

main:
someOtherVar=SizeOf(SomeVar)'SomeOtherVar=3
end.

Swap
Prototipo:

subfunctionSwap(dimbyrefargasbyte)asbyte

RegresaelByteconsistentedelosnibblesintercambiados
Regresa:
Descripcin: Intercambialosnibblesaltos(bits<7..4>)ylosnibblesbajos(bits<3..0>)deel
tamaodelBytedelparmetroarg.
Nada
Requiere:
Ejemplo:

PORTB=0xF0
PORTA=Swap(PORTB)'PORTA=PORTB=0x0F

Clock_Khz
Prototipo:

subfunctionClock_Khzasword

Regresa:
Descripcin:

EldispositivorelojinKHZ,esredondeadoalenteromascercano
EldispositivorelojinKHZ,esredondeadoalenteromascercano.

Requiere
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas.
Nada
clk=Clock_Khz

13

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Clock_Mhz
Prototipo:

subfunctionClock_Mhzasbyte

Regresa:

LafuncindispositivorelojenMHz,esredondeadoaelenteromascercano.

Requiere:
Ejemplo:

Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela
llamadanoestcontraellmitedellamadasanidadas.
Nada
clk=Clock_Mhz

Reset
Prototipo:

subprocedureReset

Nada
Regresa:
Descripcin: Esteprocedimientoesigualalainstruccinenensambladorreset.Este
procedimientofuncionasolamenteparalaFamiliaPIC18.
Requiere: Nada
Reset'ReseteaelPIC
Ejemplo:

ClrWdt
Prototipo:
Regresa:
Descripcin:
Requiere:
Ejemplo:

subprocedureClrWdt
Nada
Esteprocedimientoesigualalainstruccinenensambladorclrwdt
Nada
ClrWdt'LimpiaelWatchDogTimerdelPIC

Optimizacindecdigo
Laoptimizacinhasidoaadidaparaextenderlausabilidaddelcompilador,bajolacantidadde
cdigogeneradoylavelocidaddesuejecucin.Lasprincipalescaractersticasson:
PlegadoConstante
Todaslasexpresionespuedenserevaluadasaltiempodelacompilacin(porejemplouna
constante)sonreemplazadosporelresultado.(3+5>8);
LapropagacindeConstantes

Cuandounvalorconstanteestasignndoseaciertavariable,elcompiladorreconoceestoy
reemplazaelusodelavariableenelcdigoquesigueporlaconstante,contaldequeelvalorde
variablepermanezcainalterado.

14

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
CopiadePropagacin
Elcompiladorreconocedosvariablesquetienenelmismovaloryeliminaunadeellasenelcdigo.

EnumeracindeValor
Elcompilador"reconoce"sidosexpresionesrindenelmismoresultado,yporconsiguientepuede
eliminarelcmputoenteroparaunodeellos.
EliminacindecdigoMuerto
Elcdigoqueyanoesusadoenningunapartedelprograma,yquenoafectaelresultadofinalde
laaplicacin.Esautomticamenteremovido.
AsignacindelaPila
Losregistrostemporales("Pilas")seusanmsracionalmente,permitiendoexpresionesMUY
complejasparaserevaluadasconelconsumomnimodelapila.
OptimizacindeVariableslocales
Ningunavariablelocalseusasisuresultadonoafectaalgunasdelasvariablesglobalesovoltiles.
MejorGeneracindecdigoyOptimizacinlocal
LaGeneracindecdigoesmsConsistente,yMuchamsatencinsehaimplementadopara
solucionarespecficamentelaconstruccindelcdigo,parareducireltamaodecdigogenerado.
EspecificacionesdelPIC
ParaconseguirelmejorrendimientodelcompiladorMikroBasic,usteddebeestarfamiliarizadocon
ciertosaspectosdelPICmicro.Estosconocimientosnosonesenciales,peropuedenayudara
entendermejorlasposibilidadesylimitacionesdelPIC,ysuimpactoenellaescrituradelcdigo.
TiposdeEficiencia
Primeroquenada,debesaberquelaALUdelPIC,quienrealizalasoperacionesaritmticas,esta
optimizadaparatrabajarconBytes.AunqueMikroBasicescapazdetrabajarcontiposdedatos
muycomplejos,elPICpuedechocarconestos,especialmentesiestatrabajandoconmodelosmuy
viejos.Estopuedeaumentardramticamenteeltiemponecesariopararealizarhastaunasimple
operacin.Unconsejouniversalesusareltipomspequeoposibleencadasituacin.Estoaplica
engeneralparatodalaprogramacin,ydoblementeparalosMicrocontroladores.
Conozcasuherramienta,Cuandohagaclculos,notodoslosPICtienenelmismorendimiento.Por
ejemplo,laFamiliaPIC16notieneHardwareparamultiplicar2bytes,perosecompensaconun
algoritmoporsoftware.Porotrolado,lafamiliaPIC18tieneunhardwaremultiplicador,yporendela
multiplicacintrabajaconsiderablementemsrpido.

15

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
LimitacionesdeLlamadasAnidadas.
Lasllamadasanidadasrepresentanunallamadaaunafuncindentrodelcuerpodelafuncin.O
asmismo(llamadasrecursivas)aotrafuncin.Lasllamadasrecursivas,sonunaformadecruzar
lasllamadas,ynoestnsoportadaspormikroBasicdebidoalapiladelPICylimitacionesde
memoria.
MikroBasiclimitaelnmerodellamadasanidadasnorecursivasa:
8llamadasparalafamiliaPIC12
8llamadasparalafamiliaPIC16
31llamadasparalafamiliaPIC18
Notequelasrutinaspredefinidasnocuentanencontradellimite,debidoasuimplementacininline.
Elnumeropermitidodellamadasanidadasdecreceporunosiseusaenelcdigocualquieradelos
siguientesoperadores:*/%,Ydecreceporunosiusainterrupcionesenelprograma.
Sielnumeropermitidodellamadasanidadasesexcedido,elcompiladorreportaraunerrorde
desbordamientodelapila.
EspecificacionesPIC16
Saltandoentrepaginas
EnaplicacionesqueusenlosPIC16,ningunarutinasoladebeexcederunapagina(2000
instrucciones.Silarutinanoencajadentrodeunapagina,ellinkerreportaraunerror.Cuando
confronteesteproblema,talvezdebapensarcomoreplanteareldiseodesuaplicacintratede
hacerlarutinaenparticularespedazoscortos,etc.
LimitesdeacercamientoatravsdelFSR
PunterosconlafamiliaPIC16estncercanosysolopuedenllevar8bitsdeladireccin.El
compiladorautomticamentelimpiarael9no.bitalinicio.Paraquelospunterosserefieranalbanco
0y1,paraaccederalosobjetosenelbanco3o4vapunteros,elusuariodeberponerelIRP
manualmente,yrestaurarloa0despusdelaoperacin.
Nota:EsmuyimportantetenercuidadodelmanejodelIRP,sideseaseguirconesteacercamiento.
Sicreequeestemtodoesinapropiadocondemasiadasvariables,talvezdebaconsiderar
actualizarsealafamiliaPIC18.
Nota:Sitienemuchasvariablesenelcdigo,tratereestructurarlasconladirectivaabsolutedel
linker.Lasvariablesqueseaproximensolodirectamentedebensermovidasalosbancos3y4
paraincrementarlaeficiencia.

16

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
ReferenciadelLenguajeMikroBasic.
Elementoslxicos
EstostemasproporcionanunadefinicinformaldeloselementoslxicosdeMikrobasic.Ellos
describenlasdiferentescategorasdeunidaddetipodepalabra(TOKENS)reconocidasporel
lenguaje.
EnlafasedeTokenizacion,elcdigofuenteesanalizado(esdecir,despedazado)entokensy
espaciosenblanco.Lostokensenmikrobasicsonderivadosdeunaseriedeoperaciones
realizadasensuprogramaporelcompilador.
UnprogramadeMikroBasiccomienzacomounasecuenciadecaracteresASCII,querepresentan
elcdigofuente,creadoporpalabrasclaveusandouneditordetexto(comoeleditordecdigode
mikroBasic).ElprogramabsicodemikrobasicesunarchivoguardadoenlaRAMoenundisco
teniendoporextensin.pbas.
EspaciosenBlanco
Losespaciosenblancoeselnombredadoalosespacios(blancos),horizontalesoverticalesy
comentarios.LosespaciosenblancosirvenparaindicardondeempiezanlosTokensydonde
terminan.Masalldeestocualquierespacioenblancoesdescartado.
Porejemploestas2secuencias:
dimtmpasbyte
dimjasword
y
dimtmpasbyte
dimjasword
Sonlxicamenteequivalentesyanalizadasidnticamente.
EspaciosenBlancoencadenas
LoscaracteresASCIIrepresentandounespacioenblancopuedendarsedentrodelascadenas
literales,encuyocasoestnprotegidosporelanlisisgramaticalnormal(permanecencomoparte
delacadena).Porejemplo:ladeclaracin

some_string="mikrofoo"
analiza4tokens,incluyendolacadenasimpledeltoken:
some_string
=
"mikrofoo"
newlinecharacter

17

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Comentarios
Loscomentariossonpedazosdetextousadosparahaceranotacionesenelprograma,yson
tcnicamenteotraformadeespaciosenblanco.Loscomentariossonsolamenteparaelusodel
programador;estossonquitadosdelcdigofuenteantesdeanalizar.
Useelapostrofeparacrearuncomentario:
'Cualquiertextoenmediodeunapostrofeyelfindelalnea
'constituyeuncomentario.Puedeserunasolalnea.
NohaycomentariosmultilneaenBASIC.

TOKENS
UnTokeneselelementomaspequeoenBASICqueessignificativoparaelcompilador,El
analizadorseparalosTokensdelaentradacreandounTokenmaslargousandoloscaracteresde
izquierdaaderecha.
MikroBasicreconocelossiguientestiposdeTokens:
PalabrasClave
Identificadores
Constantes
Operadores
Signosdepuntuacin(tambinconocidoscomoSeparadores)
Ejemplodetokens
AquhayunejemplodeextraccindeTokens.Veamoselsiguientecdigo:
end_flag=0
Elcompiladoranalizaralossiguientes4tokens:
end_flag'identificadordelavariable
='operadordeasignacion
0'literal
newline'terminodeladeclaracin
Notequeend_flagseranalizadocomounidentificador,nocomolapalabraclaveendseguidade
_flag.

18

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
LITERALES
LasLiteralessontokensquerepresentanunvalornumricooelvalordeuncarcter.
Eltipodedatodeunaconstanteesdeducidoporelcompilador,usandopistascomoelvalor
numricoyelformatousadoenelcdigofuente.
ENTEROS
LosvaloresenterospuedenserrepresentadosenformatoDecimal,Hexadecimaloennotacin
binaria.
EnnotacinDecimal,losnumeralessonrepresentadoscomounasecuenciadedgitos(sincomas,
espacios,opuntos),conlosprefijosopcionales+oparaindicarelsigno.Pordefaultlosvalores
sonpositivos(6258esequivalentea+6258).
Elprefijosignodepesosodlar($)oelprefijo0xindicaunnumerohexadecimal(porejemplo,$8F
o0x8F).
Elprefijosignodeporcentaje(%)indicaunnumerobinario(porejemplo%0101).
Aquhayalgunosejemplos:
11'Valordecimal
$11'ValorHexadecimal,Iguala17decimal
0x11'ValorHexadecimal,Iguala17decimal
%11'ValorBinario,Iguala3decimal
Elrangomximopermitidodeunvaloresimpuestoporlalongituddeltipodedatoenmikrobasic
longint.Elcompiladorreportaraunerrorsilaliteralexcedeelvalor2147483647($7FFFFFFF).
PUNTOFLOTANTE
UnValordepuntoFlotanteconsisteen:
UnenteroDecimal
ElPuntoDecimal
Lafraccindecimal
eoEyelenteroconsignodelexponente(opcional)
Lasconstantesnegativasflotantessontomadascomoconstantespositivasconeloperadorunario
menos()comoprefijo.
MikroBasiclimitalasconstantesdepuntoflotanteaunrangode+1.17549435082*10e18...+
6.80564774407*10e38
Aqualgunosejemplos:
0.'=0.0

19

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
1.23'=1.23
23.45e6'=23.45*10^6
2e5'=2.0*10^5
3E+10'=3.0*10^10
.09E34'=0.09*10^34
CARACTERES
LasliteralesdecaracteressonsolamenteuncarcterdelcdigoASCCI,dentrodecomillas(Por
ejemplo,"A").ElcarcterpuedeserasignadoavariablesdetipoByteyChar(lavariablebyte
asignaraelvalorASCIIdelcarcter).tambinpuedeasignarvariablescarcteravariablestipo
cadena.
CADENAS
Unacadenaesunasecuenciade255caracteresdelcdigoASCII,dentrodecomillas.Los
espaciosenblancosonpreservadosdentrodelascadenas.Porejemploelanalizadorvela
siguientecadena:"IRA"comounsimpletoken.
Lalongituddelascadenasdependedelnumerodelqueconsisten.Lascadenasseguardan
internamentecomolasucesindadadecaracteresmsuncarcternulofinal(elcerodelASCII).
Lascadenasquenotengannadadentrodelascomillassonguardadascomouncarcternulo.
Puedeasignarcadenasavariablesdecadenaoaunarreglodevariableschar.
Algunosejemplos:
"Helloworld!"'mensaje,12caracteresdelongitud
"Temperatureisstable"'mensaje,21caracteresdelongitud
""
'dosespacios,2caracteresdelongitud
"C"
'Letra,uncarcterdelongitud
""
'cadenavacia,0caracteres
Lascomillasporsimismasnopuedenserpartedelascadenas,sideseausarcomillastendrpor
ejemploqueusarlarutinaconstruidaChrparaimprimirlascomillas:Chr(34).
PalabrasClave
Laspalabrasclavesonpalabrasreservadasparapropsitosespecialesynopuedenserusadas
comounnombredeunidentificador.
LaspalabrasclavedeBasicylasrelevantesdelregistroSFRsondefinidascomovariables
globalesyrepresentanpalabrasreservadasquenopuedenserredefinidascomoporejemplo:
PORTB,TIMER0,T1CON,etc.Pruebeelasistentedecdigoparaletrasespecificasorefirasea
PredefiniedoGlobalesyContstantes.
AquestaellistadoalfabticodelaspalabrasreservadasenMikroBasic:

20

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

absolute
abs
and
array
asm
begin
boolean
case
char
chr
clear
const
dim
div
do
double
else
end
exit
float
for
function
goto
gosub

21

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

if
include
in
int
integer
interrupt
is
loop
label
mod
module
new
next
not
or
org
print
procedure
program
read
select
sub
step
string
switch
22

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

then
to
until
wend
while
with
xor

Mikrobasictambinincluyeunnumeropredefinidodeidentificadoresusadosenlas
libreras.Puederemplazarestosporsuspropiasdefinicionesustedplaneahacer
suspropiaslibreras.ParamasinformacinvealibrerasdeMikrobasic.

Identificadores.

Losidentificadoressonnombresarbitrariosdecualquierlongituddadosa
Funciones,variables,Constantessimblicas,tiposdedatospordefinidosporel
usuarioyetiquetas.Todosestoselementosdeprogramasonrelacionadoscon
objetosatravsdelaayuda.(noseconfundaconelterminoobjetodela
programacinorientadaaobjetos).
maysculasoMinsculas
Basicnoessensiblealasmaysculasoalasminsculas,porlotantoSum,sumy
suMsonidentificadoresequivalentes.
SingularidadyAlcance
Aunquelosnombresdelidentificadorsonarbitrarios(dentrodelasreglas
declaradas),loserroresresultansielmismonombreseusaparamsdeun
identificadordentrodelmismoalcance.Simplemente,losnombresdoblesson
ilegalesdentrodelmismoalcance.Paramsinformacin,refirasealAlcancey
Visibilidad.

23

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

EjemplosdeIdentificadores:
temperature_V1
Pressure
no_hit
dat2string
SUM3
_vtext

Yaquiunosidentificadoresinvlidos:

7temp'NONopuedeniniciarconunnumero
%higher'NONopuedeniniciarconcaracteresespeciales
xor'NONopuedenserunapalabrareservada
j23.07.04'NONopuedencontenerpuntos

Signosdepuntuacinoseparadores
lossignosdepuntuacindeMikroBasicson:

Corchetes
Parntesis
Comas
Dospuntos
Punto

Corchetes
Loscorchetes[]indicanunsimpleomltiplesarreglos:
dimalphabetasbyte[30]
'...
alphabet[2]="c"
ParamasinformacinveaArreglos.
Parntesis

24

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Losparntesis()sonusadosparaungrupodeexpresiones,aislarexpresionescondicionales,
indicarlallamadadeunarutinaylasdeclaracionesdelarutina:
d=c*(a+b)'Separarlaprecedencianormal
if(d=z)then...'Usadoconexpresionescondicionales
func()'llamandounarutinasinargumentos
subfunctionfunc2(dimnasword)'declarandolafuncinconsusparmetros.
ParamasinformacinveaPrecedenciadeoperadoresyasociatividaddeexpresionesoFunciones
yProcedimientos.
Coma
Lacoma(,)separalosargumentosenlasllamadasarutinas:
Lcd_Out(1,1,txt)
Sirveparasepararidentificadoresenlasdeclaraciones:
dimi,j,kasword
Lacomatambinseparaelementosdeinicializacinenlaslistasdelosarreglos:
constMONTHSasbyte[12]=(31,28,31,30,31,30,31,31,30,31,30,31)

DosPuntos
Losdospuntos(:)sonusadosparadeclaraunaEtiqueta:

start:nop
...
gotostart
ParamasinformacinveaEtiquetas.

25

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Punto
Elpunto(.)indicaelaccesoaunmiembrodeunaestructura.Porejemplo:
person.surname="Smith"
ParamasinformacinVeaEstructuras.
Elpuntoesparteesencialdelasliteralesdepuntoflotante.Ademselpuntosirveparaaccedera
losbitsindividualesdelosregistrosenMikroBasic.

OrganizacindelPrograma
MikroBasictieneunaestrictaorganizacindeprogramaimpuesta,debajo
encontraramodelosparaunaescrituralegibledecdigo.Paramasinformacinde
lainclusindearchivosyalcanceveaMdulosytambinAlcanceyvisibilidad.
OrganizacindelModuloPrincipal
Bsicamente,elcdigofuentetienedossecciones:declaracionesyelcuerpodel
programa.Lasdeclaracionesdebenirenlaparteapropiadadelcdigo,
organizadasdemaneraordenada,deotroformaelcompiladornosercapazde
comprenderelprogramacorrectamente.
Cuandoescribaelcdigo,sigaelmodeloquesepresentadebajo.Elmodulo
principaldeberlucirdelasiguientemanera:
program<nombredelprograma>
include<incluirotrosmdulos>
'********************************************************
'*DeclaracionesGlobales:
'********************************************************
'Declaracionessimblicas
symbol...
'declaracindeconstantes
const...
'declaracindeVariables
dim...
'declaracindeprocedimientos
subprocedurenombredelprocedimiento(...)
<Declaracioneslocales>
...
endsub

26

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
'declaracindefunciones
subfunctionnombredelafuncin(...)
<declaracionesglobales>
...
endsub
'********************************************************
'*CuerpodelPrograma
'********************************************************
main:
'Escribaelcdigoaqui
end.
Organizacindeotrosmdulos
LosmdulosquenoseanelModuloprincipaldebenempezarconlapalabraclavemodule;la
seccindeimplementacinempiezaconlapalabraclaveimplements.Sigaelmodelopresentado
debajo:
module<nombredelmodulo>
include<incluirotrosmdulos>
'********************************************************
'*Interfase(Globales)
'********************************************************
'declaracindesmbolos
symbol...
'declaracindeConstantes
const...
'declaracindeVariables
dim...
'Prototiposdeprocedimientos
subprocedureNombredelprocedimiento(...)
'Prototipodelafuncin
subfunctionNombredelafuncin(...)
'********************************************************
'*implementacin
'********************************************************
implements

27

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
'declaracindeconstantes
const...
'declaracindeVariables
dim...
'declaracindeprocedimientos
subprocedurenombredelprocedimiento(...)
<Declaracioneslocales>
...
endsub
'declaracindelafuncin
subfunctionnombredelafuncin(...)
<Declaracioneslocales>
...
endsub
end.
AlcanceyVisibilidad
Alcance
Elalcancedelosidentificadoreseslapartedelprogramadondelosidentificadorespuedenser
usadosparaaccederunobjeto.Haydiferentescategorasdealcancesydependendecomoy
dondefuerondeclaradoslosidentificadores:
Lugardeladeclaracin
Elidentificadoresdeclaradoenlaseccinde
declaracionesdelmoduloprincipal,fuerade
cualquiermodulooprocedimiento

Elidentificadoresdeclaradodentrodeuna
funcinodeunProcedimiento
Elidentificadoresdeclaradoenlaseccinde
interfasedeunModulo

ElIdentificadorfuedeclaradoenlaseccin
deimplementacindeunmodulo,perono
dentrodeunafuncinoprocedimiento.

Alcance
Elalcanceseextiendedesdeelpuntodonde
fuedeclaradohastaelfinaldelarchivo,
incluyendotodaslasrutinasdentrodel
alcancedelarchivo.Esteidentificadortiene
unarchivodealcanceyesreferidocomo
GLOBAL
Elalcanceseextiendedesdeelpuntodonde
fuedeclaradohastaelfindelarutinaenuso.
EsteidentificadoresreferidocomoLOCAL
Elalcanceseextiendedelpuntodondefue
declaradohastaelfindelmoduloyhasta
cualquierotroprogramaqueuseese
modulo.Lanicaexcepcinsonlos
smbolosquetienenalcancelimitadoenel
archivoenelcualfuerondeclarados.
Elalcanceseextiendedelpuntodondefue
declaradohastaelfindelmodulo.El
identificadorestadisponibleparacualquier
funcinoprocedimientoqueestedentrodel
modulo.

28

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

VISIBILIDAD
Lavisibilidaddeunidentificadoreslaregindelprogramadelcdigofuentedondepuedehacerse
elaccesolegalalobjetoasociadoalidentificador.
Elalcanceylavisibilidadgeneralmentecoinciden,aunquehaycircunstanciasenlaqueunobjeto
sevuelveocultotemporalmenteporelaparenteduplicadodelidentificador.Elobjetoaunexiste
peroelidentificadornopuedeserusadoparaseraccesadohastaqueelalcancedelidentificador
duplicadotermine.
Tcnicamente,lavisibilidadnopuedeexcederalalcance,peroelalcancepuedeexcederla
visibilidad.
MODULOS
EnmikroBasiccadaproyectoconsisteenunnicoarchivodeproyecto,yunoomasarchivosde
mdulos.Elarchivoproyectoconextensin.pbpcontieneinformacinacercadelproyecto,
mientrasquelosmdulosconextensin.pbascontienenelcdigofuente.VeaOrganizacinde
programaparaverdetalladamenteelarreglodeunprograma.

Losmdulospermiten:
Separarprogramasextensosenmdulosencapsuladosquepuedenser
accesadosyeditadosindividualmente.
Crearlibrerasquepuedenserusadasendiferentesproyectos.
Distribuirlibrerasaotrosprogramadoressinincluirelcdigofuente.
Cadamoduloesguardadocomosupropioarchivoycompiladoporseparado,losmdulos
compiladossonencadenadosparacrearunaaplicacin.Paracrearunproyectoelcompilador
necesitacadaarchivofuenteoelmodulocompiladodecadamodulo.
ClusulaINCLUDE
MikroBasicincluyelosmdulosquetenganlaclusulainclude,lacualconsisteenlapalabra
reservadaincludeseguidadeelnombredelmoduloentrecomillado.Laextensindelarchivono
debeserincluida.
Puedeincluirunsoloarchivoporcadaclusulainclude.Puedehabercualquiernumerode
clusulasincludeencadacdigofuente,Peroellosdebendeclararseinmediatamentedespusdel
nombredelprograma.
Porejemplo:

29

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
programMyProgram
include"utils"
include"strings"
include"MyUnit"
...

Dndoleunnombrealmodulo,elcompiladorverificaralapresenciadelosarchivos.mcly.pbas.
Enordenespecificadoporlasrutasdebsqueda.

Siambos.mcly.pbassonencontrados,elcompiladorverificara
lasfechaseincluirelmasrecienteenelproyecto.Sielarchivo
.pbasesmasnuevoqueelarchivo.mcl,lanuevalibrera
sobrescribirlavieja
Sisoloelarchivo.pbasesencontrado,elcompiladorgenerarael
archivo.mclyloincluirenelproyecto.
Sisoloseencuentraelarchivo.mclynohaycdigofuente,el
archivo.mclseincluirenelproyectotalcomoseencuentra.
Siningunoesencontrado,elcompiladoremitirfilenotfound
(Archivonoencontrado)comounaadvertencia.
MODULOPRINCIPAL(MAIN)
Cadaproyectoenmikrobasicrequieredeunnicomoduloprincipal(main)elmoduloprincipales
identificadoporlapalabrareservadaprogramalinicio;estosirveparaqueelcompiladorsepapor
dondeempezar.
Despusdequehayacreadounnuevoproyectoconelasistentedeproyecto,eleditordecdigo
desplegaraunnuevomoduloprincipal,elcualcontienepartesdeunprograma.
programMyProject
'mainprocedure
main:
'Placeprogramcodehere
end.
Nadaquenoseauncomentariodebeirprecedidoporlapalabrareservadaprogramdespusdel
nombredelprogramaustedpuedeincluiropcionalmentelasclusulasinclude
Pongatodaslasdeclaracionesglobales(constantes,variables,etiquetas,rutinas)antesdela
etiquetamain

30

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
NOTA:Enmikrobasic,ladeclaracinend.(ladeclaracindefinalizacindecualquierprograma)
actacomouncicloinfinito.
OTROSMODULOS
Cualquierotromoduloquenoseaelprincipaldebercomenzarconlapalabrareservadamodule.
Nuevamentecrearaunespacioenblancodelmoduloelcualpuedeluciras:
moduleMyModule
implements
end.
Cualquierotracosaquenoseauncomentarionodebeirprecedidadelapalabrareservada
module.Despusdelaclusulamoduleustedpuedeaadiropcionalmentelaclusulainclude.
SECIONDEINTERFACE
Partedelmodulosobrelapalabraclaveimplementsserefierealaseccindeinterfase.Aqupuede
ponerlasdeclaracionesglobales(constantes,variablesyetiquetas)paraelproyecto.
Nopuededefinirrutinasenlaseccindeinterfase,Encambiodeclarelosprototiposdelasrutinas
(delaseccindeimplementacin)quequieraqueestnvisiblesfueradelmodulo.Elprototipo
debecoincidirconladeclaracinexactamente.

SECCIONDEIMPLEMENTACION
Laseccindeimplementacinescondetodaslasentraasirrelevantesdeotrosmdulos,
permitiendoaselencapsuladodelcdigo.
Cualquierdeclaracindebajodelapalabrareservadaimplementesesprivada.Esdecirtieneun
alcancelimitadoalarchivo.Cuandodeclareunidentificadorenlaseccindeimplementacindeun
modulo,nopodrusarlofueradeesemodulo,peropuedeusarloencualquierrutinaobloque
definidodentrodelmodulo.
Poniendoelprototipoenlaseccindeinterfase(arribadelaseccindeimplementacin)puede
hacerunarutinapublica.Esdecirvisiblefueradelmodulo.Elprototipodebecoincidirexactamente
conladeclaracin.

VARIABLES
Unavariableesunobjetocuyovalorpuedesercambiadoduranteeltiempodeejecucin.Cada
variabledebeserdeclaradabajounniconombredeidentificadorvalido.Estenombreesusado
paraaccederallugardelamemoriaqueocupalavariable.
Cadavariableesdeclaradaenlaseccindedeclaracindecualquierarchivoorutina,cada
variabledebeserdeclaradaantesdeserusada.LasvariablesGlobales(aquellasquenoestn

31

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
encerradasporningunarutinaoprocedimiento)sondeclaradasdebajodelasclusulasincludey
arribadelaetiquetamain.
Esimperativoespecificareltipodevariablesenmikrobasic.Lasintaxisparadeclaraunavariable
enMikroBasices:
dimnombre_de_identificadorastype
Dondenombredelidentificadorpuedeestardelimitadoporunacomaparaseparardiferentes
nombresdeidentificadoresytypeeseltipodedatosoportadoporMikroBasic.
ParamasdetallesveaTiposyTiposdeconversiones,Paramasinformacindelalcancedelas
variablesveaAlcanceyVisibilidad.
Aqualgunosejemplos:
dimi,j,kasbyte
dimcounter,tempasword
dimsamplesaslongint[100]
VARIABLESYELPIC
CadavariabledeclaradaconsumeunapartedelamemoriaRAMdelPIC.Eltipodedatodela
variablenosolodelimitaelrangodelavariablesinotambindeterminaelespaciousadoenla
memoriaRAMdelPIC.Tengaenmentequerealizaroperacionescondiferentestiposdevariables
tomadiferentestiemposensercompletadas.mikroBasicreciclaelespaciodevariableslocales
lasvariableslocalesdeclaradasendiferentesrutinasyprocedimientoscompartenelmismo
espaciodememoriasiesposible.
NoesnecesariodeclarareltipodevariablesdelregistroSFR,mikroBasicautomticamentedeclara
losregistrosrelevantescomovariablesglobalesdeltipobyteporejemplo:T0IE,INTF,etc.
CONSTANTES
Unaconstanteesundatocuyovalornopuedesercambiadoduranteeltiempodeejecucin.Usar
unaconstanteenunprogramanoconsumememoriaRAMdeunPIC.Unaconstantepuedeusarse
encualquierexpresinperonoselepuedeasignarotrovalor.
Lasconstantessondeclaradasenlaseccindedeclaracindeunprograma.Lasintaxisde
declaracindeunaconstantedeberseras:
constconstant_name[astype]=value
Cadaconstanteesdeclaradabajounniconombre,elcualdebeserunidentificadorvalido.Esuna
tradicinescribirlasconstantesenmaysculas.Unaconstantenecesitaqueseespecifiquesuva
lor(value)queesunaliteralapropiadaparaeltipodedatousado.Eltipo(type)esopcional;enla

32

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
ausenciadeltipoelcompiladorasumeeltipodedatomaspequeoelcualseajustealtamaodel
valor.
NOTA:Nopuedeomitireltipodeconstantesiestasetratadeunarreglo.
Aqualgunosejemplos:
constMAXaslongint=10000
constMIN=1000'Elcompiladorasumeeltipodedatocomoword
constSWITCH="n"'Elcompiladorasumeeltipodedatocomochar
constMSG="Hello"'Elcompiladorasumeeltipodedatocomocadena
constMONTHSasbyte[12]=(31,28,31,30,31,30,31,31,30,31,30,31)
ETIQUETAS
Lasetiquetassirvencomoobjetivosparalasdeclaracionesgotoygosub.Marquelasetiquetasde
seadasconelnombrequedeseeydospuntos,as:
Nombre_de_etiqueta:declaraciones
NosenecesitandeclaracionesespecialesparalasetiquetasenmikroBasic.
Elnombredelaetiquetanecesitaserunnombredeidentificadorvalido,lasdeclaracionesetiqueta
dasylasdeclaracionesgoto,gosubdebenestarenelmismobloque.Noesposiblesaltarhacia
unafuncinounprocedimiento,Noestablezcaunamismaetiquetaparadosidentificadoresdife
rentes.
Aquhayunejemplodeuncicloinfinitoquellamaalprocedimientobeeprepetidamente:
loop:Beep
gotoloop
SIMBOLOS
EnBasiclossmbolospermitencrearmacrossinnecesidaddeparmetros.Puedereemplazar
cualquierlneadecdigoporunidentificadoralias.Cuandolossmbolossonusadoscorrectamente
puedenincrementarlausabilidadylalegibilidaddelcdigo.
Lossmbolosnecesitanserdeclaradosinmediatamentedespusdeliniciodelmodulo,justodes
pusdelnombredelmoduloyopcionalmentedelasclusulasincluye.Veaorganizacindeprogra
maparamasdetalles.Elalcancedeunsmboloestasiemprelimitadoalarchivoenelcualfuede
clarado.
UnSmboloesdeclaradoas:
symbolalias=code

33

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Aqu,elaliasdebeserunidentificadorvalidoelcualusaraalolargodelcdigo,Esteidentificador
tieneelalcancedelarchivo,elcdigo(code)puedesercualquierlneadecdigovalida.
UsarunsmbolonoconsumememoriaRAMdeunPIC,elcompiladorsimplementereemplaza
cadainstanciadecadasmboloporlaapropiadadeclaracindesucdigo.
Aqualgunosejemplos:
symbolMAXALLOWED=216'Symboleselaliasdeunvalornumri
co
symbolPORT=PORTC'SymboleselaliasdeunregistroSFR
symbolMYDELAY=Delay_ms(1000)'Symboleselaliasdeunprocedimiento
dimcntasbyte'algunavariable
'...
main:
ifcnt>MAXALLOWEDthen
cnt=0
PORT.1=0
MYDELAY
endif
NOTA:LossmbolosnosoportanlaexpansindemacroscomolohaceelpreprocesadordeC

FUNCIONESYPROCEDIMIENTOS
Lasfuncionesylosprocedimientos,colectivamenteserefierenalasrutinas,sonsubprogramas
(autocontenidosenbloquesdedeclaraciones)loscualesrealizanunatareaespecificadeacuerdo
alnumerodeentradasyparmetros.Unafuncinregresaunparmetrocuandoestaesfinalizada,
unprocedimientonolohace.
NOTA:VeaespecificacionesPICparamasinformacindelalimitacionesdelasrutinasdelosPIC
micros.
FUNCIONES
Lasfuncionessondeclaradasas:
subfunctionnombredelafuncin(listadeparmetros)astipoqueregre
sa
[declaracioneslocales]
Cuerpodelafuncin
endsub
Elnombredelafunctionrepresentaelnombredeunidentificadorvalido.Eltipoqueregresa,esel
tipodelvalorregresadoporlafuncinypuedeserdetiposimple.Dentrodelosparntesis,lalista
deparmetros,sonlosparmetrosformalessimilaresaladeclaracindevariables.Enmikrobasic,

34

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
losparmetrossonsiemprepasadosdelafuncinporunvalor;parapasarargumentospordirec
cin,aadalapalabrareservadabyrefadelantedelidentificador.
Lasdeclaracioneslocalessondeclaracionesopcionalessobrevariablesy/oconstanteslocales,
parausodelafuncin.Elcuerpodelafuncineslasecuenciadedeclaracionesaserejecutadas
cuandosellamealafuncin.
Llamandounafuncin
Unafuncionesllamadaporsupropionombre,conlosargumentosnecesarios,ingresadosdela
mismamaneraquelosparmetrosdelafuncion.Elcompiladorescapazderestringirlosargumen
toserroneosaltipodeargumentovalidousandolasreglasdeconversinimplicita.Enlallamada
delafuncionsecreanlosparmetrosformalescomoobjetoslocalesinicializadosporvaloresdear
gumentosreales.Enelretornodelafuncion,unobjetotemporalescreadoenlugardelallamada,
yesinicializadoporladeclaraciondelapalabrareservadareturn.Estosignificaquelallamdadela
funcionesunoperandoenunaexpresincomplejayestratadacomoelresultadodeunafuncion.
Uselavariableresult(automticamenteespuestacomolocal)paraasignarunvalorderetornode
lafuncion.
Lasllamadasdelafuncionsonconsideradascomoexpresionesprimarias,ypuedenserusadasen
situacionesdondeseesperaunaexpresin.Unallamadadelafuncintambienpuedeserunade
claracionautocontenida,encuyocasoelvalorderegresoesdescartado.
Ejemplo:
Aquhayunejemplodeunafuncionquecalculaelnumeroxnbasadoendosparmetrosdeentra
da:xyndondentienequesermayorquecero(n>0):
subfunctionpower(dimx,nasbyte)aslongint
dimiasbyte
i=0
result=1
ifn>0then
fori=1ton
result=result*x
nexti
endif
endsub
Ahoraaquserealizalallamdadelafuncionparacalcularelnumero312:

tmp=power(3,12)

35

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
PROCEDIMIENTOS
Unprocedimientoesdeclaradodelasiguientemanera:
subprocedurenombre_del_procedimiento(listadeparametros)
[declaracioneslocales]
Cuerpodelprocedimiento
endsub
Elnombredelprocedimientorepresentaelnombredeidentificadorvalidoparaelprocedimietoac
tual.Dentrodelosparntesis,lalistadeparmetrosrepresentaunalistasimilaraladeclaracionde
variables.EnmikroBasic,losparmetrossiempresonpasadosdeprocedimientoporvalor;para
pasarargumentopordireccionuselapalabraclavebyrefdelantedelidentificador.
Lasdeclaracioneslocales,sondeclaracionesopcionalesdevariablesy/oconstanteslocalesusa
dasporelprocedimiento.Elcuerpodelprocedimientosonlassecuenciasdedeclaracionesaser
ejecutadascuandosellamealproceso.
LlamandounProceso
Unprocesoesllamadoporsunombre,conlosargumentosnecesarios,ingresadosdelamisma
maneraquelosparmetrosdelprocedimiento.Elcompiladorescapazderestringirlosargumentos
erroneosaltipodeargumentovalidousandolasreglasdeconversinimplicita.Cuandosellama
unproceso,todoslosparmetrosformalessoncreadoscomoobjetoslocalesinicializadosporlos
valoresdelosargumentos.
Lallamadadeunprocesoesunadeclaracionautocontenida.
Ejemplo:
Aquhayunejemplodondeseutilizaunprocedimientoelcualpreparalasentradasdetiempopara
servisualizadasporunLCD.
subproceduretime_prep(dimbyrefsec,min,hrasbyte)
sec=((secand$F0)>>4)*10+(secand$0F)
min=((minand$F0)>>4)*10+(minand$0F)
hr=((hrand$F0)>>4)*10+(hrand$0F)
endsub

TIPOS
Basicesunlenguajeestrictamentetipificado(serefierealostiposdedatos),loquesignificaque
cadavariableoconstantenecesitateneruntipoestrictodedatoconocidoparaelmomentodela
compilacin.

36

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Lostipossirvenpara:
Determinarelcorrectoespaciodememoriaqueserausado
Parainterpretardemaneracorrectalospatronesdelosbitsencon
tradosenelobjetoduranteelsubsecuenteacceso
Muchasvecesparadeterminarlostiposdedatoerroneos,usdados
enlasdeclaraciones.
TIPOSDECATEGORIA
Lostipospuedenserdivididosen:
Tipossimples

Arreglos

Cadenas

Punteros

Estructuras
(tiposdefinidosporelusuario)
TIPOSSIMPLES
Lostipossimplesrepresentanlostiposquenopuedenserdivididosenmaselementosbasicos,y
sonelmodelopararepresentarlostiposdedatoelementalesenellenguajemaquina.
AquestaunatabladelostipossimplesenmikroBasic:

Tipo
byte
char*
word
short
integer
longint
float

Tamao
8bit
8bit
16bit
8bit
16bit
32bit
32bit

Rango
0255
0255
065535
128127
3276832767
21474836482147483647
1.17549435082*1038..
6.80564774407*1038

*Eltipodedatocharpuedesertratadocomunavariablebyteencualquieraspecto.
Puedeasignarsignosalostiposdedatosusandolaconversinexplicita.Veatiposdeconversio
nesparamasinformacin.
ARREGLOS
Unarreglorepresentaunaseriedeelectosindexadosdelmismotipo(llamadostipodebase).
Comocadaelementocontienesupropioindice,losarreglospuedencontenersignificativamente
masdeunavezelmismovalor.

37

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Declaraciondearreglos
Eltipodearreglosesdenotadoporlasiguientemaneradeconstruccion:

tipo[longituddelarreglo]
Cadaelementodelarregloesnumeradodesde0hastalalongituddelarreglo.Cadaelementodel
arregloesdeuntipoypuedeseraccesadoespecificandosunombreseguidodelnumerodeindice
dentrodecorchetes.
Aquunosejemplosdedeclaracionesdearreglos:
dimweekdaysasbyte[7]
dimsamplesasword[50]
main:
'Ahorapodemosaccederalosindicesdelarreglo
samples[0]=1
ifsamples[37]=0then
...
Arreglodeconstantes
Lainicializaciondelarreglodeconstantes,esasignadaporunadelimitaciondecomasdelosvalo
resdecadaindice.Porejemplo:
'declaramosunarreglodeconstantselcualcontienelosdiasdecada
mes
constMONTHSasbyte[12]=(31,28,31,30,31,30,31,31,30,31,30,31)
Notequelaindexacionestabasadadesdeelcero,porlotantoEneroeselMONTHS[0]yDiciem
breseriaelMONTHS[11]
Elnumerodelosvaloresasignadosnodeberaexcederellimtedeltipodedato,siestollegaraasu
cederelvalorasigandosera0.
ParainformacindearreglodedatosCharveaCadenas.

ArreglosMultidimensionales
Losarreglosdeunadimensionsondeltipoescalable,muchasvecesunarreglodeunadimension
esconocidotambiencomounvector.
Unarreglomultidimensionalesconstruidoporunarreglodearreglosdeunadimension.Ysonalo
jadosenunespaciodememoriadondepuedanseraccesadosfcilmente.Esdecirlosarreglosson
alojadosenfilas.Aquhayunejemplodeunarreglobidimensional:
dimmasbyte[50][20]arreglobidimensionaldetamao50x20

38

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Lavariablemtieneunarreglode50elementosycadaunotieneunarreglodeunbyte,tenemos
entoncesunamatrizde50x20dondeelprimerelementoesm[0][0],elultimoseram[49][19]yelpri
merelementodela5tafilaseram[0][5].
Sinohainicializadoelarregloenladeclaracion,puedeomitirlaprimeradimensiondelarreglomul
tidimensionalenestecasoelarregloesguardadoencualquierparte,porejemploenotroarchivo.
Estaesunatecnicacomnmenteusadaparapasararreglosaparmetrosdeunafuncion.
subprocedureexample(dimbyrefmasbyte[50][20])podemosomitirla
primeradimension
...
inc(m[1][1])
endsub
dimmasbyte[50][20]'arreglode2dimensiones50x20
dimnasbyte[4][2][7]'arreglode3dimensiones4x2x7
main:
...
func(m)
end.
CADENAS
Unacadenarepresentaunasecuenciadecaracteresyesequivalenteaunarregloconstruidocon
tipodedatoChar.Sudecalaracionesasi:
string[longituddecadena]
Dondelalongituddecadenaserefierealtamaomaximoenelcualconsistiralacadena.Lasca
denassonguardadasinternamentecomounasecuenciadecaracteresfinalizadasporuncarcter
nulo,esteultimonoafectalalongituddelacadena.
Unacadenanula(),esguardadacomouncarcternulo.
Puedeasignarliteralesuotrascadenasalasvariablesdecadena,lacadenadelladoderechodes
pusdeloperadordebersermenoroigualalacadenaoliteraldelladoizquierdo.Porejemplo:
dimmsg1asstring[20]
dimmsg2asstring[19]
main:
msg1="Thisissomemessage"
msg2="Yetanothermessage"

msg1=msg2'estoestabien,peroviceversaseriaunerror
Alternativamentepuedemanejarelementoporelementodelacadena,porejemplo:

39

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
dimsasstring[5]
...
s="mik"
's[0]eselcaracter"m"
's[1]eselcaracter"i"
's[2]eselcaracterl"k"
's[3]escero
's[4]noestadefinido
's[5]noestadefinido
Tengacuidadocuandouselascadenasdeesamanera,sobrescribirelfindelacadenapuedeoca
sionarunaviolacindeacceso.
Empalmadodecadenas
mikroBasicpermiteempalmarcadenasmediantedelsignomas(+).Esteencadenamientoesapli
cableavariables/literalesdecadenayvariables/literalesdecarcter.Paraelcontroldecaracteres
uselarutinaconstruidaChr
Elresultadodeempalmarcadenasesunacadena.VealafuncionStrcat
Aquunejemplo:
dimmsgasstring[100]
dimres_txtasstring[5]
dimres,channelasword
main:
res=Adc_Read(channel)'ObtenerelvalordelADC
WordToStr(res,res_txt)'Crearunavariableparamostrarenformade
cadena
'Preparemessageforoutput
msg="Resultis"+'Texto"Resultis"
Chr(13)+'aplicarunenter
Chr(10)+'aplicarunlinefeed
res_txt+'resultadodeladc
"."'aplicarunpunto
'...
NOTA:mikroBasicincluyelalibreriaStringlacualautomatizalastareasarribarealizadas.

40

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
PUNTEROS
Unpunteroesuntipodedatoquealmacenaunadirecciondememoria.Mientrasqueunavariable
accesaaesadirecciondirectamente.Unpunteropuededescribirsecomounareferenciaaunadi
reccindememoria.
Paradeclaraunpunteroaadaelprefijocarat(^)antesdeltipo.Porejemplosiestacreandoun
punteroparaunenteroseriaasi:
^integer
Paraingresareldatoalpunterodeladirecciondememoria,tendraqueaadirelcarctercarat(^)
despusdelnombre.PorejemplosideclarapcuyopunteroesWordyparaasignarelvalor5aesa
direcciontendraqueserdelasiguienteforma:
dimpas^word
...
p^=5
Unpunteropuedeserasignadoaotropuntero,decualquierformasoloseapuntaladireccionnoel
valor.Unavezmodificadoeldatodeunpuntero,elotropunterodiferenciaraytambienmodificara
susdatos.(datoesladireccionalaqueapunta).
Operador@
Eloperador@regresaladirecciondelavariableolarutina;estoes,@constituyeunoperador
paraunpuntero.Lassiguientesreglasseaplicanpara@:
Sixesunavariable,@xdevolveraladirecciondelavariablex
SiFesunarutina(unprocedimientoofuncion),@Fdevolveraelpunto
enterodeFs(elresultadoesdetipolongint)
ESTRUCTURAS
Lasestructurasrepresentanunaseriedeelementosheterogeneos.Cadaelementoesllamadaun
miembro;ladeclaraciondelaestructuradefineeltipodecadamiembro.Lasintaxisdedeclaracion
deestructuraseslasiguiente:
structurenombredeestructura
dimmiembro1astipo1
...
dimmiembronastipon
endstructure
Dondeelnombredelaestructuraesunidentificadorvalido,cadatipodenotauntipoycadamiem
broesunidentificadorvalidoparacadatipo.Elalcancedelidentificadordelmiembro,estalimitado
alalcancedelaestructura.Asiquenodebepreocuparseporduplicarelnombredeunidentificador
entremiembrosyvariables.

41

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

Porejemplo,lassiguientesdeclaracionesformanunaestructurallamadaDot:
structureDot
dimxasfloat
dimyasfloat
endstructure
CadaDotcontiene2miembros:coordenadasxyy;elespaciodememoriaesalojadocuandousa
laestructura.Asiporejemplo:
dimm,nasDot

LadeclaraciondelasvariablescreadosinstanciasdelaestructuraDOT,llamadasmyn.
Unmiembropuedeestarpreviamentedefinidoenunaestructura,porejemplo:
'estructuradefiniendouncirculo:
structureCircle
dimradiusasfloat
dimcenterasDot
endstructure
Accesoalosmiembrosdelasestructuras
Puedeaccederalosmiembrosdelasestructurasusandounpunto(.)yelnombredelselectordel
miembro;Sihemosdeclaradocircle1ycircle2deunaestructuracircle:
dimcircle1,circle2asCircle
Podemosaccederasusmiembrosdeformaindividualdelasiguientemanera:
circle1.radius=3.7
circle1.center.x=0
circle1.center.y=0
Tambienpuedehacerasignacionesentrevariablescomplejas,siempreycuandolasvariablessean
delmismotipo.
circle2=circle1'estocopiaratodoslosvaloresdetodoslosmiembros

42

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
TIPOSDECONVERSINES
Laconversiondeuntipodeobjeto,eselcambiodeunmismoobjetoaotrotipo(esdecir,aplicarel
cambiodetipodeunobjeto).mikroBasicsoportalaconversinexplicitaeimplicitaparalostipos
construidos.
ConversinImplcita
Elcompiladorproveeautomticamentelaconversinimplcitaenlossiguientescasos:
Ladeclaracinrequiereunaexpresindeuntipoenparticular(de
acuerdoconladefinicindellenguaje),yesusadaunaexpresin
dediferentetipo.
Eloperadorrequieredeunoperandodeuntipoenparticular,y
usamosunoperandodediferentetipo.
Lafuncinrequieredeunparmetroformaldeuntipoen
particular,ynosotroslopasamosaunobjetodediferentetipo.
Resultnoconcuerdaconeltipodedatodeclaradoalregresodela
funcin.
Promocin
Cuandolosoperandossondediferentestipos,laconversinimplicitapromueveelcambiodel
menoscomplejoalmascomplejotipodedatosllevadaacaboporlossiguientespasos:
byte/charword
shortinteger
shortlongint
integerlongint
integralfloat
Losbytesmasaltosdeunoperandosinsignosonllenadosconceros.Losbytesmasaltosdeun
operandoconsignosonllenadosconsignosbit(sielnumeroesnegativo,llenaralosbytesmas
altosconuno(1),cualquierotraformalosllenaraconceros(0)).Porejemplo:
dimaasbyte
dimbasword
...
a=$FF
b=a'aespromovidoaword,bsevuelve$00FF

43

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Sujetando
Enasignacionesydeclaracionesquerequierandeunaedxpresiondeuntipoenparticular,el
destinodebeserguardadoenelvalorcorrectosolosiestepuederepresentarapropiadamenteel
resultadodelaexpresin(estoes,sielresultadocabedentrodelrangodeldestino).
Silaexpresinsobrepasaellimiteesperadodeltipoevaluado,elexcesodedatossera
simplementesujetado(losbytesmasaltosseperderan).
dimiasbyte
dimjasword
...
j=$FF0F
i=j'isevuelve$0F,losbytesmasaltos$FFseperderan.
ConversinExplicita
Laconversinexplicitapuedeserusadaencualquierpuntodelprogramausandolaspalabras
reservadasbyte,word,short,integer,longint,ofloatdelantedelaexpresina
serconvertida.Laexpresindeberaestarencerradaentreparntesis.Laconversinexplicitasolo
puedeserusadaeneloperandoaladerechadeloperadordeclarado.
Unaconversinespecialesaquellaentretiposconysinsigno.Laconversinexplicitaentredatos
consignoysinsignonocambiaralarepresentacinbinariadeldatosolamentesecopiaal
destino.
Porejemplo:
dimaasbyte
dimbasshort
...
b=1
a=byte(b)'aes255,no1
'estoesporquelarepresentacionbinariaes
'11111111;Simplementeesinterpretadodeotramaneraahora
Nopuedeejecutarlaconversinexplicitaconeloperandoalaizquierdadeloperadordeclarado.
word(b)=a'Compilerwillreportanerror
Ejemplosdeconversions
dima,b,casbyte
dimccasword
...
a=241
b=128
c=a+b'igual113

44

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
c=word(a+b)'igual369
cc=a+b'igual369
ConversionesAritmticas
Cuandousaunaexpresinaritmetica,comoa+b,dondeaybsontiposdedatosdiferentes,
mikroBasicrealizalaconversinimplicitadelostiposantesdeserevaluados.Estasconversiones
incluyenlapromocionocambiodelostiposmasbajoaalostiposmasaltos,coninteresenla
exactitudylaconsistencia.
Asignandounobjetoconsignotipocarcter(comounavariable)aunobjetointegralelresultado
automticamenteestarasignado.Losobjetosdetiposhortsiempreusanunaextensinsignada;
losobjetosdetipobytesiempreponenenceroelbytemasaltocuandosonconvertidosaint.

Convertirunenterolargo(longint)auntipocorto(short)siempresetruncanlosbitsmasaltos,
dejandointactoslosbitsmasbajos.Conviertiendountipocortoauntipolargoconelsigno
extendidoollenandoconceroslosbitsextrasdelnuevovalor.Dependiendosieldatocortoesta
signadoono,respectivamente.
NOTA:laconversindedatosdetipoflotanteaunvalorentero(enasignacionesviatipodedato
explicito)producelosresultadoscorrectossielvalordeltipoflotantenoexcedeelalcancedeltipo
dedatodeldestino.
Adetalle:
Aquestanlospasosquemikrobasicusaparaconvertirlosoperandosenexpresionesaritmeticas:
Primero,cualquierdatopequeoesconvertidodeacuerdoalassiguientesreglas:
1.
2.
3.
4.

byteseconvierteainteger
shortseconvierteainteger,conelmismovalor
shortseconvierteainteger,conelmismovalor,consignoextendido
byteseconvierteainteger,conelmismovalor,rellenadoconceros

Elresultadodelaexpresineselmismotipoqueladelos2operandos.
Aquunosejemplosdelaconversinimplicita:
2+3.1'2.+3.15.1
5/4*3.'(5/4)*3.1*3.1.*3.3.
3.*5/4'(3.*5)/4(3.*5.)/415./415./4.3.75

45

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
OPERADORES
Losoperadoressontokensqueactivanalguncomputocuandosonaplicadosaunavariableoaun
objetoenalgunaexpresin.
ExistencuatrotiposdeoperandosenmikroBasic:
Operadoresaritmeticos
OperadoresInteligentes
Operadoresrelacionales

Operadores,PrecedenciayAsociatividad.
Hay4categoriasdeprecedenciaenmikroBasic.Losoperadoresqueestanenlamismacategora
tienenlamismaprecedenciaunoconotro.
Cadacategoratienereglasdeasociatividad:izquierdaaderecha(),odederechaaizquierda
().Enlaausenciadeparntesis,estasreglasresuelvenlaagrupacinconexpresindela
mismacategora.

Precedencia
4
3
2
1

Operandos
1
2
2
2

Operadores
@not+
*/divmodand<<>>
+orxor
=<><><=>=

Asociatividad

OPERADORESARITMETICOS
Losoperadoresaritmeticossonusadospararealizarcomputosmatematicos,estostienen
operadoresnumericosyregresanunvalornumerico.Comolosoperadorescharbsicamenteson
operadoresbytepuedenserusadoscomooperadoresaritmeticossinsigno.Losoperadores
necesitanserambosconsignooambossinsigno.
Todoslosoperadoresaritmticosseasociandeizquierdaaderecha.

Operador

Operacion
suma

resta

multiplicacion

division,puntoflo

Operandos
byte,short,integer,
word,longint,float
byte,short,integer,
word,longint,float
byte,short,integer,
word,float
byte,short,integer,

Resultado
byte,short,integer,
word,longint,float
byte,short,integer,
word,longint,float
integer,word,lon
gint,float
byte,short,integer,
46

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

tante
division,redondeoal
enteromascercano
modulo,regresael
restodeladivision
deunentero(nopue
deserusadaconva
loresflotantes.)

div
mod

word,float
byte,short,integer,
word,longint,float
byte,short,integer,
word,longint

word,float
byte,short,integer,
word,longint
byte,short,integer,
word,longint

Divisionporcero
Si0(cero)esusadocomoelsegundooperando(porejemplo,xdiv0)elcompiladorgeneraraun
errorynogeneraraelcodigo.Peroenelcasodeunadivisionimplicitaporejemploxdivydondey
esiguala0elresultadoseraelmaximovalorparaeltipodedatoapropiado.(porejemplosixyy
sontipoWordelresultadosera$FFFF).
Operadoresaritmeticosunarios.
Eloperador(menos)puedeseruadocomoelprefijounariodeunoperando,paracambiarel
signodeunvalor.Eloperadorunariomas(+)tambienpuedeserusadoperonoafectaaldato.
Porejemplo:
b:=a;
OPERADORESRELACIONALES
Uselosoperadoresrelacionalesparaprobarigualdadesodesigualdadesdelasexpresiones.Todos
losoperadoresregresanTRUE(verdadero)oFALSE(falso).

Operator
=
<>
>
<
>=
<=

Operation
Igual
Diferente
Mayorque
Menorque
Mayorigual
Menorigual

Todoslosoperadoresserelacionandeizquierdaaderecha.

47

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Operadoresrelacionalesenexpresiones.
Elsignoigual(=)tambienpuedeserunoperadordeasignacin,dependiendodelcontexto.
Laprecedenciadelosoperadoresaritmeticosyrelacionalesfuerondesignadosparatrabajarcon
expresionescomplejassinparntesisloquequieredecirque:
a+5>=c1.0/e'(a+5)>=(c(1.0/e))
OPERADORESINTELIGENTES
Uselosoperadoresinteligentesparacambiarlosbitsindividualesdelosoperandosnumericos.Los
operandosnecesitansersignadososinsigno,ambos.
Losoperadoresinteligentesserelacionandeizquierdaaderecha.Launicaexcepcionseaplicaal
operadorinteligentenot,queserelacionadederechaaizquierda.
Resumendelosoperadoresinteligentes.

Operador
and
or
xor
not
<<
>>

Operacin
ANDinteligente;comparaparesdebitsygenera1
siambossonunodeotromodogeneraun0
OR(inclusiva)inteligente;comparaparesdebitsy
generaun1sielresultadoes1,deotraformagenera
0
ORexclusiva(XOR);comparaparesdebitsygene
raun1sielresulatdodeambosescomplementario,
deotraformaregresa0
Complemento(unario);inviertecadabit
Corrimientoalaizquierda;muevelosbitsalaiz
quierda,descartaelbitizquierdamaslejanoyasig
na0albitdeladerecha.
Corrimientoaladerecha;muevelosbitshacialade
recha,descartaelbitdeladerechamaslejanoysi
notienesignoloasignacon0albitdelaizquierda,
deotromodoelsignoseextiende

48

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Operacioneslgicasanivelbit

and
0
1
or
0
1
xor
0
1
not

0
0
0

1
0
1

0
0
1

1
1
1

0
0
1

1
1
0

0
1

1
0

Losoperadoresinteligentesand,oryxorrealizanoperacioneslogicasconlosrespectivospares
debitsdelosoperandos.Eloperadornotcomplementecadabitdeloperando.Porejemplo:
$1234and$5678'iguala$1230
'porque..
'$1234:0001001000110100
'$5678:0101011001111000
'
'and:0001001000110000
'..estoes,$1230
'similarmente:
$1234or$5678'iguala$567C
$1234xor$5678'iguala$444C
not$1234'iguala$EDCB

Conversionessinsigno
Siunnumeroesconvertidodeuntipomenoscomplejoaunomascomplejo,losbitsmasaltos
seranrellenadosconceros.Siunnumeroesconvertidodeuntipomasacomplejoaunomenos
complejolosbitsmasaltosseperderan.
Porejemplo:
dimaasbyte
dimbasword
...
a=$AA
b=$F0F0

49

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
b=banda
'aesextendidoconceros;bsevuelve$00A0

Conversionesconsigno
Siunnumeroesconvertidodeuntipomenoscomplejoaunomascomplejo.Losbitsmasaltosson
llenadosconunossielbitdesignoes1(siesnegativo);losbitsmasaltossonllenadosconceros
sielbitdesignoes0(siespositivo).Siunnumeroesconvertidodeuntipomasacomplejoauno
menoscomplejo,losbitsmasaltosseperderan.
Porejemplo:
dimaasbyte
dimbasword
...
a=12
b=$70FF
b=banda
'aseextiendeconsigno,losbytesmasaltosseran$FF;
'bsevuelve$70F4
Operadoresdecorrimiento
Losoperadoresbinarios<<y>>muevenlosbitsdeloperandoizquierdo,especificadosporun
numeroeneloperandoderecho,yaseaalaizquierdaoaladerecha.Eloperandoderechodebe
serpositivoymenorque255.
Conelcorrimientoalaizquierda(<<)losbitsmasizquierdossondescartados,ylosnuevosbits
sonllenadosconceros.Hacerelcorrimientoalaizquierdadeunoperandosinsignonposiciones
esequivalenteamultiplicarlopor2nsitodoslosbitsdescartadossoncero.Estotambienes
verdaderoparalosoperandosconsigno,sitodoslosbitsdescartadossonigualeselbitdesigno.
Conelcorrimientoaladerecha(>>)losbitsmasderechossondescartados,ylosbitsdela
izquierdasonrellenadosconceros(encasodequeseaunoperandosinsigno)oelvalordelbitde
signo(encasodequeesteseaunvalorconsigno).Hacerelcorrimientoaladerechanposiciones
esequivalenteadividirlopor2n.
EXPRESIONES
Unaexpresinsonunaseriededeclaraciones,operandos,operadoresypuntuacionesque
retornanunvalor.
Lasexpresionesprimariasincluyen:literales,constantes,variablesyllamadasafunciones.Apartir
deesto,usandooperadoressepuedencrearexpresionesmascomplejas.Formalmentelas
expresionessondefinidasrecursivamente:lassubexpresionespuedenaadirseallimitedela
memoria.

50

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Lasexpresionessonevaluadasdeacuerdoaltipodeconversin,grupo,asociatividadylasreglas
deprecedenciausadoporlosoperadoresdentrodeellas,lapresenciadeparntesisyeltipode
datodelosoperandos.Lamaneraenquelasexpresionessonagrupadasnonecesariamente
especificanelordenactualenquesonevaluadaspormikroBasic.
Nopuedemezclartiposdedatoconosinsignoenexpresionesdeasignacinoenexpresiones
aritmeticasoenexpresineslogicas.Puedeusarlaconversinexplicitaparaello.

DECLARACIONES
Lasdeclaracionesdefinienlamaneraenqueactuanlosalgoritmosdentrodeunprograma.Cada
declaracionnecesitaestardeterminadaporunanuevalineadecarcter(enter).
Ladeclaracionmassimpleincluyeasignacines,llamadasderutinasysaltosaotrasdeclaraciones.
Estopuedeserusadoparacrearciclos,saltos,yotrasdeclaracionesestructuradas.Enlaausencia
desaltosyseleccindedeclaracines,lasdeclaracionesseranejecutadasdemanerasecuencialtal
comoestanescritasenelcodigofuente.
Vea:
Declaracionesdeasignacin
Declaracionescondicionales
Declaracionesdeiteracin(ciclos)
Declaracionesdesaltos
DeclaracionesdelenguajeEnsamblador(ASM).

Declaracionesdeasignacin
Lasdeclaracionesdeasignacintienelasiguienteforma:
variable=expresin
ladeclaracionevalualaexpresinyleasignaelvalordelavariable.Todaslasreglasdela
conversinimplicitaseaplican.Variablepuedeserdeclaradacomounavariableocomounarreglo
yexpresinpuedesercualquierexpresin.
Noconfundaelasignamientoconeloperadorrelacionaligual(=),quepruebaunaigualdad.
Mikrobasicinterpretaraelsignoigual(=)dentrodesucontexto.

51

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Declaracionescondicionales
Lasdeclaracionescondicionalesodeseleccin,escogendiferentestiposdeaccionesdependiendo
delosvaloresoexpresionesevaluadas.Hay2tiposdedeclaracionescondicionales:
If
SelectCase

DeclaracionesIF
Usedeclaracionesifparaimplementarunadeclaracioncondicional.Lasintaxisdelas
declaracionesIFeslasiguiente:
ifexpresionthen
declaraciones
[else
Otrasdeclaraciones]
endif
Dondelaexpresin,esevaluadasiesverdaderolasdeclaracionesseejecutan.Silaexpresin
esfalsaseejecutaranotrasdeclaraciones.Laexpresindebeserconvertidaatipobolean,deotra
formalaexpresinestamalformulada.Lapalabraclaveelseylasotrasdeclaracionesson
opcionales.
DeclaracionesdeIFsanidados
AnidarIfsrequieredeatencinespecial,lareglageneralesquelacondicionanidadaseanaliza
desdelacondicionmasprofunda,concadaelselimitandoalifmascercanodelaizquierda.
DeclaracionesSelectCase
Useladeclaracionselectcaseparapasarelcontrolosaltaraunarutinadeprograma,basadoen
unacondicioncertera.Lapalabraclaveselectcaseconsisteenunselectordeunaexpresin(una
condicion)yunalistadeposiblesvalores.Lasintaxisdeselectcaseeslasiguiente:

selectcaseselector
casevalor_1
declaraciones_1
...
casevalor_n
declaraciones_n
[caseelse
Declaraciones_default]
endselect

52

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

Primeroelselctoresevaluado,despussecomparaconlalistadevaloresdisponiblescasevalor,
siunvaloresencontrado,elprogramaseguiraenlasdeclaracionesdelvalorencontrado.Enle
casodemultiplesvaloresencontradoselprogramaharaunoaunoempezandoporelprimervalor
encontrado.Siningunvaloresencontradoseguiraenlasdeclaracionesdefault.
Aquunejemplosimple:
selectcaseoperator
case"*"
res=n1*n2
case"/"
res=n1/n2
case"+"
res=n1+n2
case""
res=n1n2
caseelse
res=0
cnt=cnt+1
endselect
Tambienpuedeagruparvaloresparauncaso.Simplementeseparelosvaloresporcomas:
selectcasereg
case0
opmode=0
case1,2,3,4
opmode=1
case5,6,7
opmode=2
endselect
Declaracionescaseanidadas
Notequelasdeclaracionescasepuedenseranidadas,losvaloressonasignadosalmasprofundo
selectcase.

53

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
DECLARACIONESDEITERACION.
Lasdeclaracionesdeiteracinlepermitencrearciclosdeunsetdedeclaraciones.Haytresformas
dehaceriteracionesconmikroBasic:
For
While
Do
Puedeusarlaspalabrasreservadabreakycontinuepararegularelcontroldeflujodeuna
iteracin.Ladeclaracinbreakterminalasdeclaracionescuandoestesepresenta.Mientrasque
continuecomienzaelsiguienteciclodeiterarondelasecuencia.
DeclaracionesFOR
LadeclaraciondeunFORdeterminaunciclodeiteracinyrequierequeseespecifiqueelnumero
deiteraciones.LasintaxisdeunasentenciaFores:
forcontador=valorinicialtovalorfinal[stepvalordepaso]
declaraciones

nextcontador
Elcontadoresunavariablequeseincrementasegnelvalordelpasoconcadaiteracindelciclo.
Elparmetrovalordepasoesunvalorenteroopcionalysiesteesomitidoelvalorpordefectoes1,
antesdelaprimeraiteracin,elvalordelcontadorespuestoalvalorinicialyseincrementa
mientrasnoexcedaonolleguealvalorfinal,concadaiteracinlasdeclaracionessonejecutadas.
Losvaloresinicialesyfinalesdebenservalorescompatiblesconelcontador;lasdeclaraciones
puedensercualquiertipodedeclaracionessiempreycuandonoafectenelvalordelcontador.
Notequeelvalordepasopuedeserunvalornegativo,permitiendolehacercuentasregresivas.
Aquunejemplodecmocalcularelproductoescalarde2vectoresayb,delongitudnusandola
sentenciaFOR:
S=0
fori=0ton
s=s+a[i]*b[i]

nexti
Cicloinfinito
Lasentenciaforpuederesultaruncicloinfinitosielvalorfinalesigualoexcedeelrangodeltipode
datodelcontador
Porejemplo,estoresultarauncicloinfinitoyaqueelcontadornuncaalcanzaraelvalor300:

54

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
dimcounterasbyte
...
forcounter=0to300
nop
nextcounter
parahacerunciloinfinitomaslegibleenmikroBasicpuedeusarlasentenciawhiletrue.
DeclaracionesWHILE
Uselasentenciawhileparacondicionarunadeclaraciondeiteracin.Lasintaxises:
whileexpresion
declaraciones
wend
Lasdeclaracionesseejecutaranrepetidamente,mientraslaexpresinseaverdadera,estoessila
expresinalserevaluadalaprimeravezesfalsanoseejecutaranlasdeclaraciones.
Aquestaunejemplodecmocalcularelproductoescalarde2vectoresusandolasentencia
While:
s=0
i=0
whilei<n
s=s+a[i]*b[i]
i=i+1
wend
Problamentelamaneramasfacildehaceruncicloinfinitoseaesta:
whileTRUE
...
wend
DeclaracionesDO
Lasentenciadoejecutaunciclomientraslacondicionseaverdadera.Lasintaxises:
do
declaraciones
loopuntilexpresin
Lasdeclaracionessonejecutadasmientraslaexpresinevaluadaseaverdadera.Laexpresines
evaluadadepusedecadaiteracin.Entonceslastodasdeclaracionesseejecutaran.

55

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Aquhayunejemplodecmocalcularelproductoescalarde2vectores,usandolasentenciaDO:
s=0
i=0
...
do
s=s+a[i]*b[i]
i=i+1
loopuntili=n
DECLARACIONESDESALTOS
Cuandounadeclaraciondesaltosesejecutada,transfiereuncontrolincondicionalmente.Haycico
tiposdesentenciasdesaltosenmikroBasic:
Break
Continue
Exit
Goto
Gosub
DeclaracionesBreak,Continue.
BREAK
Algunasvecesesnecesariohacerunapausadesdedentrodelcuerpodelcodigo.Usela
sentenciabreakdentrodelosciclosparapasarelmandoalaprimeradeclaracionseguidodel
masprofundociclo(forwhileodo).
Porejemplo:
'esperarquelatarjeta_CFseaconectada;actualizarcadasegundo
whiletrue
Lcd_Out(1,1,"Nocardinserted")
ifCf_Detect()=1then
break
endif
Delay_ms(1000)
wend
'ahorapodemostrabajarconlatarjetaCF.
Lcd_Out(1,1,"Carddetected")

56

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
DeclaracionContinue
Puedeusarlasentenciacontinuedentrodeloscilcosparasaltarseelciclo:
LasentenciacontinueenciclosFor,mueveelprogramaalalinea
for,estonocambiaelcontadordelcilco
'continuesaltaaqui
fori=...
...
continue
...

nexti
Lasentenciacontinueencicloswhilemueveelprogramaala
primerlineadelacondicion(arriba)
continuesaltaaqui
whilecondition
...
continue
...

wend
LasentenciacontinueenciclosDo,mueveelprogramaalalinea
delacondicion(abajo)
do
...
continue
...
'continuesaltaaqui

loopuntilcondition

DeclaracionesEXIT
Lasentenciaexitlepermiteromperunarutina(unafuncionounprocedimiento).Pasaelcontrola
lasiguienteexpresindelallamadadelarutina.
Aquunsimpleejemplo:
subprocedureProc1()
dimerrorasbyte
...'Aquisehacealgo
iferror=TRUEthen
exit

57

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
endif
...'alguncodigoquenoseraejecutadosiseencuentraunerror
endsub

NOTA:sirompiounafuncion,elvalorregresadoseraelvalordelavariablelocalresultalmomento
delasalida.
DeclaracinGOTO
Uselasentenciagotoparaunsaltosincondicionesacualquieretiquetalocalparamas
informacinveaEtiquetas.Lasintaxisdeungotoes:
gotonombredeetiqueta
Estotransferiraelcontrolalaposicinallugarespecificodelnombredelaetiqueta.Lapalabra
reservadapuedeestarantesodespusdelaetiqueta,noesposiblesaltardentroofueradeuna
rutina.
Puedeusarlasentenciagotoparasalirdecualquierestructuradecontrolanidada,nuncasaltea
unaestructuradeunciclooaexpresionesestructuradas,porqueestopuedetenerefectos
impredecibles.
Usarungotopuedeserusadoencualquieralgoritmo,resultandoasiuncodigomaslegible.Una
posibleaplicacinposibedeungotopuedeserromperuncicloprofundoanidadodeuna
estructura:
fori=0ton
forj=0tom
...
ifdisaster
gotoError
endif
...
nextj
nexti
.
.
.
Error:'manejodelcodigo.

DeclaracionGOSUB
Uselasentenciagosubparaunsaltosincondicionesacualquieretiquetaparamasinformacin
veaEtiquetas.Lasintaxisdeungosubes:
gosubnombredelaetiqueta
...

58

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Nombredelaetiqueta:
...
return
Estotransferiraelcontrolaelnombredelaetiqueta,tambienelpuntodelllamadoesrecordado,
poresolasentenciareturn,elprogramaregresarayejecutalasiguientelineadespusdelgosub.
Ungosubpuedeirantesodespusdeunaetiqueta.
Noesposibledarunsaltodentrodeunafuncionounprocedimiento,yaquenosesabenlos
efectosqueestopodriatener.
NOTA:usarungosubescomousarungoto.Elusodelgosubesindiferente.Mikrobasicsolo
soportaelgosubporlacausacompartidahaciaatrs(?).Esmejorusarfuncionesy
procedimientosparaunprogramamaslegibles.Generalmenteungosubvieneacompaadodeun
Return.

DeclaracionesASM
mikroBasicpermiteelcodigoembebidoASM,usandolasentenciaasm.Notequenopuedeusar
numerosnidireccionesencodigoensamblador.Puedeusarnombressimbolicosenlugardeeso
(lalistadesplegaralosnombresenlugardelasdirecciones).
Puedeagruparinstruccionesenensambladorusandolasenteciaasm:
asm
bloquededeclaracionesenensamblador
endasm
LoscomentariosdeBasicnosonpermitodasenlassentenciasdebloquesasm,enlugardeeso
tendraqueusarloscomentariosdelensambladorusandopuntoycoma(;)
SiplaneausarunavariabledeBasicensucodigoasm,aseguresedequetengaunvalorinicial,de
otromodoelcompiladorreportaraunerrorynocompilaraelprograma.Estonoaplicaparalas
globlalespredefinidascomoPORTB.
Porejemploelcompiladorreportaraunerror,yaqueellinkernoescapazdereconocerlavariable
myvar:
programtest
dimmyvarasword
main:
asm
MOVLW10
MOVLWtest_main_global_myvar_1
endasm
end.

59

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Aadiendoelsiguientecodigoounosimilarellinkerpodrareconocerlavariablemyvar
myvar=0
NOTA:mikrobasicnoverificarasielbancoapropiadoestaseteadoparalavariable.Necesitasetear
elbancoapropiadoenelcodigoensamblador.

DIRECTIVAS

Lasdirectivassonpalabrasdeespecialimportanciaqueproporcionanfuncinalidadadicionalcon
respectoalacompilacinyelrendimiento.
Tienelassiguientesdirectivasasudisposicin:
Directivasdecompilacin,paraunacompilacincondicional
DirectivasdelLinker,paradistribuirobjetosenlamemoria.
Directivasdecompilacinodelcompilador
Todalineaenelcodigoquecomienzeconelnumeral(#)estomadacomounadirectivadel
compiladorelnumeralinicialpuedeserprecedidooseguidodeespaciosenblanco,perono
nuevaslineas.Lasdirectivasdelcompiladornodiferencianentremayusculasominusculas
Puedeusarlasdirectivasdecompilacinparaejecutarciertaspartesdelcodigoyexcluirotras.
Todaslasdirectivasdebensercompletadasenelarchivodondeseempezaron.
Directivas#DEFINEy#UNDEFINE
Useladirectiva#DEFINEparadefinirunaconstantecondicionaldelcompilador(unabanderao
flag).Puedeusarunidentificadorparaesabandera,sinningunarestriccin.Nohayconflictoscon
elprogramaysusidentificadores,cuandolasdirectivastienenunnombreespaciado.Solouna
banderapuedeserregistradapordirectiva.
Porejemplo:
#DEFINEextended_format

60

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
Directivas#IFDEFTHEN..#ELSE
Lacompilacincondicionalesllevadaacaboporladirectiva#IFDEF..THEN.Ladirectiva#IFDEF
verificaquebanderasestandefinidasycualesno,estoescuandounadirectiva#DEFINEfue
definidaysisigueactivaono.
Ladirectiva#IFDEF..THENesterminadaporladirectiva#ENDIFylaclausula#ELSEesopcional:
#IFDEFbanderaTHEN
Bloquedecodigo
...
#IFDEFbandera_nTHEN
Bloquedecodigon]
[#ELSE
Bloquedecodigoalternativo]
#ENDIF
Primero#IFDEFverificaquelabanderaestedefinidapor#DEFINE,siesasielbloquedecodigo
escompilado,sinoverificalassiguientesbanderas_nyejecutaelbloquedecodigoapropiado,si
ningunaestadefinida,entoncescompilaraelcodigodelbloquealternativodentrodel#ELSE.
Ladirectiva#ENDIFfinalizalasecuenciacondicional.Elresultadodelposibleescenarioessoloun
bloquedecodigocompilado(posiblementevacio)yespasadoparaunusofuturo.Laseccionde
codigoprocesadopuedetenerclausalascondicionales,anidamientosdecualquierprofundidad;
cada#IFDEFdebeserenmarcadoporsu#ENDIFcorrespondiente.
Aquunejemplo:
'#DEFINEresolution8
#IFDEFresolution8THEN
...'codigoespecifico8bitsderesolucion
#ELSE
...'codigopordefecto.
#ENDIF
Ladirectiva#Iesusadaparainsertarelvolumendelarchivodado,dondeestaesllamada:
#Ifilename.txt
PredefiniendoBanderas
Mikrobasictienebanderaspredefinidasparaelusodelhardware.Estaspuedenserencontradasen
losarchivosdedefinicin(directorioDEFS).Especificandoelhardwareparacadapic
correspondiente.ElregistroSFResorganizadobajocategoras:_SFR(sombrillaparatodoslos
registros),_CONFIG_OSC(oscilador),_CONFIG_WDT(matchdogtimer)y_CONFIG_BORPOR
(brownoutresetypowerontimer).

61

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
DirectivasdelLinker
Mikrobasicusaunalgoritmointernoparadistribuirobjetosdentrodelamemoria.Sitienealgun
objetoorutinaqueespecifiqueunadireccionespecificauselasdirectivasdellinkerabsoluteyorg.
DirectivaABSOLUTE
LadirectivabsoluteespecificaunadireccinRAMespecifiadeunavariable,silavariableesmulti
byte,losbytesmasaltosseguardaranenlasdireccionesconsecutivas.
Ladirectivaabsoluteesaadidaaunadeclaraciondevariable:
dimxasbyteabsolute$22
'Variablexwilloccupy1byteataddress$22
dimyaswordabsolute$23
'Variableywilloccupy2bytesataddresses$23and$24
Tengacuidadocuandouseladirectivaabsolute,yaquepuedesobrescribirdosvariablespor
accidente.Porejemplo:
dimiasbyteabsolute$33
'lavariableIocuparaunbytedeladireccion$33
dimjjjjaslongintabsolute$30
'lavariablejjjjocuparabytesde$30,$31,$32,$33;Esto,
'cambiaI,cambiajjjjporlosvaloresdelosbytesmasaltosyvicever
sa.
DirectivaORG
LadirectivaorgespecificaladirecciondecomeizodeunarutinaenlaROM.Estoseaadeala
declaraciondelarutina.Porejemplo:
subprocedureproc(dimparasbyte)org$200
elprocedimientoprocempezaraenladireccion$200
...
endsub
NOTA:ladirectivaorgpuedeusarseacualquierrutina,exceptoaunprocedmietointerrupt.
Interruptsiempreesguardadoenladireccion$4u$8paralafamiliaPIC18,enlapagina0.
DirectivaVOLATILE
Ladirectivavolatileledalaposibilidadaunavariabledecambiarsinintervencindelcodigo.
Lasvariablesvolatilestipicasson:STATUS,TIMER0,TIMER1PORTA,PORTB,etc.
dimMyVarasbyteabsolute$123registervolatile

62

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC
LIBRERIASDEMIKROBASIC
mikroBasicestaprovistodeunaseriedelibreriasquefacilitanelusodelosPICysusmodulos:
Esimportantehacernotarqueunabuenapartedelaconexindehardwareenlaslibrerias
tieneerroresaligualqueelcodigoejemplodelasmismas.Portratarderespetareltrabajo
delaayudanoserealizaronmodificaciones,nialasimgenes,nialcodigo.(unodelos
erroresmascomunesesqueelbotonderesetestaconectadoalcristal,debiendoestar
conectadoalpinMCLR)

ADCLibrary

CANLibrary

CANSPILibrary

CompactFlashLibrary

EEPROMLibrary

EthernetLibrary

SPIEthernetLibrary

FlashMemoryLibrary

GraphicLCDLibrary

T6963CGraphicLCDLibrary

ICLibrary

KeypadLibrary

LCDLibrary

LCD8Library

ManchesterCodeLibrary

MultiMediaCardLibrary

OneWireLibrary

PS/2Library

PWMLibrary

63

Traducido por: Navaismo


Este documento es propiedad de EL FORO TODOPIC

RS485Library

SecureDigitalLibrary

SoftwareICLibrary

SoftwareSPILibrary

SoftwareUARTLibrary

SoundLibrary

SPIGLCDLibrary

SPILibrary

USARTLibrary

USBHIDLibrary

UtilLibrary

SPIGraphicLCDLibrary

PortExpanderLibrary

ConversionsLibrary

DelaysLibrary

MathLibrary

StringLibrary

Veatambienrutinaspredefinidas.

64

También podría gustarte