You are on page 1of 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.10Expresiones

3.9 Operadores 3.9.a Precedenciayasociatividad 3.9.b Operadoresaritmticos 3.9.c Operadoresrelacionales 3.9.d Operadoresinteligentes

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: Regresa:

subfunctionInc(dimbyrefparaslongint)aslongint
Elvalorincrementadodelparmetro

Descripcin: Incrementaelparmetroparpor1.Notequelafuncindebeserllamadacomo unadeclaracinautocontenida. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela llamadanoestcontraellmitedellamadasanidadas Requiere: Ejemplo Nada a=4 b=Inc(a)'aybahorasoniguala5

DEC Prototipo: Regresa:

subfunctionDec(dimbyrefparaslongint)aslongint
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: Regresa:

subfunctionChr(dimcodeasbyte)aschar
Regresauncarcterasociadoconelcarcter especificodecode

Descripcin: Regresauncarcterasociadoconelcarcterespecificodecode.Nmerosde0a 31sonloscdigosASCCInoimprimibles Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela llamadanoestcontraellmitedellamadasanidadas. Requiere: Ejemplo: Nada c=Chr(13)'regresaunretornodecarro(enter)

Ord Prototipo: Regresa:

subfunctionOrd(dimcharacteraschar)asbyte
ElcdigoASCIIdecharacter

Descripcin: LafuncinregresaelcdigoASCIIdelcarcter. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela llamadanoestcontraellmitedellamadasanidadas. Requiere: Ejemplo: Nada c=Ord("A")'Cahoraes65

SetBit Prototipo: Regresa: Descripcin:

subprocedureSetBit(dimbyrefregisterasbyte,dimrbitas byte)
Nada Lafuncin"setea"(ponerenunooverdadero)elbitrbitdelregistro.El parmetrorbitdebeserunavariableounaliteralcuyovalorseade0...7.Vea redefiniendoglobalesyconstantesparamayorinformacindelos identificadoresderegistros. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraque lallamadanoestcontraellmitedellamadasanidadas. Nada SetBit(PORTB,2)'seteaRB2

Requiere: Ejemplo:

10

Traducido por: Navaismo Este documento es propiedad de EL FORO TODOPIC

ClearBit Prototipo:

subprocedureClearBit(dimbyrefregisterasbyte,dimrbitas byte)
Nada Lafuncionalimpiaelrbitdelregistro.Elparmetrorbitnecesitaseruna variableounaliteralcuyovalorseade0...7.Veapredefiniendoglobalesy constantesparamayorinformacindelosidentificadoresderegistros. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para quelallamadanoestcontraellmitedellamadasanidadas. Nada ClearBit(PORTC,7)'LimpiaRC7(Limpiaroponera0ofalso)

Regresa: Descripcin:

Requiere: Ejemplo:

TestBit Prototipo: Regesa: Descripcin:

subfunctionTestBit(dimregister,rbitasbyte)asbyte
Sielbitestaseteado(verdadero),regresa1,enotrocasoregresa0 Lafuncinrevisasielrbitdelregistroestaseteado.Siestaseteado,lafuncin retorna1,cualquierotrocasoretorna0.Elparmetrorbitnecesitaseruna variableoliteralcuyovalorseade0...7.Veapredefiniendoglobalesy constantesparamayorinformacindelosidentificadoresderegistros. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para quelallamadanoestcontraellmitedellamadasanidadas. Nada flag=TestBit(PORTE,2)'1siRE2estaseteado,0sinoloesta.

Requiere: Ejemplo:

Lo Prototipo: Regresa: Descripcin:

subfunctionLo(dimnumberasbyte..longint)asbyte
Regresalos8bitsmenoresdenumber,bits0...7 Lafuncinregresalos8bitsmenoresdenumber.Lafuncinnointerpretalos patronesbitdenumbersolamenteregresalos8bitsencontradosenelregistro. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraque lallamadanoestcontraellmitedellamadasanidadas. Nada a=Lo(0x1AC30F4)'aseriguala0xF4

