Utdrag ur "Logiska funktioner med mikroprocessor" s.10 ff. Reviderat 121105 Håkan Joëlson... Programexempel 1 AND-funktionen Uppgift: Realisera en 2-ingångars AND-grind med PIC16F84A. I detta exempel ska varje moment i en lämplig arbetsmetodik och utformning av dokumentation gås igenom. 1. SPECIFICERA UPPGIFTEN Realisera en två-ingångars AND-grind. Sanningstabell a b f 0 0 0 0 1 0 1 0 0 1 1 1 Schemasymbol a b & f 2. RITA ETT FULLSTÄNDIGT KOPPLINGSSCHEMA /I häftet visas här ett allmänt kopplingsschema generellt för de flesta uppgifterna i häftet. (Se texten precis ovanför bilden på s.7.) Detta är inte lämpligt. Rita specifikt kopplingsschema för specifik uppgift. / Utsignalerna kopplas via lysdioder och skyddsmotstånd till jord. I ett kopplingsschema behöver endast de anslutningar som används i uppgiften redovisas. 3. SKRIV KÄLLKOD Utvecklingsprogrammet MPLAB är omfattande och innehåller många delar. Punkterna nedan tar upp några av de delar man kan ha mest nytta av i detta grundläggande kursavsnitt. Vägledningen är mycket handfast just för detta exempel. Den som är van vid Windows-program för sådana här sysslor kan modifiera åtgärderna. Ofta kan man göra exakt samma saker på olika sätt; här beskrivs en väg. I många åtgärder finns valfrihet - tex när det gäller val av namn - vilket blir aktuellt när man ger sig på andra uppgifter. Här används skrivkonventionen att ange steg i menyvalen med >-tecknet, tex View>Toolbars>Project Manager betyder att man går till View i övre menyn och sedan till Toolbars och Project Manager i successiva undermenyer. Vissa knappar och val kommer presentera sig på svenska eller något annat språk, beroende på vilka grundinställningar man har i Windows på sin dator. Här visas svenska. För det mesta.
1. Skapa en katalog där du vill ha dina filer med hjälp av Utforskaren i Windows. (Detta kan också göras i ett senare steg.) 2. Starta MPLAB. 3. I övre menyn gå till Project>Project Manager. Klicka Nästa. Välj PIC16F84A i rullgardinsmenyn i dialogrutan som öppnas. Klicka Nästa. 4. En ny dialogruta öppnas, förhoppningsvis med ett innehåll som liknar detta: Om verktygen MPASM, MPLINK och MPLIB inte syns, kontrollera att Microcip MPASM Toolsuite har valts som Active Toolsuite, och om det behövs klicka på Browse för att leta efter sökvägen till MPAsmWin.exe. Klicka Nästa. 5. I MPLAB 7: Skriv Uppgift1 som Project Name. Klicka på Browse, markera din "utgångsmapp", något i stil med: Klicka Skapa ny mapp, skriv Uppgift1, se till att den är markerad och klicka OK.
I MPLAB 8: Klicka på Browse vid Create New Project File, gå till "utgångsmapp", skapa ny mapp Uppgift1: Gå till den och fyll i Uppgift1 som projektnamn under File name och spara: Ta för vana att alltid skapa en ny katalog för varje nytt projekt. Klicka Nästa. 6. Nästa steg, Step Four, i Wizard kan hoppas över denna gång, dvs klicka Nästa. En sammanfattande dialogruta visas. Klicka Slutför. 7. Välj File>New. Ett [tomt] fönster öppnas i MPLAB. Det är den inbyggda editorn. Det är en slags enkel ordbehandlare, med speciella egenskaper, som bl.a. passar för att skapa textfiler som accepteras som assemblerkod och kan bearbetas av assemblerprogrammet. Det finns en mängd finesser såsom förgmärkning av reserverade ord och debughjälp. Mata in följande kod i editor- fönstret: LIST P=PIC16F84A ;Väljer processor #INCLUDE P16F84.INC ;Fördefinierade registerdefinitioner ORG 0 ;Startar på adr 0 vid reset BSF STATUS, RP0 ;Väljer minnesbank 1 CLRF TRISA ;Hela Port A utgång MOVLW 0xFF MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP0 ;Åter till Bank 0 ;Huvudprogram MAIN MOVLW 0x03 ;Ladda W med 0x03 SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll 0X03 BTFSC STATUS,2 ;Testa om result 0 eller 1
GOTO ETTST ;Om testet gav 1 => Ettställ PortA, bit 0 BCF PORTA,0 ;Om testet gav 0 => Nollställ PortA, bit 0 GOTO MAIN ;Kolla en gång till ETTST BSF PORTA,0 ;Ettställ PortA, bit 0 GOTO MAIN ;Kolla en gång till END 8. Välj File>Save, bläddra fram till din katalog om det behövs (borde vara där redan), skriv filnamnet UPPGIFT1.ASM i rutan File Name och spara. Observera hur kodtexten "färgläggs". MPLAB uppfattar den nu som assemblerkod. Några kommentarer till källkoden på föregående sida 0x LIST P=PIC16F84A Väljer processor. betyder att det efterföljande numeriska värdet är ett hexadecimalt värde. #INCLUDE P16F84.INC Säger till assemblatorn att i sin bearbetning av kodtext inkludera innehållet i en fil som innehåller alla vanliga registerdefinitioner (ett antal s.k. EQU-definitioner). Bl.a. definieras att PORTA ligger på adress 0x0005. Include-filen kan uteslutas men då måste man definiera all använda "registernamn" själv eller använda den exakta adressen i koden. ORG 0 BSF STATUS,RP0 BCF STATUS,RP0 MAIN * * /div programkodrader/ * GOTO MAIN END 4. Assemblera koden Säger till assemblatorn att programkoden ska programmeras in i kapseln med start på adressen efter ORG. Den adressen kan i princip vara godtycklig. Här är den 0x00, vilket är praktiskt, eftersom resetvektorn (något som pekar dit där processorn ska börja köra efter strömpåslag) pekar på adressen 0. Väljer minnesbank 1 där PortA s datariktningsregister TRISA finns. Åter till bank 0 där de flesta arbetsregisterna finns som man behöver under normal körning av sitt program. Detta skapar en evig slinga som processorn kör i all evinnerlig tid tills man stänger av den. Måste finnas i slutet i varje källkodsfil. Assemblering kallas det steg då vi gör om assemblerkoden till maskinkod, dvs de kombinationer av 1:or och 0:or som datorn kan förstå. Dessutom bestäms var i processorns minnesområden olika delar såsom programkod, funktioner och variabler ska hamna. Allt detta görs av en programmodul som kallas assemblator. 1. Först måste källkodsfilen kopplas till projektet. I normalfallet syns Project manager-fönstret. Det kan annars tas fram genom att välja View>Toolbars>Project Manager. Högerklicka på Source Files och välj Add files...
Se till att du är i projektets arbetskatalog Uppgift1, markera filen Uppgift1.asm och klicka Öppna. Nu dyker Uppgift1.asm under Source Files. 2. Välj Project>Build All. (Samma kommando kan anropas med knappen i övre verktygsremsan eller med kortkommando Ctrl+F10.) Lycklig blir man när man nederst i meddelandefönstret kan läsa: BUILD SUCCEEDED: I detta fallet har det dykt upp några varningar. "Register in operand not in bank 0..." har ingen praktisk betydelse. Den typen av varning försvinner om man i huvudet i koden (tex som tredje rad) skriver in raden: errorlevel -302 Om assembleringen misslyckades, måste man felsöka. Dubbelklicka på en varning eller ett felmeddelande för att hamna i källkoden på den rad felmeddelandet genererades. Räkna med att felmeddelanden inte sällan kuggar fel. Assemblatorn granskar syntaxen i kodtexten enligt bestämda regler för hur kodtext får se ut och försöker sen tolka avvikelser utifrån stela listor över kända fel. I praktiken kan felet rätt ofta ligga någonstans ovanför den rad som felmarkerats. Försök korrigera felet och assemblera igen. 5. Simulering Simulering kallas det när man testkör sitt program virtuellt i datorn. Se till att en Avlusare är aktiv. Välj Debugger>Select Tool>MPLAB SIM. En grön pil dyker upp i kod-fönstret. Pilen markerar den kommandorad som står i tur att utföras. Ett antal knappar dyker också upp i verktygsraden. (Motsvarande funktioner finns även under menyn Debugger.) Man kan tex köra sitt program rad för rad, hoppa i och ur subrutiner, starta om, mm. Ingångarnas nivåer kan styras i det fönster som öppnas med Debugger>Stimulus Controller>New Scenario (i MPLAB 7) resp. Debugger>Stimulus>New Workbook flik Asynch (i MPLAB 8). I fönstret kan man lägga in vilka [ingångs]bitar man vill påverka signalvärdena på. Klicka på översta radens ruta Pin/SFR. Nu kan du i en rullgardinsmeny välja vilken specifik bit du vill ettställa eller nollställa. Klicka på rutan Action på samma rad. Ett användbart val är här Toggle, som gör att man enkelt kan växla fram och tillbaka mellan etta och nolla. Detta gör man genom att klicka på Fire-knappen längst till vänster på den raden.
Välj View>Special Function Registers för att få upp ett fönster där du kan följa värdena i arbetsregisterna. Under menyn View kan man välja ytterligare fönster för att följa innehållet i minnena, etc. Stega igenom programmet och studera hur W och portarna ändras vid olika värden på RB0 och RB1. Observera också hur programpekaren PC pekar på nästa instruktion som ska verktällas. Vi ska använda PC senare så det är viktigt att förstå dess funktion....