Stap 3: Software
Hieronder vindt u de link van de software. Terwijl het wordt gericht voor de 16F688, is het gemakkelijk ported aan andere versies van de PIC. U zult moeten veranderen de regel waarmee de PIC-versie (lijst =) en het INCLUDE-bestand, maar die zijn intuïtieve veranderingen. De __CONFIG lijn wellicht ook tweaken alleen maar omdat een of twee van de gebruikte etiketten zijn anders gespeld in sommige van de INCLUDE-bestanden.
Van de meeste software heeft betrekking op de LCD-behandeling en de routines van de vertraging dus die delen moet kennen als je enkele van de vorige afleveringen gekeken. Een ding om op te merken aan de voorkant is dat de variabele verklaring sectie (UDATA) een beetje anders is. Omdat de EEPROM control registers allen in Bank 1 geheugen zijn, besloten heb ik om ook de variabelen EE_Addr en EE_Data in Bank 1. Dat vereist het gebruik van labels als onderdeel van de verklaringen van de UDATA start adres. Bankgegevens 0 begint bij adres 20 hex terwijl Bank 1 gegevens bij adres A0 hex begint. We moeten ook niet vergeten in het hele programma over wat geheugenbank we zijn in bij het lezen en schrijven. Mijn algemene regel, is zoals in de kop om af te sluiten altijd een subroutine in Bank 0.
Omdat we zijn met behulp van registers die specifiek zijn voor de EEPROM voor leest en schrijft, er is geen noodzaak voor ons te maken over waar het adres kaart de EEPROM bevindt. Dat maakt het leven een beetje makkelijker omdat we in feite gewoon een index van 00 tot FF hex. Veel van de foto's hebben 256 bytes van de EEPROM, maar sommige hebben alleen 128 bytes (bijvoorbeeld de 16F627/8) dus zich bewust zijn van die voor uw toepassingen.
De code voor het lezen en schrijven van de EEPROM is afgeleid van wat wordt weergegeven in het gegevensblad, maar er zijn een paar belangrijke verschillen, met name in de sectie schrijven. Voor een lezen, we gewoon het gewenste adres in EEADR instellen, wijs datageheugen (in tegenstelling tot programmageheugen in flash), opdracht een lezen, en vervolgens de gegevens lezen uit register EEDAT. Het proces van schrijven volgt enkele van dezelfde stappen uit, maar met enkele opvallende verschillen in het midden van de reeks. Nogmaals, we beginnen door het gewenste adres instellen in EEADR en vervolgens EEDAT te vullen met de gegevensbyte die we willen schrijven. Vervolgens hebben we een "schrijven inschakelen" markering instellen. Je kunt bedenken dat als de R/W pen met geheugenchips of de LCD-beeldscherm. Zoals eerder vermeld, mogen wij het schrijven proces te voltooien zonder onderbreking, dus dit is het punt waartegen we de GIE markering wilt wissen. Als je in het gegevensblad kijkt, is er code er die eigenlijk wist GIE en vervolgens lussen totdat GIE duidelijk is. Dat komt er vanwege de mogelijkheid dat een interrupt treedt op voordat de duidelijke van GIE daadwerkelijk van kracht (vier klok cycli of één instructiecyclus). Omdat de terugkeer van de interrupt handler wordt opnieuw ingeschakeld GIE automatisch, kan onze clear commando te krijgen vervangen. Dus is wat is aanbevolen om gewoon een lus op het clear commando totdat we eigenlijk gelezen van GIE voltooien en controleer of het duidelijk.
Nu komt de code voor het uitvoeren van de geheime handdruk nodig voor schrijft. Echt, alles wat we doen is het eerst schrijven 55 hex en schrijven vervolgens AA hex naar EECON2. Ik laat het als een oefening voor de student voor het berekenen van de kans die volgorde per ongeluk gebeurt. Na de geheime handdruk, wij stellen de werkelijke schrijven opdracht vlag en dan wachten op de PIC aan de markering wissen. Zij zal dat doen wanneer de schrijfbewerking is voltooid. Aangezien wij niet iets anders tijdens de tijd van schrijven doen, is polling van deze vlag echt de makkelijkste manier om deze taak te volbrengen. Het gegevensblad voorbeeld toont een slaap commando met de veronderstelling dat we wakker worden en blijven wanneer we een interrupt (EEIR) bij de voltooiing van het schrijven krijgen. Wat het niet toont, is echter de instelling voor die onderbreken en de behandeling van de interrupt vóór voortzetting van de uitvoering. Nogmaals, de luie manier triomfen.
De Test_EEPROM-routine stuurt slechts drie gegevensbytes aan EEPROM en dan leest ze terug. Elke byte die wordt geschreven of gelezen wordt verzonden naar het LCD-scherm voor weergave. Niets ook handig op dit punt, maar het toont hoe we de EEPROM voor toekomstige projecten kunnen benaderen.