EI siguienfe curso de progromocion de microconfroIodores Pic no
requiere conocimienfos previos en eI femo. Esfo especioImenfe
desfinodo poro Ios eIecfronicos que quieron dor sus primeros posos (o Ios siguienfes) en esfe inferesonfe (y en generoI desconocido) rincon de Io eIecfronico. Tombien esfo dedicodo poro oqueIIos ingenieros o fecnicos que no quieren perder eI fren de Io fecnoIogo. Los MicroconfroIodores son infegrodos copoces de ser progromodos desde nuesfro PC, y seguir uno secuencio. UfiIi;odos en fodos porfes deI mundo creo que sero bueno no quedornos ofuero. Los PIC, fobricodos por Microchip, son microconfroIodores que por su bojo cosfo (desde Z doIores o menos) y sus oIfos presfociones pueden ser ufiIi;odos en pequeos y grondes proyecfos. Mosofros en esfe curso Ies presenforemos Ios Pic en generoI, pero por sobrefodo horemos hincopie en Io ufiIi;ocion de uno de Ios Pic mos conocidos en eI mercodo. EI Pic IoF84. Esfe es un Pic ideoI poro oqueIIos personos que recien comien;on con esfe fipo de fecnoIogo. EI IoF84 es un Pic de muy bojo cosfo (menos de 7,b doIores), y es copos de ser escrifo y borrodo hosfo I000 veces. De esfo monero sobemos que podemos procficor con un microconfroIodor y reoIi;or profofipos, sin gosfor demosiodo dinero. Con sus I3 enfrodos soIidos progromobIes podemos hocer uno voriedod de proyecfos que no pueden dejor de infenfor procficor esfo fecnoIogo. Ademos posee o4 byfes de EEProm, copos de guordor informocion imporfonfe ocerco deI usuorio y guordorIo por mos que esfe se desconecfe de Io bofero. Posee I Mb de memorio desfinodo oI progromo pero con codigo Io suficienfemenfe comprimido como poro poder oprovechor oI moximo Io memorio. OsciIodor o crisfoI o o PC de veIocidod medio (4Mh; o Z0Mh; en Ios Hs) podemos confroIor inferesonfes proyecfos que seron de mi ogrodo conocer. Ademos cuofro fuenfes de inferrupcion diferenfes poro IIomor Io ofencion en cuoIquier momenfo. Esfo infroduccion creo que se ho exfendido bosfonfe pero sero bueno enseorIes Ios moferioIes que ufiIi;oremos en esfe curso. Mecesiforemos en primer Iugor, su ofencion y dedicocion, pues usfedes seron Ios que fendron que oprender esfo fecnoIogo. Por ofro Iodo necesiforemos un progromo poro escribir eI codigo fuenfe (progromo que IIevoro eI Pic en sus enfroos). Exisfe uno gron voriedod de progromos en Io web y en eI mercodo, oIgunos que frobojon bojo dos, Windows o Linux, pero nosofros ufiIi;oremos eI MPIob (P) , disfribuido por Microchip, y de disfribucion grofuifo. Lo podremos bojor deI sifio de Microchip o con eI simpIe IIenodo de un formuIorio en Io pogino de esfo empreso nos Io mondoron en formo grofuifo o nuesfro hogor. Con eI escribiremos eI codigo, Io compiIoremos y Io simuIoremos, fodo en nuesfro Pc. Por uIfimo necesiforemos de un grobodor de Pic, Exisfen en Io red muchos grobodores de Iibre disfribucion. En eI curso ufiIi;oremos eI Propic, es uno pIoco generico copos de fomor muchos de Ios Pic ocfuoImenfe exisfenfes, incIuso eI IoF84. Por supuesfo que si deseomos ufiIi;or Io grobodoro de Pic deberemos fener un Pic. En eI curso oprenderemos como Progromor Ios Pic, y he frofodo de ser Io mos procfico posibIe poniendo ho su disposicion uno gron voriedod de ejempIos como os proyecfos de fodo fipo. Creo que es fodo, 8ueno suerfe y no se pierdon que Ios necesifo poro mi fufuro fomo :-)
Empecemos Sefeondo eI MPIob (P)
Seteundo todo puru empezur trunquiIos
EI MPIob es un progromo. EI MPIob es un progromo. Mo es infeIigenfe y no sobe que hocer por si soIo. Es mos, Ies debemos dor Ios ordenes uno o uno y muy bien expIicodos poro que esfe Ios enfiendo. Esfos ordenes esforon ocompoodos por poromefros que Ie diron o Io moquino como se reoIi;oro eso foreo. De ofro monero, esfo no se ejecuforo. Anfes que nodo nos enconfromos con que eI codigo no se creo en cuoIquier Iodo. Se escribiro en un orchivo (simiIor o un orchivo de fexfo comn y corrienfe) que fendro Io exfension ^.osm. EI codigo se ejecufo de orribo hocio obojo empe;ondo de Io primer Ineo de codigo y ferminondo en Io Ifimo. Es decir que cuondo Ieomos eI codigo que hemos escrifo, comen;oremos de Io mismo monero que si Ieyeromos uno corfo. Ademos en eI MpIob podemos generor Iibreros (fro;os de codigo que se comporfen en disfinfos proyecfos), cuyo exfension es ^.inc. Con eIIos nos ohorrororemos fipeo, y fodo esforo mos orgoni;odo. Como Io memorio deI microconfroIodor es muy Iimifodo, eI codigo debe ser escrifo en eI pic de uno monero comprimido. EI MPIob se encorgoro de comprimir eI codigo y dejornosIo en un orchivo ^.hex. En esfe orchivo se encuenfro fodo nuesfro codigo escrifo en HexodecimoI. Es decir que eI codigo que verdoderomenfe hobomos escrifo en vorios hojos de frobojo ohoro soIo es un porrofifo de numeros y Iefros. Empecemos ohoro si con eI progromo. Uno ve; insfoIodo eI MPIob (P) , nos enconfroremos con Io siguienfe venfono:
Aqu nos enconfromos como en cuoIquier progromo con uno 8orro de men (FiIe, Proyecf, Edif, ...), Uno 8orro de Comondos (son Ios iconifos que oporecen debojo de Io 8orro de Men, son occesos ropidos o Ios comondos mos comunes), y un 8orro de TfuIo (Io de mos orribo en donde oporece eI nombre deI proyecfo obierfo). Todo eI codigo y Ios Iibreros deberon esfor confenidos en un soIo proyecfo. Esfe proyecfo poro Ios que no soben progromocion sero oIgo os como uno corpefo que confendro fodos Ios orchivos que ufiIi;o un mismo progromo. De esfo monero cuondo nosofros Ie pidomos oI MPIob por ejempIo simuIor nuesfro progromo, esfe sobro cuoIes son Ios orchivos que ufiIi;o nuesfro progromo Enfonces creemos un proyecfo nuevo. Vomos o Io borro de men, Proyecf, Mew Proyecf. Mos pediro Io ubicocion y eI nombre deI nuevo proyecfo. Le pondremos un nombre como Inicio.pjf y Io guordoremos en oIgn sifio que Iuego Io enconfremos. Todo eI proyecfo, codigo fuenfe y Ios Iibreros deberon esfor en uno mismo corpefo. Domos eI ok o Io venfono. Mos oporecero uno venfono de Edicion deI Proyecfo. Por eI momenfo Ie doremos Ok sin miror mucho pues nos foIforo eI orchivo de codigo. OI Esfomos como oI principio. Mo combio nodo excepfo Io 8orro de TfuIo que ohoro fiene eI nombre y Io ubicocion de nuesfro proyecfo. Ahoro debemos creor un creor un orchivo que confengo fodo eI codigo fuenfe. Enfonces voyomos o Io 8orro de men, FiIe, Mew. Aqu es donde escribiremos eI codigo fuenfe pero primero debemos guordor eI orchivo. Poro esfo en Io 8orro de men, FiIe, Sove os..., y Io guordoremos con eI nombre Inicio.osm en Io mismo corpefo deI proyecfo. Ahoro fenemos un proyecfo que no fiene osignodo ningn orchivo de codigo fuenfe (node) y un orchivo de codigo fuenfe oisIodo, por eso debemos enIo;orIos. Voyomos o Io 8orro de men, Proyecf, Edif proyecf, y se obriro uno venfono que yo hemos visfo onfes. 8usquemos eI bofon Add Mode y presionemos sobre eI. Enconfroremos eI orchivo Inicio.osm y ponemos Ok. Ofro coso que debemos combior es en Io opcion DeveIopmenf Mode debemos presionor eI bofon Chonge. AII se obriro uno venfono en donde fendremos que sefeor vorios cosos. En Io soIopo TooIs, pondremos eI nombre deI infegrodo (processor) y oIgo muy imporfonfe, por Io generoI por defecfo esfo sefeodo Io opcion Mone(Edifor OnIy), oII pondremos Io opcion MPLA8-SIM (SimuIofor). Si esfo esfo en OnIy Edifor, podremos escribir eI codigo pero no nos dejoro simuIorIo en Io PC. En eI nombre deI infegrodo pondremos Iof84 que es con eI que frobojoremos dodo su bojo precio y su bueno performonce. En Io soIopo CIock, pondremos Io frecuencio de osciIodor y eI fipo de osciIodor de nuesfro micro. Aqu pondremos osciIodor XT y frecuencio de 4Mh;.
Los demos soIopos por ohoro no Ios focoremos. Si fodo soIio bien debero quedor os:
Yo cosi esfomos Iisfos poro empe;or o escribir eI codigo. Si oun no oporecio Io venfono de fexfo (donde se escribiro eI codigo), pondremos en FiIe, Open..., y pondremos eI orchivo osm que deseomos modificor. 8ien yo fenemos eI edifor de fexfo, yo fenemos un proyecfo, que nos foIfo... Debemos creor eI ^.hex. Esfe se creo oufomoficomenfe cuondo compiIomos eI progromo por primero ve;. Por ohoro no nos horemos probIemo y empecemos con eI codigo. Empe;ondo con eI Progromo
Empezundo con eI progrumu
Primero debemos fomor oIgunos cIoses generoIes ocerco deI codigo. Que es eI codigo7 EI codigo sero Io Iisfo de ordenes que seguiro eI micro. En eI pondremos fodos Ios posos que efecfuoro eI mismo. EI PIC es microconfroIodor, copo; de seguir nuesfros indicociones. Ofros componenfes, son fijos, foIes como compuerfos, memorios, efc. Los microconfroIodores son infegrodos copoces de seguir uno secuencio progromodo. Esfo quiere decir que se progromo. Como Io progromomos7 Muesfro Pc sero Io inferfose Hombre-MicroconfroIodor. Todos Ios microconfroIodores poseen uno memorio de progromo, en Io cuoI confendro fodos Ios posos o seguir. EI codigo como en cuoIquier Iisfo se empe;oro o Ieer Io primero Ineo, Iuego Io segundo y os sucesivomenfe, soIvo que se especifique Io confrorio. EI codigo se escribiro en Io venfono en bIonco que oporece poro en eI MPIob. Ahoro posoremos o conocer Ios porfes deI progromo. En Io siguienfe seccion pondremos en visfo un codigo fuenfe de porfe de un progromo, no voIe Io peno copiorIo y ejecuforIo yo que su fin es soIo de mosfror Ios porfes de Ios progromos. Echemos un visfo;o oI siguienfe codigo: LIST p~IoF84 Lisfodo deI PIC que se ufiIi;oro sfofus equ 03h porfb equ 0oh frisb equ 8oh rp0 equ b rbie equ 3 rbif equ 0 infcon equ 0bh Ioop equ 0dh IoopZ equ 0eh Ioop3 equ 0fh Ioop4 equ I0h w equ 00h Encobe;odo o heoder, son Ios equivoIencios gofo inicio Codigo dormir bcf infcon,rbif bsf infcon,rbie SLEEP bcf infcon,rbie bcf infcon,rbif refurn
refordoI00mS movIw dI00 movwf IoopZ finrefordoI nop nop nop nop nop coII refordoImS movIw dI00 decfs; IoopZ gofo finrefordoI Funciones (Yo es porfe deI codigo) refurn ,^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ,^ PrincipoI ^ ,^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Pems: Mo es porfe deI codigo son onofociones nuesfros. EI compiIodor Ios posoro de Iorgo
end Senfencio de Fin deI progromo Mo expIicoremos insfonfoneomenfe fodos Ios porfes deI progromo pero me porece un buen momenfo poro expIicor Ios heoder, yo que esfos Ios fendremos que fener en cIoro desde eI principio. En eI codigo cuondo oporeco: sfofus equ 03h porfb equ 0oh frisb equ 8oh rp0 equ b Lo que queromos decirIe oI progromo es que codo ve; que escribomos Io poIobro sfofus, cuondo compiIe eI progromo Io combie por Io que Ie sigue o equ. Es decir que Sfofus equivoIdro o 03h. Es decir que codo ve; que queremos escribir 03 hexodecimoI en eI codigo, sero Io mismo poner sfofus. Depende de donde pondromos Io poIobro sfofus, esfo correspondero o un numero o correspondero o Io direccion 03 de memorio Veomos Ios siguienfes ejempIos poro redondeor eI femo. bsf 03h,3 bsf 03h,sfofus bsf sfofus, 3 (sinfoxis: 8sf xxx,b) Poro Ios que no conocen Ios insfrucciones deI osembIer, 8SF pone un I en eI bif b deI regisfro de direccion xxx (si deseos ver mos ocerco de esfo insfruccion, visifo Io Iistu de instrucciones ) VoIviendo, en Ios fres ejempIos se reoIi;o Io mismo. En Io primero, eI codigo es confuso, en eI segundo fombien pues ese sfofus no significo mucho que IIeve eI voIor 3 pero oqui se ve que se uso como consfofe. en Io fercero Iineo eI codigo fomo coIor pues se pone un I en eI bif 3 deI regisfro ubicodo en Io direccion sfofus (03h). Por ofro Iodo debemos fener en cuenfo que pueden exisfir vorios heoder con eI mismo voIor pero no pueden exisfir uno heoder con dos voIores. VoIveremos o Ios porfes deI progromo Iuego. Como se progromo7. Debemos ser proIijos oI progromor. En un primer momenfo soIo nos debe preocupor que es Io que queremos hocer. Orgoni;ornos en popeI y Iopi; morcondo Ios porfes imporfonfes deI codigo oyudoro mucho. Es convenienfe eI uso de rems pues esfos nos oyudoron en fodo momenfo. Esfos no ocupon memorio en eI pic pues no se escriben en eI. EI uso odecuodo de Ios nombres de funciones como os fombien eI de Ios equivoIencios nos oyudoron muchsimo, pues fendremos bien efiquefodos fodos Ios porfes deI codigo segn eI uso que Ies demos . Escribir un codigo fuenfe es muy fociI, escribir eI primer codigo fuenfe es muy difciI. PIuneemos un proyecto simpIe con eI 1F4 Que foI si queremos simpIemenfe encender un Ied ubicodo en Io pofo uno deI infegrodo (PoZ). 8ien siempre en fodo progromo de PIC hecho en eI MPIob debero IIevor Ios siguienfes dos Ineos: LIST p~IoF84 End Ok. Lo primero Ineo Ie esfo indicondo oI MpIob que Iisfodo de MicroconfroIodor se ufiIi;oro. Como ufiIi;oremos eI Pic IoF84 eI Iisfodo debero ser eI mismo. Lo segundo Ineo Ie diro donde fermino eI progromo. En eI medio de esfos dos iro fodo eI codigo. Poro encender eI Ied nos bosfo soIo con cuofro Ineos mos de codigo: LIST p~IoF84
bsf 3,b bcf 8b,Z bcf 3,b bsf b,Z end Ju Ios pesque sin enfender nodo. Es fociI. Lo primero y uIfimo Ineo yo Io hemos onoIi;odo. Lo segundo y Io quinfo son muy porecidos y Io fercero y cuorfo fombien. Veomos que significo Ios senfencios bcf y bsf cf: if CIeor FIog sf: if Sef FIog. Esfo quiere decir que pondro uno bondero (FIog) o no en oIgn 8if. Vemos que codo Ineo de bxf confiene odemos dos nmeros. Esfos seron eI primero poro eI regisfro y eI segundo poro eI numero de bif. Es decir que Io segundo Ineo pondro un uno (uno bondero) en eI bif cinco deI regisfro fres. De Io mismo monero en Io fercero Ineo de codigo fendremos que pondro en cero eI bif dos deI regisfro ochenfo y cinco. 8ueno pero que significodo fienen Ios regisfros 3 y 8b onfes nombrodos. Son Ios regisfros de "esfodo" y "Tris A" Es decir que esfe progromo Io que hoce es occeder primero oI regisfro de esfodo y modificor Io poginocion de esfe (Pp0 es eI bif b deI regisfro sfofus), de esfe modo podremos occeder o Io segundo coIumno de regisfros. Pecordemos que eI regisfro Tris o esfo en eI bonco uno de Ios boncos de regisfro. Luego de eso, modificomos Io enfrodo-soIido PoZ (8if Z deI regisfro fris), coIocondo o esfo como soIido de dofos. Ahoro debemos voIver oI bonco cero poro poder occeder oI regisfro PorfA. Enfonces modificomos Io poginocion deI regisfro sfofus voIviendo eI bif b (Pp0) o cero. Ahoro si esfomos preporodos poro escribir direcfomenfe en eI puerfo. Pecuerden que por defecfo eI PIC fendro o fodos Io enfrodos- soIidos (fonfo Ios puerfos Po y Pb), coIocodos como enfrodo de dofos, por eso es que Ios debemos sefeor onfes de usor (Si uno infenfo escribir uno enfrodo eI MPIob no genero ningn error, simpIemenfe no hoce nodo). Esfo si Io compiIomos y Io simuIomos, funciono, pero que poso si venimos denfro de unos dos y vemos eI codigo nuevomenfe. Mos resuIforo difciI recordor que 03 equivoIe o sfofus y que 8b equivoIe o Tris A. Poro eIIo ordenemos un poco eI codigo y IIomemos o Ios cosos por su nombre: LIST p~IoF84
bsf Sfofus,Pp0 bcf TrisA,Z bcf Sfofus,Pp0 bsf PorfA ,Z end Mo es verdod que esfo mejor. Y que foI si Ies ponemos oIgunos onofociones nuesfros. Esfos IIevoron oI principio eI punfo y como, enfonces de esfo monero, eI compiIodor no fomoro en cuenfo eI resfo de Io Ineo: LIST p~IoF84
end ,Esfe es eI fin Fjense como se esfiro nuesfro progromo. En esfo porfe hemos expIicodo Ios senfencios "bsf", "bcf", y porfe de oIgunos regisfros como eI "TrisA", "PorfA" y "Sfofus". Si queres, Aqui fenes fodos Ios instrucciones deI uscembIer de pic bien expIicodos. Que Ies porece si Io simuIomos poro ver que es Io que posoro en eI PIC. Poro eIIo posoremos o Io siguienfe porfe.
CompiIundo y simuIundo eI progrumu
Un progromo medionomenfe normoI no se escribe hosfo eI finoI sin ninguno pruebo en eI medio, pues es muy probobIe que hoyon oIgunos errores. En Io bsquedo de errores, cuonfo menor confidod de codigo fengomos que revisor, es mejor. Por eso es que codo fonfo fiempo, debemos compiIor eI proyecfo y simuIorIo. Si deseomos escribir fodo eI codigo de corrido, Io podemos hocer, pero de seguro fendremos mos errores que mofusoIen.
Poro compiIor debe primero guordorse eI proyecfo y Iuego ir o proyecfo Moke Proyecf. Esfe nos creoro eI proyecfo y uno venfono nos indicoro Ios errores que fenemos.
En esfe cuodro que confiene eI codigo fuenfe hemos escrifo por error Sfofis en ve; de Sfofus, Como es de suponer, en eI cuodro de 8uiId PesuIfs nos indicoro eI error como Error II3, Mo exisfe definicion previo. Si hocemos dobIe cIick encimo de Io orocion que confiene Error (De Io venfono de 8uiId PesuIfs), esfo se posicionoro en Io Ineo de codigo donde supuesfomenfe esfo eI error. Los errores no nos dejoron de ferminor de compiIor eI codigo mienfros que Ios Wornings y Ios messoges si. Esfos Ifimos son ovisos de posibIes errores. Hoy errores mos compIicodos como Ios errores de combio de boncos: Mosofros esfomos en un bonco de memorio diferenfe oI bonco de memorio oI que queremos occeder. AI Ieer o escribir un dofo, Ieero o escribiro cuoIquier coso. Esfe fipo de errores Ios veremos mos odeIonfe cuondo simuIemos eI proyecfo. Poro evifor esfe fipo de errores, se debe fener especioI cuidodo oI escribir eI codigo pues muchos veces no generon un error impIcifo en eI cuodro de 8uiId PesuIfs. Hoy mos errores que Ios froforemos mos odeIonfe cuondo opore;con (si no oporecen es que Ios he evifodo :-)) Uno ve; que ferminomos de compiIor nuesfro proyecfo sin ningn error, podemos cerror Io venfono 8uiId PesuIfs y empe;or o simuIorIo. En Io 8orro de herromienfos, Windows, SpecioI Funcions Pegisfer Windows, nos oporece uno venfono como Io siguienfe con fodos Ios regisfros especioIes. Esfo es Io que mos se ufiIi;oro o Io horo de simuIor un proyecfo.
Puede fener combios si esfomos frobojondo con diferenfes fipos de micros. Los que se encuenfron en rojo son Ios que hon combiodo por uIfimo ve;. Tombien fenemos confroIes poro ver eI fiempo en que se reoIi;o uno deferminodo occion. Esfo esfo en Io 8orro de Herromienfos, Windows, Sfopwofch. Lo venfono es Io siguienfe:
En Io 8orro de Herromienfos, fenemos fodos Ios cosos necesorios poro revisor regisfros, modificorIos, poro ver como se escribiro eI progromo en Io memorio deI PIC, regisfror confodores de fiempo, efc. Sero bueno que proboron codo uno de esfos poro conocer Ios herromienfos que fenemos o Io horo de frobojor. Hoy diferenfes formos de simuIor proyecfos. Podemos ir Ineo o Ineo viendo como se modificon Ios regisfros o medido que poso eI fiempo. Poro eIIo fenemos en Io 8orro de Herromienfos, Debug. Denfro fenemos, enfre Ios mos comunes. Lo opcion Pun (Aqu fenemos Io opcion Sfep (poso por poso), Pesef (Pesefeo), Animofe (corre Io simuIocion poso o poso oufomoficomenfe hosfo que se presiono HoIf), HoIf (defener Io simuIocion), efc.) Lo opcion de 8reok Seffing, esfo poro poner uno o mos porodos o Io Iorgo deI codigo. Uno corre un progromo hosfo que esfo IIego o un 8reok Poinf. Tombien Io podemos poner presionondo con eI bofon derecho deI mouse sobre Io Ineo de codigo que queremos que se defengo. Esfo opcion se ufiIi;o mucho cuondo hoy refordos de fiempo, o fiempos muerfos deI micro (por ejempIo si prendemos un Ied debemos esperor oI menos Zb0mS poro opogorIo yo que sino no Io veriomos pues Io veIocidod deI micro es muy gronde) Tombien fengomos en cuenfo que Ios cosos mos comunes Ios podemos hocer desde Io 8orro de comondos. Poro sober que es codo uno de esfos cosos nos posicionomos sobre eI icono y sin oprefor nodo nos oporece un mensoje en Io 8orro de Esfodo (es Io que esfo mos obojo de fodo Io venfono). En eI proyecfo onferior veremos que sucede poso por poso:
As es como esfomos en un primer momenfo. Si no esfuviesemos os Io que debemos hocer es ir o Io 8orro de Herromienfos, Debug, Sysfem Pesef. Tombien voIe ocomodor Ios venfonos o gusfo.
Posomos eI primer poso y vemos que hon combiodo oIgunos cosos: PcI (Confodor deI progromo), Sfofus (modifico eI bif b) (esfomos preporodos poro modificor eI bonco uno), y como ero de esperor hi;o un cicIo de reIoj en eI fiempo de IuS.
Aqu modifico nuevomenfe o PcI, y yo modifico eI Tris A de modo que eI bif Z se puso en posicion de soIido. En esfe coso vemos que se ho modificodo fombien eI regisfro T0pre. Esfe regisfro es eI confodor deI Timer 0 que no se esfo ufiIi;ondo pero oI ser un confodor esfo confondo fodo eI fiempo. EI reIoj esfo en eI segundo cicIo.
AI fercer cicIo yo nos enconfromos con que combio nuevomenfe eI T0pre, eI bif b deI regisfro Sfofus (se posiciono en eI bonco 0 deI bonco de memorio) y eI pcI.
Hon combiodo oIgunos cosos. Por Io pronfo oporecio eI Progrom Memory Window, indicondo que IIego o Io senfencio End. Por ofro Iodo Combio eI Porf A poniendo en I eI bif Z. Tombien combio eI confodor de progromo y eI Timer 0 ounque nosofros no Io ufiIicemos. Mos enconfromos en eI cuorfo cicIo de frobojo, es decir que nuesfro progromo fordo 4 micro Segundos en encender un Ied. VoIe ocIoror que mos odeIonfe encenderemos vorios Ieds en un soIo cicIo de frobojo. 8ien yo hemos simuIodo nuesfro proyecfo. Los invifo que Io modifiquen o gusfo poniendo mos puerfos como soIido y escribiendoIos uno o uno. Enfre ofros cosos, fombien podremos simuIor bofones, swifches o puIsodores como si esfos esfubieron conecfodos o cierfos pofos deI micro. Es fociI de ufiIi;or. Uno ve; que esfemos corrindo eI progromo, vomos oI menu de herrominfos o Debug-SimuIofor SfimuIus - Asynchronocs SfimuIus y oIIi oporece un recuodro con IZ bofones. En eIIos con eI bofon derecho deI mouse sobre uno de Ios bofones, fendremos vorios opciones: Assing pin: sero eI pin que deseos esfimuIor con ese bofon. PuIse: Es como si fuero un bofon sin refencion. Cuondo Io opriefos es uno cuondo Io sueIfos es un cero. Low - high: pone un oIfo o un bojo en eI pin osignodo. Si yo fiene un bojo o un oIfo, esfe permonecero invoriobIe. ToggIe: Combio de uno o cero y de cero o uno depende de Io que fengo ocfuoImenfe. Ahoro que Ies porece si hocemos un proyecfo de mos ofrocfivo. Mo se Io pierdon o se Ies coeron Ios ojos.
Luces Chispeantes Introduccin
Este es una Idea que nos trajo Raul Betancur acerca de un juego de luces que realiza convinaciones segn como lo configuremos. El Proyecto es muy interesante para aquellos que estan siguiendo el curso, porque dan buena prctica para manejo de los micros. Est sobretodo interesante pues maneja algo que aun no hemos visto aqui: El uso de botones y del temporizador. Para los mas adelantados, podrn adems hacer uso de interrupciones y de la memoria EEProm, ya que esta en nosotros cuan completo ser el proyecto. Invito a todos a compartir esta idea y ponernos en prctica con este proyecto ya que es la nica manera con la que se presentarn las dudas. Tambin quiero darles la posibilidad de que compartan sus ideas enviandome su solucin al problema a andres@moraldo.com.ar. Ademas a todos aquellos que esten interesados se publicar la respuesta del mismo en los proximos das, para que todos puedan compartir e intercabiar opiniones. Si asi lo deseas y crees que tu proyecto vale, enviamelo a andres@moraldo.com.ar de la misma manera que lo hizo Raul y ser publicado en esta pagina web para que todos lo aprendamos. Demosle las gracias Raul Bentacur (raulbeta@hotmail.com), y a todas aquellas personas que mandan a diario sus proyectos (entre ellas estoy yo: andres@moraldo.com.ar)
Luces Chispeantes Idea: Raul Betancur
El controlador tendr dos entradas (E1, E2) y ocho salidas. Las ocho salidas estarn conectadas a 8 LED. De esta manera, controlando las ocho salidas, se puede elegir cules LED estn encendidos y cules no. Note que el estado de los ocho LED se puede describir usando un byte. En consecuencia, una secuencia de estados se puede especificar usando un arreglo de bytes. Para ejecutar una secuencia, basta con poner los bytes respectivos en las salidas, uno tras otro, mantenindolos un tiempo. El controlador podr mostrar cuatro secuencias diferentes las cuales estarn representadas por cuatro arreglos de bytes. La secuencia que se mostrar se selecciona por medio de las entradas, las cuales son controladas por dos conmutadores. DISEO DEL CONTROLADOR El diseo del controlador de luces se describe a continuacin : Los pines 6, 7, 8, 9, 10, 11, 12, 13 corresponden a las salidas RB0/INT, RB1, RB2, RB3, RB4, RB5, RB6 y RB7 (puerto B del PIC). Cada uno de estos pines estn conectados a un LED. Los pines 1 y 2, que corresponden a las salidas RA2 y RA3 (puerto A del PIC), estn conectados a conmutadores. Estos conmutadores determinan cul de las 4 programaciones predefinidas se desea ejecutar.
Cada patrn de programacin de los LED se encuentra almacenado en un arreglo en memoria de 8 bytes. Es decir, 8 datos de 1 byte cada uno, que representan los 8 estados de una secuencia. Dos de los patrones deben ser los siguientes: Patrn 1 ("Auto fantstico")
01010101 10101010 01010101 10101010 01010101 10101010 Los otros dos patrones quedan a inventiva del programador. Cada byte de la secuencia indica cules LED deben encenderse en la salida Algunas Soluciones
Solucion segun Raul Betancur: luchisra.zip (12Kb) Ayuditas para la realizacin: Para detectar los botones apretados se debe proseguir de la siguiente manera: Se lee el puerto a, se le hace un andlw con el numero correspondiente a las patas de entrada. Luego se carga el registro w con el valor a comparar y se le sustrae el valor anterior. Si el resultado es 0 (es decir que ambos son iguales) en el registro status existe un FLAG que nos lo indicar. (Es el bit Z que corresponde al bit 2 del registro Status). El uso del temporizador no es muy dificil ya que se accede de manera directa. Eso si no olvidemos de ponerle el preescaler en un valor distinto de uno ya que sino nos costara mucho leerlo.(a no ser de utilizar las interrupciones) Bueno nada mas. Si algo no les sale, no se preocupen, esto es solo el comienzo. No se pierdan de armar el grabador de Pic
Instrucciones
Estas son las todas las instrucciones que hay para poder programar el Pic 16c5x, 16c64, 16c71, 16c74, 16c84 (tambien abarcara los flash respectivos, en el caso que existan) . Las encontraremos en orden alfabetico. En total son 37 y haciendo un clic sobre una de ellas podemos acceder a su respectiva descripcin: ADDLW ADDWF ANDLW ANDWF BCF BSF BTFSC BTFSS CALL CLRF CLRW CLRWDT COMF DECF DECFSZ GOTO INCF INCFSZ IORLW IORWF MOVF MOVLW MOVWF NOP OPTION RETFIE RETLW RETURN RLF RRF SLEEP SUBLW SUBWF SWAPF TRIS XORLW XORWF
ADDLW ADD Literal to W Sintaxis ADDLW k Codificacin 11 111x kkkk kkkk
Palabras, Ciclos 1, 1 Operacin W + k -> W Bit de estado C, DC, Z Descripcin Aade el contenido de W al contenido de k, y almacena el resultado en W Atencin: Esta instruccin no existe en los Pic 16c5X
ADDWF ADD W to F Sintaxis ADDWF f, d Codificacin 0001 11df ffff 00 0111 dfff ffff
Palabras, Ciclos 1, 1 Operacin W + f -> f si d=1 W + f -> W si d=0 Bit de estado C, DC, Z Descripcin Aade el contenido de W al contenido de f, y almacena el resultado en W si d=0, y en f si d=1
Volver
ANDLW AND Literal and W Sintaxis ANDLW k
ANDWF AND W with F Sintaxis ANDWF f, d Codificacin 1110 kkkk kkkk 11 1001 kkkk kkkk
Palabras, Ciclos 1, 1 Operacin W AND k -> W Bit de estado Z Descripcin Efecta un AND lgico entre el contenido de W y el literal k, y lo almacena en W
Codificacin 0001 01df ffff 00 0101 dfff ffff
Palabras, Ciclos 1, 1 Operacin W AND f -> f si d=1 W AND f -> W si d=0 Bit de estado Z Descripcin Efecta un AND lgico entre el contenido de W y el contenido de f, y almacena el resultado en W si d=0, y en f si d=1
Volver
BCF Bit Clear F Sintaxis BCF f, b Codificacin 0100 bbbf ffff 01 00bb bfff ffff
Palabras, Ciclos 1, 1 Operacin 0 -> b(f) Bit de estado Ninguno Descripcin Pone a cero el bit numero b de f
BSF Bit Set F Sintaxis BSF f, b Codificacin 0101 bbbf ffff 01 01bb bfff ffff
Palabras, Ciclos 1, 1 Operacin 1 -> b(f) Bit de estado Ninguno Descripcin Pone a uno el bit numero b de f
Volver
BTFSC Bit Test, Skip If Clear Sintaxis BTFSC f, b Codificacin 0110 bbbf ffff 01 10bb bfff ffff Palabras, Ciclos 1, 1 o 2 Operacin Salta si b(f)=0 Bit de estado Ninguno
BTFSS Bit Test, Skip If Set Sintaxis BTFSS f, b Codificacin 0111 bbbf ffff 01 11bb bfff ffff Palabras, Ciclos 1, 1 o 2 Operacin Salta si b(f)=1 Bit de estado Ninguno Bit de estado Ninguno Descripcin Si el bit numero b de f es nulo, la instruccin que sigue a esta se ignora y se trata como un NOP. En este caso, y solo en este caso, la instruccin BTFSC precisa dos ciclos para ejecutarse.
Bit de estado Ninguno Descripcin Si el bit numero b de f esta en uno, la instruccin que sigue a esta se ignora y se trata como un NOP. En este caso, y solo en este caso, la instruccin BTFSC precisa dos ciclos para ejecutarse.
Palabras, Ciclos 1, 2 Operacin En el caso de los 16c5X: PC + 1 -> Pila, k -> PC(0-7), 0 -> PC(8), PA2 Bit de estado Ninguno Descripcin Guarda la direccin de vuelta en la pila y despues llama a la
CLRF Clear F with F Sintaxis CLRF f Codificacin 0000 011f ffff 00 0001 1fff ffff
Palabras, Ciclos 1, 1 Operacin 00 -> f Bit de estado Z Descripcin Pone el contenido de f a cero y activa el bit Z.
(en los demas PIC), antes de ejecutar la instruccin CALL
Palabras, Ciclos 1, 1 Operacin 00 -> WDT y 0 -> predivisor del temporizador Bit de estado 1 -> TO y 1 -> PD Descripcin Pone a cero el registro contador del temporizador watchdog, asi como el predivisor
Volver
COMF Complement F Sintaxis COMF f, d Codificacin 0010 01df ffff 00 1001 dfff ffff
Palabras, Ciclos 1, 1 Operacin ~f -> f su d=1 ~f -> W si d=0 Bit de estado Z Descripcin Hace un complemento de f bit a bit. El resultado lo almacena de nuevo en f si d=1 (borra el anterior), o en W si d=0 (f no vara)
DECF Decrement F to F Sintaxis DECF f, d Codificacin 0000 11df ffff 00 0011 dfff ffff
Palabras, Ciclos 1, 1 Operacin f - 1 -> f si d=1 f - 1 -> W si d=0 Bit de estado Z Descripcin Decrementa el contenido de f en una unidad. El resultado se guarda en W si d=0 (f no varia), y en f si d=1
Volver
DECFSZ Decrement F, Skip If Zero Sintaxis DECFSZ f, d Codificacin 0010 11df ffff 00 1011 dfff ffff
Palabras, Ciclos 1, 1(2) Operacin f - 1 -> f si d=1 f - 1 -> W si d=0 Bit de estado Ninguno Descripcin Decrementa el contenido de f en una unidad. El resultado se guarda en W si d=0 (f no varia), y en f si d=1 Si el reusltado es nulo, se ignora la siguiente instruccin y en este caso la instruccin dura dos ciclos.
GOTO Salto Incondicionalwith F Sintaxis GOTO k Codificacin 101k kkkk kkkk 10 1kkk kkkk kkkk
Palabras, Ciclos 1, 2 Operacin En el caso de los 16c5X: k -> PC(0-8), PA2 PA1, PA0 -> PC(9-11) En el caso de los 16c64,71,74 y 84: k -> PC(0-10), PCLATH(3,4) -> PC(11,12) Bit de estado Ninguno Descripcin LLama a la subrutina situada en la direccin cargada en el PC Atencin: El modo de clculo de la direccin difiere segn la familia de PIC utilizada. Tambin hay que posicionar correctamente PA2, PA1, PA0 (16c5X) o el registro PCLATH (en los demas PIC) antes de ejecutar la instruccin GOTO
Volver
INCF Increment F Sintaxis INCF f, d Codificacin 0010 10df ffff 00 1010 dfff ffff
Palabras, 1, 1
INCFSZ Increment F, Skip if Zero Sintaxis INCFSZ f, d Codificacin 0011 11df ffff 00 1111 dfff ffff
Ciclos Operacin f + 1 -> f si d=1 f + 1 -> W si d=0 Bit de estado Z Descripcin Incrementa el contenido de f en una unidad. El resultado se almacena de nuebo en f si d=1 y en W si d=0(en este caso f no vara)
Palabras, Ciclos 1, 1(2) Operacin f + 1 -> f si d=1 f + 1 -> W si d=0 En ambos casos: Salto si f + 1 = 0 Bit de estado Ninguno Descripcin Incrementa el contenido de f en una unidad. El resultado se guarda de nuevo en f si d=1 y en w si d=0 (en este caso f no varia). Si el resultado es nulo, se ignora la siguiente instruccin y en este caso, esta instruccin dura dos ciclos
Volver
IORLW Inclusive OR Literal With W Sintaxis IORLW k Codificacin 1101 kkkk kkkk 11 1000 kkkk kkkk
Palabras, Ciclos 1, 1 Operacin W OR k -> W Bit de estado Z Descripcin Efecta un OR lgico inclusivo entre el contenido de W y el literal K, y almacena el resultado en W
IORWF Inclusive OR W With f Sintaxis IORWF f, d Codificacin 0001 00df ffff 11 0100 dfff ffff
Palabras, Ciclos 1, 1 Operacin W OR f -> f si d=1 W OR f -> W si d=0 Bit de estado Z Descripcin Efecta un OR lgico inclusivo entre el contenido de W y el contenido de f, y almacena el resultado en f si d=1 o en W si d=0
Volver
MOVF Move F Sintaxis MOVF f, d MOVLW Move Literal to W with Sintaxis MOVF f, d Codificacin 0010 00df ffff 00 1000 dfff ffff
Palabras, Ciclos 1, 1 Operacin f -> f si d=1 f -> W si d=0 Bit de estado Z Descripcin Pone el contenido de f en f si d=1 o f en W si d=0 Atencin: El desplazamiento de f en f que pareceria inutil, permite comprobar el contenido de f con respecto a cero ya que esta instuccin acta sobre el bit Z
F Sintaxis MOVLW k Codificacin 1100 kkkk kkkk 11 00xx kkkk kkkk
Palabras, Ciclos 1, 1 Operacin k -> W Bit de estado Ninguno Descripcin Carga W con el literal k
Volver
MOVWF Move W to F Sintaxis MOVWF f Codificacin 0000 001f ffff 00 0000 1fff ffff
Palabras, Ciclos 1, 1 Operacin W -> f Bit de estado Ninguno Descripcin Carga f con el contenido de W
Palabras, Ciclos 1, 1 Operacin W -> OPTION Bit de estado Ninguno Descripcin Carga el registro OPTION con el contenido de W Atencin: Esta instruccin no debe utilizarse en otros circuitos que no sean los PIC 16c5x. Sin embargo, es correctamente interpretada por los circuitos 16c64, 71, 74, 84 con el fin de asegurar una compatibilidad ascendente
Codificacin 00 0000 0000 1001
Palabras, Ciclos 1, 2 Operacin Pila -> PC, 1 -> GIE Bit de estado Ninguno Descripcin Carga el PC con el valor que se encuentra en la parte superior de la pila, asegurando asi la vuelta de la interrupcin. Pone a 1 el bit GIE, con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones Atencin: Esta interrupcin dura dos ciclos Esta instruccin no existe para los PIC 16c5X
Volver
RETLW Return Literal to W Sintaxis RETLW k Codificacin 1000 kkkk kkkk 11 01xx kkkk kkkk
Palabras, Ciclos 1, 2 Operacin k -> W, Pila -> PC Bit de estado Ninguno Descripcin Carga W con el literal k, y despus carga el PC con el valor que se encuentra en la parte superior de la pila, efectuando asi un retorno de subrutina Atencin: Esta instruccin dura dos ciclos
RETURN Return from Subroutinewith F Sintaxis RETURN Codificacin 00 0000 0000 0000
Palabras, Ciclos 1, 2 Operacin Pila -> PC Bit de estado Ninguno Descripcin Carga el PC con el valor que se encuentra en la Esta instruccin no existe en los PIC 16c5X
Volver
RLF Rotate Left F through Carry Sintaxis RLF f,d Codificacin 0011 01df ffff 00 1101 dfff ffff
Palabras, Ciclos 1, 1 Operacin ver descr. Bit de estado C Descripcin Rotacin de un bit a la izquierda del contenido de f, pasando por el bit de acarreo C. Si d=1 el resultado se almacena en f si d=0 el resultado se almancena en W
RRF Rotate Right F through Carry Sintaxis RRF f, d Codificacin 0011 00df ffff 00 1100 dfff ffff
Palabras, Ciclos 1, 1 Operacin Ver descr. Bit de estado C Descripcin Rotacin de un bit a la derecha del contenido de f, pasando por el bit de acarreo C. Si d=1 el resultado se introduce en f, si d=0 el resultado se amacena en W
Palabras, Ciclos 1, 1 Operacin 0 -> PD, 1 -> TO, 00 -> WDT, 0 -> Predivisor del
SUBLW Substract W from Literal Sintaxis SUBLW k Codificacin 11 110x kkkk kkkk
Palabras, Ciclos 1, 1 Operacin k - W -> W Bit de estado C, DC, Z Descripcin Sustrae el contenido de W del literal k, y almacena el resultado en instruccin con mucho cuidado, pues puede provocar que el micro no despierte si no se ha seteado correctamente.
Atencin: Esta instruccin no existe en los Pic 16c5X
Volver
SUBWF Substract W from F Sintaxis SUBWF f, d Codificacin 0000 10df ffff 00 0010 dfff ffff
Palabras, Ciclos 1, 1 Operacin f - W -> f si d=1 f - W -> W si d=0 Bit de estado C, DC, Z Descripcin Sustrae el contenido de W del contenido de f, y almacena el resultado en W si d=0 y en f si d=1. La sustraccin se realiza en complemento a dos
SWAPF Swap F to F Sintaxis SWAPF f, d Codificacin 0011 11df ffff 00 1110 dfff ffff
Palabras, Ciclos 1, 1 Operacin f(0-3) -> f(4-7) y f(4-7) - > f(0-3) Resultado -> f si d=1 Resultado -> W si d=0 Bit de estado Ninguno Descripcin Intercambia los cuatro bit de mayor peso por los cuatro de menor peso de f, y almacena el resultado en W si d=0, y en f si d=1
Volver
TRIS Load TRIS Register Sintaxis TRIS f
XORLW Exclusive OR Literal With W Sintaxis XORLW k Codificacin 1111 kkkk kkkk 11 1010 kkkk kkkk
en el registro TRIS del puerto f. Atencin: Esta instruccin no debe utilizarse en otros circuitos que no sean los Pic 16c5X. No obstante, es correctamente interpretada por los circuitos 16c64, 71, 74, 84, con el fin de asegurar una compatibilidad ascendente
Descripcin Efecta un OR lgico exclusivo entre el contenido de W y el contenido del Literal K y almacena el resultado en W
Volver
XORWF Exclusive Or W with F Sintaxis XORWF f,d Codificacin 0001 10df ffff 00 0110 dfff ffff
Palabras, Ciclos 1, 1 Operacin W OR (Exclusivo) f -> f si d=1 W OR (Exclusivo) f -> W si d=0 Bit de estado Z Descripcin Efecta un Or lgico exclusivo entre el contenido de W y el contenido de f y almacena el resultado en f si d=1 o en W si d=0
Mo fengo eI esquemo ormodo deI proyecfo Iuces chispeonfes, pero no es nodo dificiI. Depende de Io fension de enfrodo que vos o ufiIi;or poro oIimenfor eI pic y de eI fipo de osciIodor que vos o ufiIi;or. Tenes exocfomenfe I3 enfrodos/soIidos, de Ios cuoIes soIo die; se esfon usondo en eI proyecfo, osi que fociImenfe puedes oodir 3 Ieds mos. Si eI osciIodor deI pic es o crisfoI, eI crisfoI vo enfre Ios pines Ib y Io deI pic, con dos condensodores de Z0pF o moso (uno en codo pofo). Pofo 4 y I4 von o posifivo y b o negofivo (enfre 3V y b.bV). Codo soIido (Ied) vo con uno resisfencio en serie, cuyo voIor vo o depender de Io fension de enfrodo, sin superor Ios Ib o Z0 mA en codo pin de soIido. IguoI poro Ios enfrodos de Ios puIsodores.