Requiere: Ejemplo:

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. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela llamadanoestcontraellmitedellamadasanidadas. Nada a=Hi(0x1AC30F4)'aesiguala0x30

Requiere: Ejemplo: Higher Prototipo: Regresa: Descripcin:

subfunctionHigher(dimnumberaslongint)asbyte
Regresaelsiguientebytedelbytemasaltodenumber,bits16...23 Lafuncinregresaelsiguientebytedelbytemsaltodenumber.Lafuncin nointerpretalospatronesbitdenumbersolamenteregresalossiguiente8 bitsencontradosenelregistro. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para quelallamadanoestcontraellmitedellamadasanidadas. Nada a=Higher(0x1AC30F4)'aesiguala0xAC

Requiere: Ejemplo:

Highest Prototipo: Regresa: Descripcin:

subfunctionHighest(dimnumberaslongint)asbyte
RegresaelBytemasaltodenumber,bits24...31 LafuncinregresaelBytemasaltodenumber,Lafuncinnointerpretalos patronesbitdenumbersolamenteregresalossiguiente8bitsencontrados enelregistro. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,para quelallamadanoestcontraellmitedellamadasanidadas. Nada a=Highest(0x1AC30F4)'aesiguala0x01

Requiere: Ejemplo:

12

Traducido por: Navaismo Este documento es propiedad de EL FORO TODOPIC


SizeOf Prototipo: Regresa: Descripcin: Requiere: Ejemplo:

subfunctionSizeOf(dimvariable_nameasstring[100])asword
Regresaeltamaoenbytesdelavariable EstafuncindaeltamaoenBytesdecuntoespaciodememoriaesusado poreloperando. Nada structureTStruct dimFieldAasbyte'1byte dimFieldBasword'2bytes endstructure'total3bytes 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: Regresa: Descripcin:

subfunctionClock_Khzasword
EldispositivorelojinKHZ,esredondeadoalenteromascercano EldispositivorelojinKHZ,esredondeadoalenteromascercano. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela llamadanoestcontraellmitedellamadasanidadas. Nada clk=Clock_Khz

Requiere Ejemplo:

13

Traducido por: Navaismo Este documento es propiedad de EL FORO TODOPIC


Clock_Mhz Prototipo: Regresa:

subfunctionClock_Mhzasbyte
LafuncindispositivorelojenMHz,esredondeadoaelenteromascercano. Estaesunarutinainline;elcdigosegeneraenellugardelallamada,paraquela llamadanoestcontraellmitedellamadasanidadas. Nada clk=Clock_Mhz

Requiere: Ejemplo:

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 Alcance Elalcanceseextiendedesdeelpuntodonde fuedeclaradohastaelfinaldelarchivo, incluyendotodaslasrutinasdentrodel alcancedelarchivo.Esteidentificadortiene unarchivodealcanceyesreferidocomo GLOBAL Elalcanceseextiendedesdeelpuntodonde fuedeclaradohastaelfindelarutinaenuso. EsteidentificadoresreferidocomoLOCAL Elalcanceseextiendedelpuntodondefue declaradohastaelfindelmoduloyhasta cualquierotroprogramaqueuseese modulo.Lanicaexcepcinsonlos smbolosquetienenalcancelimitadoenel archivoenelcualfuerondeclarados. Elalcanceseextiendedelpuntodondefue declaradohastaelfindelmodulo.El identificadorestadisponibleparacualquier funcinoprocedimientoqueestedentrodel modulo.

Elidentificadoresdeclaradodentrodeuna funcinodeunProcedimiento Elidentificadoresdeclaradoenlaseccinde interfasedeunModulo

ElIdentificadorfuedeclaradoenlaseccin deimplementacindeunmodulo,perono dentrodeunafuncinoprocedimiento.

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 8bit 8bit 16bit 8bit 16bit 32bit 32bit

Tamao

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

div mod

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

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 = <> > < >= <= Igual Diferente Mayorque Menorque Mayorigual Menorigual

Operation

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 0 0 1 0 0 1 0 1 0 1 0 1 1 0 1

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

You might also like