Kul med PIC församling - episod 6 (3 / 4 steg)
Steg 3: programvara
Programvaran länk nedan. Medan det är måltavlan för 16F688, är det lätt portas till andra versioner av bilden. Du kommer att behöva ändra raden som identifierar den PIC versionen (lista =) och INCLUDE-filen men de är intuitivt förändringar. Den __CONFIG linjen kan också behöva tweaking bara för att en eller två av de etiketter som används är stavat fel i några av inkluderade filer.
De flesta av programvaran avser LCD hantering samt dröjsmål rutiner så att dessa delar bör känna om du tittat på några av de tidigare episoderna. En sak att notera på framsidan är att avsnittet variabeldeklaration (UDATA) är lite annorlunda. Eftersom EEPROM kontroll registren är alla i Bank 1 minne, beslöt jag att också placera variablerna EE_Addr och EE_Data i Bank 1. Som krävs för användning av etiketter som en del av uttalandena som UDATA start adress. Bankuppgifter 0 börjar på adressen 20 hex medan Bank 1 data börjar på adress A0 hex. Vi måste också vara medveten om hela programmet om vilken minne bank vi är när läsning och skrivning. Min regel är som anges i huvudet, att alltid ur en subrutin i Bank 0.
Eftersom vi använder register specifika för EEPROM för läser och skriver, det finns ingen anledning för oss att oroa där adressen karta EEPROM är belägen. Det gör livet lite lättare eftersom vi i princip bara ett index från 00 till FF hex. Många av bilderna har 256 byte av EEPROM men några har bara 128 byte (för anföra som exempel de 16F627/8) så var medveten om att för dina program.
Koden för läsning och skrivning i EEPROM härstammar från vad som anges i databladet men det finns ett par viktiga skillnader, särskilt i avsnittet skriva. För en läsa, vi helt enkelt ställa in önskad adress i EEADR, peka på dataminne (i motsats till programminne i flash), kommandot en läsa och sedan läsa data från registret EEDAT. Skrivprocessen följer några av samma steg men med några anmärkningsvärda skillnader i sekvensen. Igen, vi börjar genom att ange önskad adress i EEADR och sedan fylla EEDAT med databyte vi vill skriva. Nästa måste vi ange en "Skriv aktivera" flagga. Du kan komma på som som R/W stiftet på minneskretsar eller LCD-skärmen. Som tidigare nämnts, måste vi tillåta skrivprocessen att slutföra utan avbrott så detta är den punkt där vi skulle klara GIE flagg. Om du tittar i databladet, finns det kod det som faktiskt rensar GIE och sedan loopar förrän GIE är klart. Som sätts det på grund av möjligheten att ett avbrott kan uppstå innan klartext av GIE faktiskt träder i kraft (fyra klockan cykler eller en instruktion cykel). Eftersom avkastningen från avbrottshanterare återaktiverar GIE automatiskt, kan våra tydliga kommandot få ersatts. Så är vad rekommenderas att bara slinga på kommandot klart tills vi faktiskt slutföra en läsa av GIE och kontrollera att den är klar.
Nu kommer koden för att utföra hemliga handslag behövs för skriver. Verkligen, allt vi gör är att först skriva 55 hex och sedan skriva AA hex till EECON2. Jag lämnar det som en övning för eleven att beräkna sannolikheten att den sekvensen händer av en slump. Efter hemliga handslag, vi själva skriva kommandot flaggan och sedan vänta på PIC att avmarkera flaggan. Det kommer att göra det när skriva har slutförts. Eftersom vi inte kan göra något annat under tiden skriva, är polling denna flagga egentligen det enklaste sättet att utföra denna uppgift. Datablad exemplet visar ett sömn-kommando med antagandet är att vi kommer att vakna upp och fortsätta när vi får ett avbrott (EEIR) vid slutförandet av skriver. Vad det inte visas, är dock setup för att avbryta och hanteringen av avbrottet före fortsatt verkställighet. En gång de lat väg triumferna.
Rutinen Test_EEPROM skickar bara tre data-byte till EEPROM och sedan läser dem tillbaka. Varje byte som skrivits eller läsa skickas till LCD-skärmen visas. Ingenting alltför användbar vid denna punkt, men det visar hur vi kan komma åt EEPROM för framtida projekt.