Maskinorienterad programmering Laborationer för D/Z/GU (EDA480,EDA485, DIT151)

Storlek: px
Starta visningen från sidan:

Download "Maskinorienterad programmering Laborationer för D/Z/GU (EDA480,EDA485, DIT151)"

Transkript

1 Institutionen för data och informationsteknik. Roger Johansson, Jan Skansholm och Rolf Snedsböl VT 2012 Maskinorienterad programmering Laborationer för D/Z/GU (EDA480,EDA485, DIT151) Detta laborations-pm innehåller anvisningar om förberedelser inför genomförande av laborationerna, såväl som de uppgifter du ska utföra och redovisa för, under laborationerna. Laborationsserien omfattar totalt fem laborationsmoment som utförs i tur och ordning under sex laborationstillfällen. I allmänhet gäller att du arbetar i egen takt men momenten 1-3 ska klaras av under de första tre laborationstillfällena. Inför varje laborationstillfälle ska du förbereda dig genom att noggrant läsa igenom anvisningarna för laborationsmomentet i detta PM. Bortsett ifrån det första laborationstillfället förutsätts det att du inför varje laboration har genomfört omfattande laborationsförberedande hemuppgifter. Vilka dessa uppgifter är, framgår av detta PM. Du ska vara beredd att visa upp och redogöra för dina förberedda lösningar inför laborationstillfället. Bristfälliga förberedelser kan medföra avvisning från bokad laborationstid. Underskrifterna på detta försättsblad är ditt kvitto på att du är godkänd på respektive laborationsmoment. Spara det, för säkerhets skull, tills slutbetyg på kursen rapporterats. Börja med att skriva ditt namn och personnummer med bläck. Personnummer Namn (textat) Följande tabell fylls i av laborationshandledare efter godkänd laboration. Laboration Datum Godkännande av laboration Laborationshandledares underskrift Godkännande hel laborationsserie: Datum Laborationshandledares underskrift

2 Laboration 1 Översikt av laborationsserien Under laboration 1 bekantar du dig med laborationssystemet, konstruerar några enkla assemblerrutiner som du kommer att ha glädje av senare. Under laboration 2 börjar du med att konstruera ett komplett programpaket för övervakning och styrning av en liten borrmaskin. Under laboration 3 färdigställer du programpaketet för borrmaskinen, dessutom implementerar du en enklare så kallad tidsdelnings applikation ( time sharing ). Observera: Inför laboration 4 ska du ha utfört och redovisat inlämningsuppgiften Goldbach hypotes. Laboration 4 omfattar grundläggande C-programmering, du använder fält och pekare, du får också tillfälle att praktisera test, felsökning och avlusning. Under laboration 5 övas framför allt dina kunskaper i maskinnära C-programmering men även hur du kombinerar programdelar skrivna såväl i C som i assemblerspråk. Kompletterande material För laborationernas genomförande behöver du, utöver kurslitteraturen, program och diverse tekniska beskrivningar. Vid laborationerna används följande program: ETERM 6 för MC12 XCC12 för MC12 Visual Studio Följande beskrivningar finns tillgängliga på elektronisk form via kursens resurssida. Laborationskort ML4, multifunktionskort för MC12 Laborationskort ML5, gränssnitt mot tangentbord/display (ML23), för MC12 Laborationskort ML15, gränssnitt mot tangentbord/display (ML23), för MC12 Laborationskort ML23, tangentbord/display, för MC12 DBG12 monitor/debugger för MC12 Du finner allt detta på resurssidan som du når via kursens hemsida ( länkar ). 2

3 Laboration 1 Laboration nr 1 behandlar MC12 med monitor/debugger DBG12 Tangentbord som inmatningsenhet Sifferindikator som utmatningsenhet Borrmaskin som styrobjekt Laborationens huvudsakliga syften är att du ska: bekanta dig med laborationssystemet, i första hand: mikrodator MC12 och dess monitor/debugger DBG12 tangentbord ML3 sifferindikator ML2 borrmaskin förbereda de följande laborationerna genom att konstruera och testa grundläggande programrutiner för inmatning från tangentbord, utmatning till sifferindikator styrning av borrmaskinens funktion För laborationen finns speciellt följande fil tillgänglig via kursens resurssida: laddfil.s19 Laborationssystemet Följande enheter ingår i laborationsmiljön: persondator med programvaran ETERM för MC12 och XCC12 för MC12 laborationssystemet MC12 med monitor/debugger DBG12, borrmaskin, tangentbord och sifferindikatorer och olika typer av gränssnitt till dessa enheter. Under laborationerna 1,2 och 3 använder du ETERM för att redigera, assemblera och testa dina program. Under senare laborationer använder du XCC12 för att redigera, kompilera och testa dina program. 3

4 Laboration 1 Anslutningar Laborationsuppsättningen ska vara korrekt ansluten då du kommer till laborationsplatsen. Detta avsnitt sammanfattar anslutningarna. Laborationssystemet MC12 ansluts till terminalfunktionen i ETERM via persondatorns COM-port. Borrmaskinen ansluts till MC12 via en 26-polig flatkabel. Tangentbordet (ML2) respektive sifferindikatorn (ML3) kan anslutas till MC12 via två olika typer av gränssnitt, oberoende av varandra. Dessa gränssnitt kallas ML15 respektive ML5. Laborationskorten ML15 och/eller ML5 utgör den fysiska kopplingen mellan MC12 och ML2/ML3. De ansluts till MC12 via en piggy-back koppling som gör att flera laborationskort ansluts genom att dessa staplas på MC12. Laborationskortet ML19 är speciellt anpassat för laborationer med MC12 s avbrottsmekanismer. Kortet beskrivs i Arbetsbok för MC12 och i detta PM. Laborationsuppsättning: Laborationsdator med laborationskort och strömförsörjning ML19 ML5 ML15 MC12 ML2 Tangentbord ML3 Sifferindikator Laborationsdator MC12 Freescale 68HCS12 enchipsdator Anslutning externa avbrott Strömförsörjning 5 Volt Finsäkring Anslutning, 26 polig, till multifunktionskort ML4 eller borrmaskin Anslutning till seriell (RS232) port hos värddator 10 poliga kontakter (4 st.) för anslutning av laborationskort Spänningsindikator MC12 RESET 4

5 Monitor/debugger DBG12 Laboration 1 När vi ansluter MC12 till en COM-port på PC n och startar ett terminalfönster fungerar PC n som en dum terminal bestående av tangentbord och bildskärm. (ETERM = Emulera terminal = härma terminal). Allt som skrivs på PC ns tangentbord skickas direkt ner till MC12. I MC12 finns ett enkelt program som kallas monitor/debugger (DBG12). Programmet är, som namnet antyder avsett för övervakning och test. DBG12 lyssnar hela tiden på kommandon från tangentbordet bortsett från när MC12 är upptaget av något applikationsprogram. För att återgå till DBG12 i detta fall krävs RESET (omstart) av MC12. Huvudprogrammet i DBG12 är utformat som en enkel kommandotolk, där en rad olika kommandon accepteras. Läsanvisning: Läs om monitor/debugger n DBG12 Användarbeskrivning finns som länk från resurssidan : DBG12 monitor/debugger för MC12 Dispositionen av adressrummet hos MC12 bestäms av DBG12 och kan något förenklat beskrivas enligt följande: 5

6 Laboration 1 I/O Adress $0000-$0FFF Med plats för I/O-kort och interna (HCS12) portar RWM Adress $1000-$3BFF Med plats för dina program och data (applikationer) RWM Adress $3C00-$3FFF Variabelarea för DBG12 ROM Adress $4000-$FFFF Med plats för bland annat DBG12 Laborationsuppgift 1.1: Starta ETERM och anslut en terminal under fliken Debug. Tryck RESET på laborationssystemet MC12 och kontrollera att DBG12 identifierar sig genom att text skrivs till terminalfönstret. Om ingen text skrivs till skärmen eller om texten är oläslig Kontakta en handledare. Terminalfönstret bör se ungefär som följande figur. detta kallas DBG12 s prompter Den sista raden kallas för monitorns prompter och innebär att DBG12 är redo att ta emot kommandon från dig. Varje gång du trycker < ska DBG12 skriva en ny prompter till terminalen. Om så inte är fallet betyder det att DBG12 är upptagen och kanske rentav hängt sig eller spårat ur. Lösningen på detta problem är att göra RESET på MC12. Skriv: help< > DBG12 skriver ut en hjälptext. Se figuren till höger. Undersök olika kommandon genom att skriva help kommando om du vill ha hjälp för något specifikt kommando. 6

7 Laboration 1 Kommandot display memory (dm) Undersök nu minnesinnehållen i de olika minnesområden vi har i systemet. Skriv: dm 0> för att studera adressområdet där vi har in-och utenheter. Skriv: dm 1000 för att studera adressområdet där du kan placera dina program. Skriv: dm E000 för att studera adressområdet där vi har PROM (FLASH). Adressangivelsen anges till vänster, minnesinnehåll i mitten och till höger tolkas minnesinnehållet som ASCII-koder. Kommandot modify memory (mm) Använd nu kommandot mm för att försöka ändra minnesinnehåll på några olika ställen i MC12 s adressrum. Ge kommandot: mm 1000 för att visa och ha möjlighet att ändra minnesinnehållet på adress Tryck ett par gånger. Har du samma minnesinnehåll som i figuren till höger? Tryck på + (plus) för att visa minnesinnehållet på nästa adress. Tryck på + på nytt och ändra minnesinnehållet på adress 1002 till 55 genom att skriva 55. Prova även (minus) tangenten. Vilka två sätt kan du använda för att avsluta mm-kommandot och återgå till monitorns prompter? Kan du ändra minnesinnehållet på adress 4000? Prova att ändra ytterligare några minnesinnehåll inom adressintervallet 4000-FFFF. Kan du förklara vad som händer? 7

8 Laboration 1 Kommandot load application program (l) Kommandot disassemble (dasm) Kommandot run application program (go) ETERM s terminalprogram har behändiga funktioner för att underlätta kommunikation mellan värddator och laborationsdator. Du kan läsa om sådana funktioner i ETERM s hjälpsystem. På kursens resurssida, finns en laddfil.s19 som du ska använda under nästa laborationsmoment. Filen innehåller såväl program som data. Din uppgift är att undersöka detta program. Laborationsuppgift 1.2: Spara filen laddfil.s19 i din arbetskatalog. Ladda laddfil.s19 till MC12 (högerklicka i terminalfönstret). Disasssemblera, dvs. översätt från maskinkod till assemblerkod, genom att använda DBG12 s dasm-kommando. Komplettera tabellen till vänster. Analysera programmet och komplettera flödesdiagrammet till höger. Adress Instruktion Operand 1000 LDX #$ E JMP $C00F 101B RTS Utför nu programmet, starta med: go Följ programmets instruktion och skriv ditt svar här: 8

9 Laboration 1 Inmatning från tangentbord I detta avsnitt använder vi tangentbordet ML2 tillsammans med gränssnittet ML15. Läsanvisning: Läs översiktligt om gränssnittet till tangentbord och sifferindikator i Teknisk beskrivning ML15 finns som länk från resurssidan : Laborationskort ML15, gränssnitt mot tangentbord/display (ML23), för MC12 Läs om hur du skriver program för tangentbordet i Arbetsbok för MC12, sidorna Studera speciellt uppgifterna 39 och 40. Laborationsuppgift 1.3: Du ska nu undersöka tangentbordet ML2/ML15. Använd mm-kommandot. ML15 s avkodning av tangentbordet, dvs. den kod som placeras i registret på adress $9C0, beroende på vilken tangent som tryckts ned, illustreras av följande figur: a b c d Prova nu samtliga tangenter och komplettera nedanstående tabell. Observera vad du läser från tangentbordet när ingen tangent är e f g h nedtryckt. Har föregående tangent-nedtryckning i j k l någon betydelse för avläsningen? m n o p Nedtryckt tangent Avläst värde Nedtryckt tangent Avläst värde a i b j c k d l e m f n g o h p Vi övergår nu till inledande programutveckling i assemblerspråk. För att underlätta test av ett assemblerprogram introducerar vi ytterligare ett av DBG12 s kommandon: Kommandot step (trace) application program (tr) 9

10 Laboration 1 Laborationsuppgift 1.4: Lös uppgift 41 i Arbetsbok för MC12, dvs. skriv tangentbordsrutinen CheckKbdML15 Skriv nu följande huvudprogram, avsett för att testa tangentbordsrutinen: ORG $1000 NOP ; Börja med nop, enklare att köra trace main: JSR CheckKbdML15 ; Läs tangentbord BRA main CheckKbdML15: din tangentbordsrutin Den inledande NOP instruktionen (No Operation) finns här enbart för att underlätta testproceduren. Vi använder TRACE-kommandot och detta fungerar så att den angivna instruktionen utförs, därefter återförs kontrollen till DBG12 och du kan inspektera/ändra register/minnes- innehåll etc. Du ska nu övertyga dig om att subrutinen CheckKbdML15 fungerar som den ska. Redigera och assemblera huvudprogram och subrutin, rätta eventuella fel. Ladda ner programmet till MC12. Ge kommandot tr 1000 för att utföra programmets första instruktion. Utför programmet instruktionsvis, kontrollera programflödet, tryck ned någon tangent på ML2, under vilken instruktions exekvering bör tangenten hållas ned? Vi fortsätter nu att praktisera test och felsökning i assemblerprogram. En viktig metod är att sätta så kallade brytpunkter på väl valda ställen i programmet. För detta kan du använda DBG12 s brytpunktshantering. Kommandot breakpoints (bp) Laborationsuppgift 1.5: Lös uppgift 42 i Arbetsbok för MC12, använd följande huvudprogram för att anropa subrutinen GetKbdML15. ORG $1000 main: JSR GetKbdML15 NOP ; Sätt brytpunkt HÄR BRA main CheckKbdML15: din tangentbordsrutin Assemblera och rätta eventuella fel, ladda sedan ned programmet till MC12. Bestäm adressen för NOP-instruktionen och sätt en brytpunkt på denna adress. starta programmet med go 1000, tryck ned någon tangent på ML2, programmet ska nu stanna vid brytpunkten, vilket meddelande får du från DBG12? 10

11 Laboration 1 Utmatning till sifferindikator I detta avsnitt använder vi sifferindikatorn ML3 tillsammans med gränssnittet ML15. Läsanvisning: Läs översiktligt om gränssnittet till tangentbord och sifferindikator i Teknisk beskrivning ML15 finns som länk från resurssidan : Laborationskort ML15, gränssnitt mot tangentbord/display (ML23), för MC12 Läs om hur du skriver program för sifferindikatorn i Arbetsbok för MC12, sidorna 29 och 30. Studera speciellt uppgift 43. I nästa uppgift kommer vi att använda oss av: Kommandot display/modify registers (reg) Laborationsuppgift 1.6: Du ska undersöka hårdvaran ML3/ML15. För detta använder du en enkel instruktionssekvens för initiering/visning: ORG $1000 LDAA #1 STAA $9C2 LDAA #$D0 STAA $9C3 LDAA #0 STAA $9C2 LDAA #8 loop: ; Placera lämpligt värde i ackumulator B innan instruktionen utförs STAB $9C3 DECA BNE loop end: BRA end Redigera, assemblera programsekvensen ovan. Ladda till MC12. Programmet ska utföras instruktionsvis ( tr 1000 osv.) Omedelbart innan instruktionen STAB $9C3 utförs ska du placera lämpligt värde i register B med kommandot reg B värde. Sifferindikatorn har bara 6 positioner, kan alltså bara visa 6 siffror men trots detta måste en sekvens om 8 siffror ges till adress $9C3 för att indikatorerna ska tändas. Är det de 6 första, eller de 6 sista siffrorna i sekvensen som visas på sifferindikatorn? Lös slutligen uppgift 43 (DisplayML15) i Arbetsbok för MC12. Kontrollera att DisplayML15 fungerar med MC12. 11

12 Laboration 1 Laborationsuppgift 1.7: Konstruera nu en subrutin Echo, enligt följande specifikation: ; Subrutin Echo ; Väntar på ny tangentnedtryckning ; Visar därefter tangentkod för senast nedtryckta tangent på ML2 som ; hexadecimala tecken på samtliga sifferindikatorer på ML3 ; Skriv nu följande huvudprogram, avsett för att testa utmatningsrutinen: ORG $1000 main: JSR Echo ; Läs tangentbord, skriv till display BRA main Echo: använder dina rutiner CheckKbdML15 och DisplayML15 Redigera, assemblera, rätta eventuella fel. Ladda programmet till MC12 för att testa Echo. Starta programmet, go 1000, testa rutinen för alla möjliga tangentnedtryckningar och verifiera korrekt funktion. Styrobjekt borrmaskin Huvuddelen av de fortsatta laborationsmomenten i maskinorienterad programmering, såväl då det gäller programutveckling i assemblerspråk, som programmering i maskinnära C kommer att inbegripa styrobjektet borrmaskin. Vi ska därför redan nu bekanta oss med denna laborationsutrustning så att framtida laborationsförberedelser (med hjälp av simulatorer) kan förstås mot bakgrund av den hårdvara som används under laborationerna. Läsanvisning: Läs om borrmaskinen på sidorna 49 och 50 i Arbetsbok för MC12. Du kan också studera avsnittet om borrmaskinen i ETERM s hjälpsystem. 12

13 Laboration 1 Laborationsuppgift 1.8: Studera borrmaskinen på laborationsplatsen framför dig. Vänd maskinen så att du ser ljusdioderna. Undersök hårdvaran med hjälp av följande programsekvens (Jämför med uppgifterna 71 och 72 i arbetsboken): ORG $1000 Loop NOP ; Ge indata till register A STAA $400 ; Skriv till borrmaskinen LDAB $600 ; Läs statusregistret BRA Loop Stega genom programmet med trace när du undersöker borrmaskinen. Vid NOP-instruktionen kan du använda reg-kommandot för att placera lämpligt värde i register A. Testa att starta borret och sänka det. Observera lysdioderna på borrmaskinen. Gröna lysdioder är statusregistret och gula är styrregistret. Observera att bit 3-7 i statusregistret inte är definierade och kan anta vilka värden som helst. Vrid även på arbetsstycket för att ställa detta i referensposition och observera att lysdioden på borrmaskinen aktiveras och att du läser status till register B. Tryck RESET på MC12. Studera lysdioderna (statusregistret) på borrmaskinen och pressa ner borret för hand till bottenläge. Observera hur statusbitarna ändras. (Kanske är tryckfjädern som lyfter borret lite klen lyft borret upp i så fall) Sammanfattning av laboration 1 Du ha undersökt och provat hårdvara: laborationssystemet MC12 med DBG12 I/O-enheter ML2, ML3, med gränssnitt ML15 och styrobjekt borrmaskin Du har konstruerat och testat programdelar som ska användas i kommande laborationer: Inmatning från tangentbord Utmatning till sifferindikator Laboration 1 har inte ställt större krav på dig med avseende på dina laborationsförberedelser. För de båda nästkommande laborationerna är det precis tvärtom, du kommer inte att hinna med dom utan att ha ägnat mycket tid åt de omfattande förberedelser som krävs. Om du har du tid över och vill, kan du nu direkt fortsätta med att förbereda och genomföra laboration 2. 13

14 Laboration nr 2 behandlar Laboration 2 Första delen av styrning/övervakning av en borrmaskin Följande uppgifter ur Arbetsbok för MC12 ska vara utförda innan laborationen påbörjas. Du ska på begäran av laborationshandledare redovisa dessa. Uppg Sign. Följande hemuppgift ska vara utförd innan laborationen påbörjas. Hem- Uppgift 2.1 Följande laborationsuppgift ur denna del av laborations-pm skall redovisas för en handledare för godkännande under laborationen. Laborationsuppgift Sign. 2.3 Läsanvisning och hemuppgift 2.1: Laborationen förutsätter att du arbetat igenom avsnitt 4, (sidorna 49-60) i Arbetsbok för MC12. Laborationen kräver att du gjort de obligatoriska uppgifterna För att underlätta utförande av de obligatoriska uppgifterna bör du dessutom ha utfört uppgifter Var speciellt uppmärksam på att mindre detaljer (adresser) kan skilja sig mellan simulatoranvändning och laborationen, se tipsen nedan. Tips inför laborationen Det finns några skillnader mellan borrmaskinen i simulatorn och laborationssystemets borrmaskin som visserligen verkar små men har stor praktisk betydelse. Här får du några tips som kan hjälpa dig åtskilligt då du kommer till laborationsplatsen. Adresser: Tänk på att simulatorns register mot borrmaskinen är konsekutiva (typiskt använder du här adresserna och ). I laborationssystemet motsvaras i simulatorn i stället av adress För att minska risken för bortkastad felsökningstid i laborationslokalen kan du införa en villkorlig assembleringssats i filen Labdefs.s12, exempelvis enligt: #ifdef SIMULATOR DrillStatus EQU $401 #else DrillStatus EQU $600 #endif I ditt huvudprogram, innan filen Labdefs.s12 inkluderas, kan du definiera #define SIMULATOR när du kommer till laborationen kommenterar du bort detta på följande sätt: ; #define SIMULATOR Vi har en liknande problematik då det gäller fördröjningssekvensen i subrutinen Delay, som du ska ha gjort som ett led i förberedelserna. 14

15 Laboration 2 Laborationsuppgift 2.1: Du har tidigare (i arbetsbokens första avsnitt) experimentellt bestämt fördröjningskonstanter för den simulerade miljön och ska nu bestämma fördröjningskonstanten i laborationsdatorn med liknande metod, använd följande programsekvens för dina tidsuppskattningar: DelayConst: EQU ORG??? $1000 Start: CLRA DELAY: LDX #DelayConst NEXT: LEAX -1,X LDY #100 NEXT2: LEAY -1,Y CPY #0 BNE NEXT2 CPX #0 BNE NEXT COMA STAA $400 BRA DELAY Anslut ML4 till laborationsdatorn, kontrollera att sektionen Parallel Output är kopplad på kortet. Gör ett antal praktiska försök, dvs. prova olika värden på DelayConst så att ljusdioderna tänds och släcks en gång per sekund (en sekund mellan varje tändning), då du tycker noggrannheten är tillräcklig har du bestämt fördröjningskonstanten för 500 ms fördröjning, dividera den därför med 2 och du har den fördröjningskonstant (250 ms) som ska användas av Delay i laborationssystemet. Redigera den villkorliga assembleringssatsen i Labdefs.s12 enligt följande: #ifdef SIMULATOR #ifdef RUNFAST DelayConst EQU xx ; har du bestämt under förberedelserna #else DelayConst EQU yy ; har du bestämt under förberedelserna #endif #else DelayConst EQU zz ; din konstant för laborationssystemet #endif Koppla slutligen ur den 26-poliga flatkabeln från ML4 och anslut den till borrmaskinen. Laborationsuppgift 2.2: Du skall nu arbeta med filen Main.s12 från de obligatoriska uppgifterna i arbetsboken. Kontrollera att du använder rätt I/O-adresser. Lägg till en NOP-instruktion direkt efter ORG $1000 för att få en bättre utskrift på skärmen när du kör trace. Assemblera och rätta eventuella fel. Ladda programmet till MC12 genom att högerklicka i terminalfönstret och välja filnamn. 15

16 Laboration 2 Undersökning av programmet i MC12. Maskinprogrammet är nu laddat till MC12. Öppna listfilen Main.lst och ha denna tillgänglig på skärmen framför dig. Kontrollera nu att programmet är placerat i minnet på MC12 genom att utnyttja monitorns disassembleringskommando. Skriv dasm Jämför det du ser på skärmen med listfilen. Leta upp startadressen för subrutinen COMMAND i listfilen och använd dasm-kommandot på nytt för denna adress. Troligen ser de dissassemblerade instruktionerna efter RTSinstruktionen konstiga ut. Kan du förklara varför? Adresserna till subrutinerna som används för att styra borrmaskinen ligger i en tabell i minnet med begynnelseadressen JUMPTAB. Eftersom adresserna är 16 bitar breda krävs det 2 st. minnesord för att rymma varje adress. Adresserna lagras på standardformat med den mest signifikanta byten på minnesadressen med lägst värde. Använd mm-kommandot för att studera JUMPTAB i minnet och jämför dessa startadresser med vad du erhöll med dasm-kommandot ovan. Diskutera med en handledare (nu eller sedan) om du är osäker. Studera listfilen och identifiera startadresser (med start på JUMPTAB) för de subrutiner du implementerat. Använd därefter dasm-kommandot och verifiera att tabellen verkligen innehåller startadresser till dina subrutiner. Test av huvudprogrammet main Du ska nu använda brytpunkter för att verifiera huvudprogrammet. Se följande utdrag av huvudprogrammet i Main.s12. Lägg till en NOP instruktion efter anropet av tangentbordsrutinen och före anrop av kommandotolken. Assemblera och rätta eventuella fel i programmet. Studera därefter listfilen och undersök vilken adress NOP-instruktionen i huvudprogrammet är placerad på, sätt en brytpunkt på denna adress. ; Main.s12 ; Operatörsstyrd borrautomat ; Definitioner USE Labdefs.s12 ORG $1000 main: --- Initiera borrmaskin ; Huvudprogram, invänta vald operation main_loop: JSR CheckKbdML15 * Tangentkod nu i register B... * Utför vald operation NOP JSR Command BRA main_loop Starta nu programmet med go

17 Laboration 2 Tryck ner tangent med kod 7 (ej implementerad Auto-funktion), efter det att du tryckt ner tangenten på tangentbordet ska programmet stanna vid brytpunkten och DBG12 ger en utskrift till skärmen. Om dette INTE händer, tryck RESET på MC12 och starta om programmet med instruktionsvis exekvering tr 1000, tr osv, kontrollera tangentborsrutin och rätta fel. Vid brytpunkten, kontrollera innehållet i register B, det valda kommandonumret (7). Ge kommandot go för att nu testa tangent med kod 0 (starta borrmotor), fortsätt från brytpunkt med instruktionsvis exekvering (tr), försök även följa med i listfilen, kontrollera att borrmaskinens motor startar. (Kontrollera ev. strömbrytaren till borrmotorn). Med detta har du kontrollerat att huvudprogrammet fungerar som det ska och det återstår nu att även kontrollera de implementerade funktionerna. Laborationsuppgift 2.3: Test av implementerade subrutiner Du ska nu systematiskt testa de fyra första subrutinerna. Då du övertygat dig om att en subrutin fungerar korrekt fyller du i kontrollkolumnen i följande tabell. Glöm inte att även testa Alarmfunktionen, detta gör du i samband med test av subrutinen Step. tangent kod Operation subrutin kontroll 0 starta borrmotorn MotorStart 1 stoppa borrmotorn MotorStop 2 sänk borret DrillDown 3 höj borret DrillUp 4 rotera arbetsstycket Step medurs ett steg 5 borra ett hål DrillHole 6 stega arbetsstycket till RefPos referensposition 7 borra hål längs cirkeln enligt mönster DoAuto Tänk på att fördröjningsrutinen nu ska vara anpassad till den verkliga miljön och inte den simulerade. Tryck RESET på MC12, ta bort eventuella brytpunkter och starta programmet, go Kontrollera de fyra olika funktionerna. Rätta eventuella fel, spara alla dina filer och visa upp resultatet för en handledare. Du har nu använt olika monitorkommandon för felsökning och test verifierat att ditt huvudprogram för borrmaskinen fungerar korrekt testat de första funktionerna till den operatörsstyrda borrmaskinen ett fungerande programskal som du enkelt kan lägga till subrutiner för de övriga funktionerna hos borrmaskinen. 17

18 Laboration 3 Laboration nr 3 behandlar Färdigställning av program för operatörsstyrd borrmaskin Pseudoparallell exekvering Följande uppgifter ur Arbetsbok för MC12 ska vara utförda innan laborationen påbörjas. Du ska på begäran av laborationshandledare redovisa dessa. Uppg Sign. Följande hemuppgifter ska vara utförda innan laborationen påbörjas. Hem- Uppgift Följande laborationsuppgift ur denna del av laborations-pm skall utföras och redovisas för en handledare för godkännande. Laborationsuppgift Sign Läsanvisningar: Laborationen förutsätter att du arbetat igenom återstoden av avsnitt 4, sidorna 60-62, i Arbetsbok för MC12 samt, Introduktion till avbrott, i avsnitt 3, sidorna Utöver obligatoriska uppgifter i arbetsboken ska du dessutom, ha löst hemuppgifter ( ) som bara finns i detta PM. Övrigt: Subrutinen DISPLAY som ska användas i laborationsuppgift 3.3 finns färdig (Display_ML5.s12), hämta den från resurssidan. 18

19 Laboration 3 Hemuppgift 3.1: Utför uppgifter i Arbetsbok för MC12. Testa alla rutiner i simulatorn och verifiera korrekt funktion enligt specifikationerna. Laborationsuppgift 3.1: Kontrollera funktionen hos återstående funktioner DrillHole, RefPos och Auto i MC12. tangent kod Operation subrutin kontroll 0 starta borrmotorn MotorStart 1 stoppa borrmotorn MotorStop 2 sänk borret DrillDown 3 höj borret DrillUp 4 rotera arbetsstycket Step medurs ett steg 5 borra ett hål DrillHole 6 stega arbetsstycket till RefPos referensposition 7 borra hål längs cirkeln enligt mönster DoAuto Rätta eventuella fel, spara alla dina filer och visa upp resultatet för en handledare. Hemuppgift 3.2: Läs om ML19 (I/O-simulator) under ETERM s hjälp-meny. Utför uppgifterna 65, 66 och 67 i arbetsboken. Dessa illustrerar avbrott i ett MC12-system. Laborationsuppgift 3.2: Studera komponenttrycket (vita texter och figurer) på ML19 och jämför med bilden i I/Osimulatorn. Du har två tryckknappar, S1 och S2, på ML19 som motsvarar Event1 och Event2 hos I/O-simulatorn. Du kan själv lista ut ljusdiodernas funktion när du fortsätter denna laborationsuppgift. Tryck på S1 och på S2. Om lysdioderna på ML19 var släckta från början tänds dessa nu. Avbrotten var/är aktiverade och avbrottsvipporna var/är ettställda. För att kvittera ett avbrott, gör en skrivning med mm-kommandot på adress DC2 16 och därefter en skrivning på adress DC3 16. Avbrottsvipporna nollställs oberoende av vilket värde du skriver och ljusdioderna släcks. Gör en läsning på adress DC0 16 som är ML19 s statusregister. Detta skall nu vara nollställt. Studera ljusdioderna på ML19 och tryck på S1. Gör därefter en ny läsning av statusregistret och verifiera att b 0 är ettställd. Studera ljusdioderna på nytt och tryck på S2. Gör därefter ännu en läsning av statusregistret och verifiera att b 1 också är ettställd. 19

20 Laboration 3 Ett teoriavsnitt: Parallell programexekvering. Den sista uppgiften under denna laboration är att utföra borrprogrammet och displayrutinen på MC12 så att det verkar som att dessa körs "samtidigt", de körs pseudoparallellt. Vi inför ett avbrottsdrivet system där processorn växelvis styr det ena och sedan det andra programmet. Växlingen går så snabbt att användaren upplever att de styrs parallellt. Programväxlingen sker med avbrottsrutinen SWITCH. Programmen BORR (Laborationsuppgift 3.1) och DISPLAY (Display_ML5.s12) och dess dataareor skall placeras i minnet enligt Figur 3.1. BORR har sin dataarea med tillhörande stack och DISPLAY har sin dataarea med tillhörande stack. På laborationskortet ML19 finns en klockgenerator med frekvensen 400 Hz. Denna används för att generera avbrott till processorn. Detta innebär att avbrott sker var 2,5 ms. Varje gång avbrott sker startas avbrottsrutinen (SWITCH) som växlar program. Vi kallar detta processbyte. Tidigare har vi haft ett huvudprogram som blivit avbrutet. Exekvering av huvudprogrammet har återupptagits när avbrottsrutinen är slutförd, se Figur 3.2. Du bör vara väl bekant med vad som sker vid ett avbrott, nämligen: huvudprogrammets status sparas på stacken (avbrotts-) servicerutinen startar och betjänar avbrottet orsaken till avbrott avlägsnas huvudprogrammets status återhämtas från stacken återhopp till huvudprogrammet När vi nu har två (huvud-) program så ändras förutsättningarna. Figur 3.3 visar hur programmet BORR exekverar. När ett avbrott inträffar startas avbrottsrutinen i vanlig ordning. Först sparas BORR:s status på stacken. Adr Avbrotts -signal HC12 Regs IO-Portar INIT och SWITCH BORR Dataarea B DISPLAY Dataarea D Ledigt RWM ROM (DBG12 Monitor) BORR Figur 3.1 Figur 3.2 SWITCH DISPLAY Avbrottsrutinens uppgift är "frysa" BORR och starta DISPLAY. Avbrottsrutinen avslutas som bekant med ett återhopp till huvudprogrammet (RTI). Detta innebär att avbrottsrutinens uppgift är att förbereda för ett återhopp till DISPLAY i stället för BORR. Man kan enklast göra detta genom att ändra stackpekaren så att denna pekar ut DISPLAY s stack, på så sätt återupptas exekveringen av DISPLAY vid då RTI-instruktionen utförs. När nästa avbrott inträffar skall en liknande händelse inträffa. Nu är det DISPLAY som skall "frysas" och exekvering av BORR som skall återupptas (Figur 3.4). På detta sätt kommer programmen att utföras växelvis. Eftersom växlingen sker 400 ggr per sekund upplevs detta som att programmen körs "samtidigt" (pseudoparallellt). BORR Figur 3.3 DISPLAY SWITCH Figur 3.4 Huvudprogram Avbrottsrutin Avbrottssignal Avbrottssignal 20

21 Laboration 3 Studera nu Figur 3.5. Tiden som SWITCH upptar kan du bortse från i detta sammanhang. BORR och DISPLAY exekveras ca 2,5 ms vardera. I vår miljö definierar vi det program som för tillfället exekveras av processorn att vara i tillståndet RUNNING. Det program som inte exekveras och är redo att startas om på nytt, säger vi är i tillståndet READY. Så alltså när BORR är i tillstånd RUNNING så är DISPLAY i tillstånd READY och vice versa. BORR DISPLAY RUNNING READY READY RUNNING SWITCH 2,5 ms 2,5ms 2,5ms Figur 3.5 Observera att vid avbrott så startas SWITCH och vid utförande av RTI så startas det program som var READY. IRQ BORR DISPLAY SWITCH 2,5 ms 2,5ms 2,5ms RTI Figur 3.6 Vi sammanställer här vad som skall ske i SWITCH: BORR avbryts: DISPLAY avbryts: BORR s status placeras på stacken DISPLAY s status placeras på stacken BORR s stackpekare skall sparas DISPLAY s stackpekare skall sparas DISPLAY s stackpekare till SP BORR s stackpekare till SP Orsaken till avbrottet måste avlägsnas (nollställa avbrottsvippan) Slutligen, RTI Hemuppgift 3.3: Skriv en avbrottshanterare SWITCH som byter stackpekare mellan BORR och DISPLAY. Spara SWITCH under filnamnet MainStart.s12. Ta tills vidare inte hänsyn till hur alltsammans startas första gången, fokusera på hur själva processbytet utförs. Du behöver inte assemblera filen. Vi skall strax lägga till rutinen INIT som gör att hela systemet startar. 21

22 Laboration 3 Hur startas detta första gången? Det krävs en rutin INIT som initierar systemet så att avbrott registreras och att de två processerna startas korrekt första gången de sätts i tillståndet RUNNING. Vi förutsätter att efter att INIT körts så startas BORR som första process. BORR startas lämpligen första gången med en vanlig JMP till BORR s startadress efter det att INIT har har utförts. DISPLAY startas via en RTI-instruktion efter det att SWITCH körts första gången. Detta innebär att stacken till DISPLAY måste förberedas innan det första avbrottet inträffar. Utseendet av DISPLAY s stack vid första RTI illustreras i Figur 3.7. När RTI utförs hämtas hela processorns status (alla register hämtas från stacken). Den initiala stacken för DISPLAY måste alltså byggas upp av INIT. Använd följande programskal för MainStart: ; Filen MainStart.s12 USE Labdefs.s12 ORG $1000 NOP JSR INIT JMP BORR INIT:... RTS SWITCH:...(hemuppgift 3.3) RTI USE USE Borr.s12 Display_ML5.s12 CC som BORR läser in måste ha sin I-flagga nollställd för att kunna bli avbrutet Återhoppsadressen måste vara DISPLAY s startadress BOS-9 BOS Figur 3.7 CC B A X H X L Y H Y L PC H PC L Hemuppgift 3.4: Implementera initieringsrutinen INIT i filen MainStart.s12, se ovan. Rutinen skall: skapa en initial stack för DISPLAY (BORR kan använda samma stack som huvudprogrammet). initiera systemet, så att det accepterar avbrott och så att SWITCH korrekt kan byta stackpekare vid första avbrottet. Kopiera Main.s12 till Borr.s12 jobba vidare med denna fil. Ändra programmets startadress till Kopiera Display_ML5.s12 och jobba vidare med denna fil. Ändra programmets startadress till Assemblera MainStart.s12 och rätta eventuella fel. Kontrollera listfilen och försäkra dig om att programmen inte överlappar varandra i minnet. Om så är fallet kan du behöva ändra ORG-direktiven i Borr.s12 och Display_ML5.s12. 22

23 Laboration 3 Att testa programmen i simulatorn. I den simulerade miljön är svårt att behandla snabba processbyten (400 processbyten per sekund) och dessutom omöjligt att följa händelseförloppet. Därför är det lämpligt att under simuleringsarbetet utnyttja en av de avbrottsvippor som finns tillgängliga i IO-simulatorn. (Figur 3.8). Genom att ersätta pulsgeneratorn med knapptryckningar (klicka på Event-knappen Figur 3.8 i I/O-simulatorn) bestämmer du när SWITCH skall starta. Du kan därför lugnt studera händelseförloppet när du själv klickar i fönstret för avbrottsvippan. BORR kommer att stanna, SWITCH utför processbytet och DISPLAY startas. Hemuppgift 3.5: När du testar nu kan det vara lämpligt att använda Run Fast, brytpunkter och Step. Se till att du har rätt konstanter för dina fördröjningsrutiner. Ladda MainStart till simulatorn. Sätt följande brytpunkter: En i SWITCH (Studera listfilen för aktuell adress) En i BORR Och en i DISPLAY Aktivera sedan de I/O-simulatorer du behöver under simuleringen, dvs. en avbrottsvippa, en borrmaskin, ett tangentbord (Interface ML15) och en sifferindikator (Interface ML5). Starta nu programmet MainStart och verifiera att du stannar på brytpunkten i BORR. Kontrollera att I-flaggan i CC-registret är nollställd. Klicka nu på Run för att starta BORR. Undersök några funktioner hos borrmaskinen och se att denna fungerar som tänkt. Välj nu att generera ett avbrott genom att klicka på Event 1 på avbrottsvippan. Du bör nu stanna på brytpunkten i SWITCH. Om så inte är fallet bör du kontrollera avbrottsvektorn, så att inte den är fel. Håll även uppsikt på simulatorns Interrupt -fält. Stega fram efter att ha stannat vid brytpunkten. Observera speciellt vad som händer när RTI utförs. Du bör efter RTI-instruktionen ha kommit till början av DISPLAY. Här ska det också finnas en brytpunkt, kontrollera adressen i PC. Om processväxlingen inte sker på rätt sätt, starta om på nytt och studera innehållet i register S just före RTI-instruktionen. Pekar S på CC-registret som skall finnas överst på DISPLAY s stack? Utför RTI-instruktionen, vad hamnar i PC? Är detta rimligt? Rätta eventuella fel. När SWITCH fungerar ta då bort brytpunkterna, och starta exempelvis REFPO eller AUTO på borrmaskinen. Klicka sedan på Event1 för att växla process och starta DISPLAY. Du kan nu klicka på Event1 upprepade gånger för att övertyga dig om att programmet fungerar korrekt - att BORR och DISPLAY s arbeten fortsätter växelvis då du klickar på Event-knappen. $0000 $1000 $1500 $2000 $4000 HC12 Regs IO-Portar INIT SWITCH BORR Dataarea B DISPLAY Dataarea D Ledigt RWM ROM (DBG12 Monitor) Figur

24 Laboration 3 Vid simuleringen växlar du program med Event1-knappen. I laborationssystemet har vi en pulsgenerator som är ansluten till processorns avbrottsingång. Se Figur Pulsgenerator 400 Hz CS vid skrivning 1 1D C1 R Q' Till processorns IRQ Figur 3.10 Att generera 400 avbrott per sekund har vi tyvärr inte möjlighet till i vår simulerade miljö så vi får nöja oss med den verifiering vi genomfört ovan och testa våra program BORR och DISPLAY på ett verkligt system i laborationsmiljö i stället. Laborationsuppgift 3.3: Modifiera eventuellt konstanterna i din programvara så att det fungerar i hårdvaran. Kontrollera att du använder avbrottsvektorn $3FF2 Ladda och testa din MainStart.s12 på hårdvaran. Testa programmen i hårdvaran på samma sätt som du gjorde tidigare i simulatorn. Sätt brytpunkter i BORR och DISPLAY. Verifiera att programmet stoppas vid dessa brytpunkter när du trycker på S1. Se till att hela programpaketet fungerar. Ett bra visuellt sätt att se programväxlingen är att starta upp REFPO för borrmaskinen när du trycker på S1. Det ser då ut som borrmaskinen dör och DISPLAY startas upp när du trycker på S1. Då du gör ännu ett tryck på S1 verkar det som DISPLAY dör och borrmaskinen fortsätter. Ge ett antal tryck på S1 och studera förloppet. När du känner dig nöjd, kontakta då en handledare som hjälper dig att växla till pulsgeneratorn så att du får ca 400 avbrott i sekunden. Testa rutinen REFPO, går denna långsammare än tidigare? Studera även DISPLAY. Verkar det som om denna blinkar på ett annat sätt nu än vad den gjorde i förra labbet? Diskutera resultatet med din labbkompis, försök förklara vad som sker. Visa upp resultatet och redogör för era slutsatser för en handledare. Du har nu Färdigställt ett operatörsstyrt (interaktivt) program i assemblerspråk. Programmet realiserar en rad funktioner som krävs för att styra en borrmaskin. Under laboration 5 ska du realisera samma funktioner men då genom att använda programspråket 'C'. Implementerat ett tidsdelningssystem i miniatyr, där du kört två program "samtidigt" (två processer) med endast en CPU. Metoden kan enkelt utvidgas till attt omfatta flera processer. Den här typen av tidsdelning är grundläggande för alla operativsystem bestyckade med enkelprocessorer. 24

25 Laboration nr 4 behandlar Följande hemuppgift ska vara utförd innan laborationen påbörjas. Laboration 4 C-programmering Morsealfabetet Hem- Uppgift 4.1 Följande laborationsuppgifter ur denna del av laborations-pm skall utföras och redovisas för en handledare för godkännande. Laborationsuppgift Sign I denna laboration får du konstruera och köra ett par C-program. Du utnyttjar standardfunktioner för att läsa och skriva data. Dessutom får du träna på att använda fält och pekare. Godkännande När de båda programmen fungerar skall de visas upp för en handledare för godkännande. För att laborationen skall bli godkänd räcker det inte med att programmen fungerar. De måste också vara skrivna på ett snyggt och begripligt sätt. Programraderna skall t.ex. indenteras (dras in) på det sätt som lärs ut i kursen. Programmeringsmiljö Du kan använda en vanlig enkel texteditor för att redigera programmen. Kommandon för att kompilera och köra programmen skall i så fall ges i ett vanligt kommandofönster (Kommandotolken i Windows). Men om du vill kan du använda en lite mer avancerad programutvecklingsmiljö som t.ex. Visual Studio. Du behöver i så fall, för denna laboration, inte skapa något projekt eftersom varje program du skall konstruera bara består av en enda fil. Hemuppgift 4.1: Läs noga igenom laborationsuppgifterna 4.1 och 4.2 så att du förstår vad du skall göra och hur problemen skall lösas. Gör en skiss av hur programmen skall se ut och försök att skriva programkoden i förväg, innan laborationstillfället. 25

26 Laboration 4 Laborationsppgift 4.1. Översätta till morsekod Morsealfabetet visas i följande tabell, där punkter och minustecken används för att beteckna korta respektive långa signaler. A.- B -... C -.-. D -.. E. F..-. G --. H... I.. J.--- K -.- L.-.. M -- N -. O --- P.--. Q --.- R.-. S... T - U..- V...- W.-- X -..- Y -.-- Z --.. Uppgiften är att konstruera ett program som läser in ett meddelande och översätter detta till morsekod. När programmet körs skall meddelandet skrivas in på en enda rad. Utskriften från programmet skall bestå av punkter och minustecken. För att man skall kunna se var olika bokstäver och ord börjar och slutar skall det i utskriften finnas ett blankt tecken (mellanslag) mellan varje bokstav och ett tabulatortecken mellan varje ord. Det kan se ut på följande sätt: Ha en bra dag (Den andra raden har skrivits ut av programmet.) Steg 1. För att översätta bokstäver till morsekod skall du i ditt program använda dig av en tabell, dvs. ett fält. Deklarera och initiera ett sådant fält! Elementen i fältet skall vara textsträngar som innehåller följder av punkter och minustecken. Varje element i fältet skall motsvara en bokstav. Elementet för bokstaven C skall t.ex. innehålla textsträngen "-.-.". Steg 2. int bokst_nr( char c ); Meningen är förstås att man sedan för varje bokstav i meddelandet skall kunna slå upp morsekoden i tabellen. För att kunna göra detta måste man veta bokstavens nummer i alfabetet. Skriv därför en funktion bokst_nr som räknar ut numret för en viss bokstav! Funktionen skall ha en parameter c av typen char. Som resultat skall funktionen ge ett heltal. Om parametern c innehåller en bokstav skall heltalet vara bokstavens nummer i alfabetet. Börja numreringen från noll. A är alltså bokstav nummer noll och Z bokstav nummer 25. Om parametern c inte innehåller en bokstav skall funktionen som resultat ge värdet -1. Din funktion skall klara av både små och stora bokstäver. Funktionen måste vara smart och utnyttja att LATIN_1-koderna för bokstäverna A-Z ligger i en följd. Du får alltså inte göra upprepade tester som t.ex. if (c == a c == A ) return 0; else if (c == b c == B ) return 1; etc. Steg 3. char * till_morse( char c ); Skriv en funktion med namnet till_morse som översätter ett tecken till morsekod! Detta är enkelt när nu översättningstabellen och funktionen bokst_nr är klara. Funktionen till_morse skall ha en parameter av typen char och som resultat skall den ge en textsträng, dvs. ett värde av typen char *. Om parametern innehåller en bokstav skall funktionen som resultat ge motsvarande morsekod, annars skall den ge en tom textsträng, dvs. värdet "". 26

27 Laboration 4 Steg 4. Skriv funktionen main! Denna skall först läsa in en hel rad från tangentbordet och lägga de inlästa tecknen i ett teckenfält med namnet rad. Detta görs enklast med hjälp av standardfunktionen gets. Därefter skall main löpa igenom de inlästa tecknen ett och ett. Denna genomlöpning måste du göra med hjälp av en pekare. För alla tecken som innehåller bokstäver skall motsvarande morsekod skrivas ut. Mellan bokstäverna i ett ord skall ett blanktecken skrivas ut och mellan ord skall ett tabulatortecken skrivas. Problem med å, ä och ö. På grund av att kommandotolken har en annan teckenkodning är det svårt att få dessa tecken att fungera under Windows, du behöver därför inte stödja dem. Laborationsppgift 4.2. Tolka morsekod Uppgiften är att konstruera ett program som läser ett meddelande givet i morsekod och som avkodar meddelandet och skriver ut det i klartext. När programmet körs skall morsekoden skrivas in på en enda rad. I morsekoden skall det finnas ett mellanslag mellan bokstäverna inom ett ord och mellan orden skall det finnas ett tabulatortecken. Det kan se ut på följande sätt: Ha en bra dag (Den andra raden har skrivits ut av programmet.) Steg 1. int sok( char *string ); Skriv en funktion med namnet sok. Funktionen skall som parameter få en textsträng som innehåller morsekoden för en bokstav. Som resultat skall funktionen ge numret för bokstaven i alfabetet. Numreringen sker från noll. Om t.ex. funktionen får textsträngen "-.-." (koden för bokstaven C) som parameter så skall den som resultat ge värdet 2. Om parametern skulle innehålla en text som inte är en morsekod skall funktionen som resultat ge värdet -1. Funktionen sok skall förstås använda sig av en likadan tabell som du skapade i steg 1 för uppgift 1. För att jämföra parametern med textsträngarna i tabellen kan du använda standardfunktionen strcmp. Steg 2. char fran_morse( char *string ); Skriv en funktion fran_morse som får en textsträng innehållande en morsekod som parameter. Som resultat skall funktionen ge ett värde av typen char. Om parametern innehåller en godkänd morsekod för en bokstav skall funktionen som resultat ge motsvarande bokstav, annars skall den ge värdet?. Funktionen måste vara smart och för bokstäverna a-z utnyttja att deras LATIN_1-koder ligger i en sekvens. Steg 3. void main( int argc, char **argv ); Skriv funktionen main. Denna skall läsa in morsekoden för en bokstav i taget, tills det inte finns några fler koder att läsa. Det enklaste är att göra inläsningen med hjälp av standardfunktionen scanf med %s-format. Som du vet ger scanf som resultat antalet lyckade läsningar. Detta kan man utnyttja för att se när det inte finns några fler koder att läsa. För varje inläst kod skall main anropa funktionen fran_morse för att få motsvarande tecken. Detta skall sedan skrivas ut. Efter varje inläsning med scanf skall main läsa nästa tecken separat för att se om detta är ett tabulatortecken. I så fall skall ett nytt ord påbörjas i utskriften. 27

28 Laboration 4 Tips. För att slippa att skriva in morsekod när du provkör programmet i uppgift 2 kan du som indata använda resultatet från programmet i uppgift 1. Ett sätt att göra detta är att lägga utskriften från det första programmet i en fil. Antag att programmen heter program1 resp. program2. Du kan då t.ex. skriva på följande sätt när du kör program1 program1 > morse.txt här skriver du texten som skall översättas till morsekod Det andra programmet kan sedan testas med kommandot program2 < morse.txt Ännu enklare är det att använda sig av en s.k. pipe och ge kommandot program1 program2 här skriver du texten som skall översättas till morsekod 28

29 Laboration nr 5 behandlar Laboration 5 Användning av XCC för korskompilering till MC12 Operatörsstyrd borrmaskin Följande hemuppgift ska vara utförd innan laborationen påbörjas. Observera att det är en omfattande uppgift. Hem- Uppgift 5.1 Följande laborationsuppgift ur denna del av laborations-pm skall utföras och redovisas för en handledare för godkännande. Laborationsuppgift Sign. 5.4 Läsanvisningar: Laborationen förutsätter att du arbetat igenom avsnitt 5, sidorna 63-74, i Arbetsbok för MC12. Det är lämpligt, dock ej obligatoriskt, att utföra uppgifterna Under denna laboration får du lära dig hur man med hjälp av en korskompilator kan utveckla C-program för en dator som direkt styr hårdvara. Programmeringsmiljö Korskompilatorn XCC12 skall användas. Kompilatorn installeras samtidigt med DigiFlex och ETERM. Om du inte tidigare installerat programpaketet kan du göra det nu. Du finner länken på kursens resurssida. Godkännande När programmet fungerar skall det visas upp för en handledare för godkännande. För att laborationen skall bli godkänd räcker det inte med att programmet fungerar. Det måste också vara skrivet på ett snyggt och begripligt sätt. Programraderna skall t.ex. indenteras (dras in) på det sätt som lärs ut i kursen. Du måste också ha delat in det i moduler med användning av include-filer så som beskrivits i detta lab-pm. Hemuppgift 5.1: Läs noga igenom laborationsuppgifter så att du förstår vad du skall göra och hur problemen skall lösas. Du måste ha arbetat igenom avsnitt 5 i Arbetsbok för MC12. För att hinna göra laborationen är det nödvändigt att du före laborationstillfället har skrivit C- programmen och testat dem i källkodsdebuggern i XCC12. 29

30 Laboration 5 Mer om portadressering (absolut adressering) i C Portadresser i minnet kan enkelt adresseras. För att göra det på ett snyggt sätt i C är det lämpligt att börja med att definiera en typ som beskriver portar. Om man, som i MC12, har 8- bitars portar kan man göra deklarationen: typedef unsigned char port8; // 8-bitars port För 16-bitars portar ska man i stället använda typedef unsigned short port16; // 16-bitars port och hade man haft 32-bitars portar hade man skrivit typedef unsigned long port32; // 32-bitars port då den aktuella kompilatorn, så som XCC12, använder 32 bitar för typen long. Det är lika lätt att definiera en typ som beskriver pekare till portar, exempelvis enligt: typedef port8 *port8ptr; Typen port8ptr kan användas som en pekare till en 8-bitars port. En utport på ML4 har adressen För att inte behöva lägga denna sifferkonstant inne i programmet definierar man en macro: #define ML4OUT_ADDRESS 0x400 För att enkelt kunna skriva till den 8-bitars porten kan man definiera ytterligare en macro: #define ML4OUT *((port8ptr) ML4OUT_ADDRESS) Uttrycket (port8ptr) ML4OUT_ADDRESS är en explicit typomvandling från int (konstanten 0x400) till typen portptr. Den inledande asterisken innebär att man tar det som denna pekare pekar på, dvs. utregistret på ML4. Vill man kunna läsa från inporten på ML4 som har adressen kan man på motsvarande sätt definiera följande två macron: #define ML4IN_ADDRESS 0x600 #define ML4IN *((port8ptr) ML4IN_ADDRESS) Nu kan man använda sig av dessa macron för att komma åt portarna. Följande sekvens visar t.ex. hur man deklarerar en variabel, tilldelar denna värde från ML4 s inport, skiftar bitarna i variabeln ett steg åt höger och slutligen skriver variabelns värde till ML4 s utport: port8 r; r = ML4IN ; r = r >> 1; ML4OUT = r; Macrona ML4IN och ML4OUT beskriver då egentligen att man avläser det som finns på adressen och skriver till adressen Naturligtvis går det att göra detta utan att införa typerna port8 och port8ptr och utan att definiera några macron, men om man gör på det sätt som beskrivits här blir programmen mycket tydligare och därför lättare att få felfria. Man bör lägga alla makron av detta slag i en inkluderingsfil som t.ex. heter ports.h. I denna bör man också lägga typdefinitionerna. Fördelen med detta är att det är lätt att hittta en portadress och ändra den om konfigurationen ändras. Som exempel på en port vars adress varierar med den använda miljön har vi statusregistret hos "borrmaskinen" som du laborerat med tidigare och som du återkommer till i denna laboration. I simulatorn har detta register adress medan i laborationssystemet finns det på adress Med villkorlig kompilering skapar du definitioner så att du sedan, på ett enkelt sätt, kan skapa versioner för den simulerade miljön, såväl som den fysiska laborationsmiljön: 30

Maskinorienterad programmering del 1

Maskinorienterad programmering del 1 Institutionen för data och informationsteknik LP3-2014, RoJ/RS/JS Maskinorienterad programmering del 1 Laborationer 1 och 2 Laborationsserien omfattar totalt fem laborationsmoment som utförs i tur och

Läs mer

Maskinorienterad programmering, It/GU

Maskinorienterad programmering, It/GU Institutionen för data och informationsteknik. 2009-10-22 Laborationer i Maskinorienterad programmering, It/GU Detta häfte innehåller anvisningar om förberedelser och genomförande av 6 (3) laborationer.

Läs mer

Programmering av inbyggda system Laborationer för D, Z och GU (EDA481, EDA486 och DIT152)

Programmering av inbyggda system Laborationer för D, Z och GU (EDA481, EDA486 och DIT152) Institutionen för data och informationsteknik LP4-2014/15, RoJ/RS/JS Programmering av inbyggda system Laborationer för D, Z och GU (EDA481, EDA486 och DIT152) Laborationsserien omfattar totalt fem laborationsmoment

Läs mer

Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken

Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken Maskinorienterad Programmering 2011/2012 Laborationsmoment 2 - En Borrautomat : Programutveckling i assembler Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik Borrmaskin Arbetsbok

Läs mer

Laborationsmoment 2 - En Borrautomat

Laborationsmoment 2 - En Borrautomat Maskinorienterad Programmering 2011/2012 : Programutveckling i assembler Arbetsbok för MC12, kapitel 4 1 Laborationsmoment 2 - En Borrautomat Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik

Läs mer

Programmering av inbyggda system

Programmering av inbyggda system Programmering av inbyggda system Genomgång inför laborationer 1-3: Programutveckling i assembler Genomgång inför laborationer 1-3/RoJ 1 Laborationsmoment 2 - En Borrautomat Tangentbord för borrkommando

Läs mer

LEU240 Mikrodatorsystem

LEU240 Mikrodatorsystem Institutionen för data- och informationsteknik 2011-10-11 LEU240 Mikrodatorsystem Vi har tidigare i olika sammanhang sett att det är önskvärt att kunna använda ett högnivåspråk som C för att skriva program

Läs mer

Laboration nr 4 behandlar Assemblerprogrammering

Laboration nr 4 behandlar Assemblerprogrammering Laboration nr 4 behandlar Assemblerprogrammering Följande upp gifter ur Arbetsbok för DigiFlisp ska vara utförda som förberedelse för laborationen. Du ska på begäran av laborationshandledare redogöra för

Läs mer

Laborationsmoment t 2 - En Borrautomat

Laborationsmoment t 2 - En Borrautomat Maskinorienterad Programmering 2/2 Laborationsmoment t 2 - En Borrautomat t Genomgång g av laborationer: Programutveckling i assembler Tangentbord för borrkommando Operatör Mikrodator Anpassnings- elektronik

Läs mer

Laborationsmoment t 2 - En Borrautomat

Laborationsmoment t 2 - En Borrautomat Maskinorienterad Programmering 21/211 Genomgång g av laborationer: Programutveckling i assembler Arbetsbok för MC12, kapitel 4 1 Laborationsmoment t 2 - En Borrautomat t Tangentbord för borrkommando Operatör

Läs mer

Genomgång av laborationer. New disc: Här väljer du olika arbetsstycken. Control -sektion: Styrord till borrmaskinen

Genomgång av laborationer. New disc: Här väljer du olika arbetsstycken. Control -sektion: Styrord till borrmaskinen Maskinorienterad Programmering 212/213 Laborationsmoment 2 - En Borrautomat : Programutveckling i assembler Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik Borrmaskin Arbetsbok för

Läs mer

Laborationsmoment 2 - En Borrautomat

Laborationsmoment 2 - En Borrautomat Maskinorienterad Programmering 2011/2012 : Programutveckling i assembler Arbetsbok för MC12, kapitel 4 1 Laborationsmoment 2 - En Borrautomat Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #17 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Tallriksmodellen Stackoperationer Element kan endast

Läs mer

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) 1. Motivation ROM. 8kbyte 2 3 2 10 byte 13 Adressbitar [A12,A0] direkt till ROM-kapsel. RWM. 32kbyte 2 5 2 10 byte 15 Adressbitar

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Institutionen för data och informationsteknik. Roger Johansson, Ulf Assarsson 2016-03-17 Maskinorienterad programmering Laborationer (1-3 av 5) Detta laborations-pm innehåller anvisningar om förberedelser

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #8 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Assemblatorer vs kompilatorer En assemblator är ett program

Läs mer

Laborationer med MC12 ML4 Grundläggande assemblerprogrammering

Laborationer med MC12 ML4 Grundläggande assemblerprogrammering Grundläggande assemblerprogrammering GMV 2004,2005 Läromedel på elektronisk form, LOMEK, får kopieras fritt. Du ska redovisa dina laborationsresultat vid kontrollstationer. Då du nått en sådan, ska du

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Institutionen för data och informationsteknik. Roger Johansson, Ulf Assarsson 2016-10-08 Maskinorienterad programmering Laborationer Detta laborations-pm innehåller anvisningar om förberedelser inför genomförande

Läs mer

BDM12 Användarbeskrivning. Introduktion

BDM12 Användarbeskrivning. Introduktion Versioner/ändringar 1.0 2003-07 1.01 BUGFIX: FLASH unsecure algoritm 1.02 Fördröjning vid flash-prog. Statusutskrift under programmeringen. Programmeringsalgoritmen hanterar nu även 'bankade' minnet. Översättning

Läs mer

Avbrottshantering. Övningsuppgifter

Avbrottshantering. Övningsuppgifter Avbrottshantering Övningsuppgifter 2013 Besvara kortfattat följande frågor rörande CPU12. Redogör för vad som händer vid RESET och varför detta sker. Förklara kortfattat vad som händer vid ett IRQ avbrott

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #18 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Assemblerprogrammering Assemblatorer vs kompilatorer

Läs mer

Laborationer med MC11 ML4 Grundläggande assemblerprogrammering

Laborationer med MC11 ML4 Grundläggande assemblerprogrammering Grundläggande assemblerprogrammering GMV 2002 Läromedel på elektronisk form, LOMEK, får kopieras fritt Du ska redovisa dina laborationsresultat vid kontrollstationer. Då du nått en sådan, ska du därför

Läs mer

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP. Övningsuppgifter Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP. F.2 Ett antal på varandra följande minnesord har

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Institutionen för data- och informationsteknik Avdelningen för datorteknik TENTAMEN KURSNAMN Maskinorienterad programmering PROGRAM: Dataingenjör och elektroingenjör åk 1/ lp 3 Mekatronikingenjör åk 2/

Läs mer

Laboration nr 3 behandlar

Laboration nr 3 behandlar (2013-04-20) Laboration nr 3 behandlar Konstruktion och test av instruktioner (styrsignalsekvenser) för FLISP Följande uppgifter ur Arbetsbok för DigiFlisp ska vara utförda som förberedelse för laborationen.

Läs mer

CPU. Carry/Borrow IX. Programräknare

CPU. Carry/Borrow IX. Programräknare Laboration:. Jämförelser mellan assembler och C. CPU ACCA ACCD ACCB 8-bitars ackumulatorer eller 16- bitars ackumulator CCR 1 1 1 SXH I NZVC Flaggregister Carry/Borrow IX IY PC Indexregister X Indexregister

Läs mer

Programexempel för FLEX

Programexempel för FLEX Aktivera Kursens mål: Konstruera en dator mha grindar och programmera denna Aktivera Förra veckans mål: Konstruera styrenheten. genom att. implementera olika maskininstruktioner i styrenheten. Kunna använda

Läs mer

Datorteknik 2 (AVR 2)

Datorteknik 2 (AVR 2) Namn: Laborationen godkänd: Digitala system 15 hp Datorteknik 2 (AVR 2) LTH Ingenjörshögskolan vid Campus Helsingborg Enkel in- och utmatning. Drivrutiner. Bithantering. I denna laboration ska vi förbättra

Läs mer

Programmering i maskinspråk (Maskinassemblering)

Programmering i maskinspråk (Maskinassemblering) Programmering i maskinspråk (Maskinassemblering) Programutveckling i assemblerspråk Begreppet assemblerspråk introduceras i häftet Ext-20. En del korta programavsnitt skrivs med assemblerspråk i övningsuppgifterna

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Institutionen för data och informationsteknik. Roger Johansson, Ulf Assarsson 2017-09-27 Maskinorienterad programmering Laborationer Detta laborations-pm innehåller anvisningar om förberedelser inför genomförande

Läs mer

DBG11 Användarbeskrivning - Utgåva 2

DBG11 Användarbeskrivning - Utgåva 2 Introduktion DBG11 är en monitor/debugger för MC68HC11-baserade mikrodatorer. Denna utgåva har uppdaterats och gäller även MC11 med SP2-uppgradering. DBG11 ingår i en serie likartade monitor/debugger's

Läs mer

DBG identifierar därefter sig genom utskrift av namn och version. Se även "Disposition av adressrum" nedan. Följande kommandon accepteras av DBG

DBG identifierar därefter sig genom utskrift av namn och version. Se även Disposition av adressrum nedan. Följande kommandon accepteras av DBG Introduktion DBG12 är en monitor/debugger för MC68HCS12-baserade mikrodatorer. DBG12 ingår i en serie likartade monitor/debugger's för mikrodatorer. För närvarande finns följande varianter: DBG11 DBG12

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Externa avbrott Anslutning av extern avbrottsvippa, programmering med konfigurering och hantering av externa avbrott. Introduktion till time-sharing, enkel task-switch. Ur innehållet: NVIC och EXTI (SYSCFG)

Läs mer

Datorprojekt, del 1. Digitala system 15 p

Datorprojekt, del 1. Digitala system 15 p Namn: Laborationen godkänd: Digitala system 15 p L T H I n g e n j ö r s h ö g s k o l a n v i d C a m p u s H e l s i n g b o r g Datorprojekt, del 1 Projektet består i att skapa en klocka där tiden visas

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #19 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Normaltillstånd vs undantagstillstånd I normaltillstånd

Läs mer

LABORATION. Datorteknik Y

LABORATION. Datorteknik Y LABORATION Datorteknik Y Avbrottsprogrammering på Darma Version 4.03 Februari 2019 (OA, KP) Namn och personnummer Godkänd 1 1 Inledning Syftet med laborationen är först att ge övning i avbrottsprogrammering

Läs mer

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!) Avbrottshantering Övningsuppgifter 2013 Lösningsförslag Uppgift 1-19 (eservation för diverse fel!) 1 Koppling: Q 1 Till bit 0 INPOT ÖKA A 1 /W 1 Write 8FF 16 NOLLA Write 8FFF 16 Q 2 1 Q 2 Till bit 1 INPOT

Läs mer

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar. ATMega16 Laborationer av Kjell 2 Rev:5 Datum: 29.09.2010 Page 1 of 7 Laboration 4: Knappstuds Drivrutiner för att eliminera störningar. Inledning: Laborationskortet EasyAVR6 har bland annat tryckknappar

Läs mer

Exempel på tentamen 1

Exempel på tentamen 1 Maskinorienterad programmering - har du uppnått kursmålen Exempel på tentamen Tisdag xx januari 2005, kl. 08.30-2.30 i M-salar Examinatorer Stig-Göran Larsson, tel. 772 693 Jan Skansholm, tel. 772 02 Kontaktpersoner

Läs mer

F8: Undantagshantering

F8: Undantagshantering F8: Undantagshantering Undantagshantering i 68 Vad är ett undantag? Typer av undantag Att skriva undantagsrutiner Undantagshantering, vad och varför? Exempel: Ett system ska mäta temperatur var :e sekund

Läs mer

Assemblerprogrammering del 1

Assemblerprogrammering del 1 Assemblerprogrammering del 1 Dagens föreläsning behandlar: Kompendiet kapitel 9 Arbetsboken kapitel 15 Ur innehållet: Assemblerspråket Programmerarens bild Assemblering/disassemblering Funktion: Översätter

Läs mer

Maskinorienterad programmering. Arbetshäfte för laboration nr 1-3. Laborant: Godkännande - laboration: Data- och informationsteknik, datorteknik

Maskinorienterad programmering. Arbetshäfte för laboration nr 1-3. Laborant: Godkännande - laboration: Data- och informationsteknik, datorteknik Data- och informationsteknik, datorteknik 1 2 3 4 5 6 7 8 9 10 11 12 U Maskinorienterad programmering Arbetshäfte för laboration nr 1-3 Utvecklingsverktyget Eterm Programmering i assemblerspråk Borrmaskinsstyrning

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #17 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola F-36 FLEX- och FLIS-datorn Ext-8 Tallriksmodellen Stackoperationer

Läs mer

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser Namn: Laborationen godkänd: Digitala system 15 hp AVR 3 - datorteknik LTH Ingenjörshögskolan vid Campus Helsingborg Avbrott. Syften med den här laborationen är att introducera avbrott. Avbrott som uppkommer

Läs mer

Extrauppgifter för CPU12

Extrauppgifter för CPU12 1 Extrauppgifter för CPU12 X1a) Skriv en instruktionssekvens som nollställer bit 3-0 i alla minnesord i adressintervallet 2035H, 2049H Använd X-registret för adressering X1b) Skriv en subrutin som maskerar

Läs mer

Maskinorienterad programmering

Maskinorienterad programmering Institutionen för data- och informationsteknik Avdelningen för datorteknik TENTAMEN KURSNAMN Maskinorienterad programmering PROGRAM: Dataingenjör och elektroingenjör åk 1/ lp 3 Mekatronikingenjör åk 2/

Läs mer

Laborationer med MC68 ML4 Grundläggande assemblerprogrammering

Laborationer med MC68 ML4 Grundläggande assemblerprogrammering Grundläggande assemblerprogrammering GMV 2002-2004 Läromedel på elektronisk form, LOMEK, får kopieras fritt Du ska redovisa dina laborationsresultat vid kontrollstationer. Då du nått en sådan, ska du därför

Läs mer

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink Institutionen för data- och informationsteknik Avdelningen för datorteknik TENTAMEN KURSNAMN Maskinorienterad programmering PROGRAM: Dataingenjör och elektroingenjör åk 1/ lp 3 Mekatronikingenjör åk 2/

Läs mer

CE_O3. Nios II. Inför lab nios2time

CE_O3. Nios II. Inför lab nios2time IS1200 Exempelsamling till övning CE_O3, 2015 CE_O3. Nios II. Inför lab nios2time 3.1. Logiska operationer (se uppgift 1.2 c) Repetera (eller lär dig) innebörden av de logiska operationerna "bitvis AND",

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data via

Läs mer

(Lösningsförslag finns sist i denna fil.)

(Lösningsförslag finns sist i denna fil.) (Lösningsförslag finns sist i denna fil.) Läser externa signaler. Har 64 ingångar (kanaler), från 0 till 63. Kan bara avläsa en ingång i taget. Avlästa värdet positivt 16-bitars tal. Varje läsning tar

Läs mer

F5: Högnivåprogrammering

F5: Högnivåprogrammering 1 F5: Högnivåprogrammering Parameteröverföring Koppling mellan låg- och högnivåprogrammering Lokala variabler Heapen Datatyper 1 Subrutin, parameteröverföring: 1(3) Via register genom värde Skicka data

Läs mer

Detta häfte innehåller anvisningar om förberedelser och genomförande av fyra laborationer.

Detta häfte innehåller anvisningar om förberedelser och genomförande av fyra laborationer. Institutionen för data och informationsteknik. Laborationshäfte i Digital- och datorteknik EDA215, EDA432, EDA451, DIT790 Detta häfte innehåller anvisningar om förberedelser och genomförande av fyra laborationer.

Läs mer

Maskinorienterad programmering, IT2

Maskinorienterad programmering, IT2 Maskinorienterad programmering, IT2 Laboration nr 5 C-programmering Prioritetskö Förberedelser Läs noga igenom uppgifterna så att du förstår vad du skall göra och hur problemen skall lösas. Gör en skiss

Läs mer

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010 STYRNING - i Mikrodatorteknik för U2 2010 1. Uppgift M10 (5p) aug-09 Skriv ett program i PIC-assembler som - gör PortB till utport - ettställer bit 0, 3 och 4 i PortB - nollställer bit 5 och 6 i PortB

Läs mer

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne Programallokering Att placera program i flashrespektive RAM-minne Program i FLASH-minne Bara lokala variabler Globala oinitierade variabler Globala initierade variabler Program med avbrott Program i RAM-minne

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #23 Översikt När flera smoduler placeras i processorns adressrum ansluts modulernas adressingångar till motsvarande ledningar i en. Övriga adressledningar i bussen

Läs mer

DBG identifierar därefter sig genom utskrift av namn och version. Följande kommandon accepteras av DBG. Hantera brytpunkter i användarprogram

DBG identifierar därefter sig genom utskrift av namn och version. Följande kommandon accepteras av DBG. Hantera brytpunkter i användarprogram Introduktion DBG32 är en monitor/debugger för MC683xx-baserade mikrodatorer. DBG32 ingår i en serie likartade monitor/debugger's för mikrodatorer. För närvarande finns följande varianter: DBG11 DBG12 DBG32

Läs mer

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION Laborationsansvarig: Anders Arvidsson Utskriftsdatum: 2005-08-31 Laborant(er): 1 Syfte Laborationen ska ge studenten möjlighet att genom assemblerinlägg

Läs mer

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 13 mars 2013, klockan 14:00 19:00 i Vic 2 A-D, 3 A-C. Tillåtna hjälpmedel: på tentan utdelad

Läs mer

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen.

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen. Institutionen för data- och informationsteknik Avdelningen för datorteknik TENTAMEN KURSNAMN Maskinorienterad programmering PROGRAM: Dataingenjör och elektroingenjör åk 1/ lp 3 Mekatronikingenjör åk 2/

Läs mer

AVR 5. Styrning av trafikljus. Digitala system 15 p

AVR 5. Styrning av trafikljus. Digitala system 15 p Namn: Laborationen godkänd: Digitala system 15 p AVR 5 LTH Ingenjörshögskolan vid Campus Helsingborg Styrning av trafikljus. Syftet med laborationen är att styra en trafikkorsning med hjälp av en mikroprocessor.

Läs mer

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU Onsdag 12 Januari 2011, kl. 14.00-18.00 Examinatorer

Läs mer

Tentamen. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT. Tisdag xx yyyy 2006, kl. 8.30-12.

Tentamen. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT. Tisdag xx yyyy 2006, kl. 8.30-12. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT Tentamen Tisdag xx yyyy 2006, kl. 8.30-12.30 i V-salar Examinatorer Rolf Snedsböl, tel. 772 1665 Jan Skansholm, tel. 772

Läs mer

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK

Läs mer

Assemblerprogrammering

Assemblerprogrammering 2012-02-14 Assemblerprogrammering Övningsuppgifter 2011 Lösningar (Med reservation för diverse fel!) 1. Hur många E-klockperioder använder CPU12 (HCS12) för att köra programsekvensen nedan? ORG $1000 LDAA

Läs mer

Programmering i maskinspråk (Maskinassemblering)

Programmering i maskinspråk (Maskinassemblering) Ext-15 (2013-08-26) sida 1 Programmering i maskinspråk (Maskinassemblering) Programutveckling i assemblerspråk Begreppet assemblerspråk introduceras i arbetsboken (ARB) kapitlen 14-16. En del korta programavsnitt

Läs mer

Ansvarig lärare: Olof Andersson, Telefon 021-101314 (besöker skrivsalen)

Ansvarig lärare: Olof Andersson, Telefon 021-101314 (besöker skrivsalen) MÄLRLENS HÖGSKOL Institutionen för elektroteknik Tentamen Mikrodatorteknik T3760 atum 2005-10-28 Tid 08.30 12.30 nsvarig lärare: Olof ndersson, Telefon 021-101314 (besöker skrivsalen) Om du klarat samtliga

Läs mer

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 - Inbyggda system - Analog till digital signal - Utvecklingssystem, målsystem - Labutrustningen - Uppbyggnad av mikrokontroller - Masinkod, assemblerkod

Läs mer

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Fö 5+6 TSEA81. Real-time kernel + Real-time OS Fö 5+6 TSEA81 Real-time kernel + Real-time OS Stackens användningsområde * JSR / RTS : returadress * Temporärdata (push / pop) void myfunc(void) { int i; // hamnar nog i register int test[10]; // hamnar

Läs mer

Assemblerprogrammeringsuppgifter för FLIS-processorn

Assemblerprogrammeringsuppgifter för FLIS-processorn 1 (2013-05-02) Assemblerprogrammeringsuppgifter för FLIS-processorn 1. I simulatorn för FLISP-datorn kan man ansluta strömbrytarmodulen DIPSWITCH till en inport och sifferindikatorn 7-SEGMENT till en utport.

Läs mer

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C Namn: Laborationen godkänd: Tekniska gränssnitt 7,5 p Vt 2014 Laboration 5 LTH Ingenjörshögskolan vid Campus Helsingborg Temperaturmätning med analog givare. Syftet med laborationen är att studera analog

Läs mer

Drivrutiner för att hantera teckenfönster.

Drivrutiner för att hantera teckenfönster. Laboration: Teckenfönster Drivrutiner för att hantera teckenfönster. I denna laboration ska vi göra funktioner som på ett praktiskt sätt hanterar en tvåradig display av typ LM162XXX (se LCD.pdf). Displayen

Läs mer

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå Aktivera Kursens mål: LV4 Fo10 Konstruera en dator mha grindar och programmera denna Aktivera Förra veckans mål: Koppla samman register och ALU till en dataväg Minnets uppbyggnad och anslutning till datavägen

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin. 1(5) Övningstentamen i Mikrodatorer och assemblerprogrammering, ELGA05 Hjälpmedel: Bifogad lista med memokoder för MC68xxx. Samtliga programmeringsuppgifter ska innehålla flödesschema med förklaringar

Läs mer

Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl

Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU Tisdag 15 december 2009, kl. 08.30-12.30

Läs mer

LABORATION. Datorteknik Y

LABORATION. Datorteknik Y LABORATION Datorteknik Y Avbrottsprogrammering på Darma Version 4.02 Februari 2018 (OA, KP) Namn och personnummer Godkänd 1 1 Inledning Syftet med laborationen är först att ge övning i avbrottsprogrammering

Läs mer

Lösningsförslag tenta

Lösningsförslag tenta Lösningsförslag tenta 2013-12-16 (Version 5 med reservation för eventuella fel. Uppdaterad 140417.) 1. X = 1010 0101 2 ; Y = 0101 1011 2 (8 bitars ordlängd) a) [0, 2 n 1] = [0, 2 8 1] = [0, 255] b) [ 2

Läs mer

LABORATIONSINSTRUKTION

LABORATIONSINSTRUKTION Högskolan Dalarna Elektroteknik LABORATION LABORATIONSINSTRUKTION PLC-styrning av ett minimalt parkeringsgarage KURS El- och styrteknik för tekniker ET 1015 INNEHÅLL LAB NR 4 Ver 1.0 1. Inledning 2. Laborationskortet

Läs mer

Datorsystem Laboration 2: Minnesmappade bussar

Datorsystem Laboration 2: Minnesmappade bussar Datorsystem Laboration 2: Minnesmappade bussar Senast uppdaterad: 14 oktober 2012 Version 1.2 Student: Lärare: Underskrift: Underskrift: Datum: Datorsystem Laboration 2 1 Innehåll 1 Inledning 2 1.1 Introduktion..................................

Läs mer

Digital- och datorteknik

Digital- och datorteknik Digital- och datorteknik Föreläsning #23 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Översikt När flera minnesmoduler placeras i processorns

Läs mer

DBG identifierar därefter sig genom utskrift av namn och version. Se även "Disposition av adressrum" nedan. Följande kommandon accepteras av DBG

DBG identifierar därefter sig genom utskrift av namn och version. Se även Disposition av adressrum nedan. Följande kommandon accepteras av DBG Introduktion DBG12 är en monitor/debugger för MC68HCS12-baserade mikrodatorer. DBG12 ingår i en serie likartade monitor/debugger's för mikrodatorer. För närvarande finns följande varianter: DBG11 DBG12

Läs mer

Enkla datatyper minne

Enkla datatyper minne Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in

Läs mer

Datorteknik TSIU02 Lab 2 Morsesändare v0.7

Datorteknik TSIU02 Lab 2 Morsesändare v0.7 Inledning För att skriva program i något programspråk förenklar det att ha ett strukturerat angreppssätt. I assembler får man strukturen genom omsorgsfull användning av subrutiner. Som exempel på en mer

Läs mer

Tentamen med lösningsförslag

Tentamen med lösningsförslag Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen med lösningsförslag LEU500 Maskinorienterad programmering, DAI,EI,MEI Fredag 19 augusti 2016, kl. 8.30-12.30 Examinator

Läs mer

Föreläsning 2. Operativsystem och programmering

Föreläsning 2. Operativsystem och programmering Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data

Läs mer

Kontrollskrivning Mikrodatorteknik CDT209 2007-09-20 S2-704

Kontrollskrivning Mikrodatorteknik CDT209 2007-09-20 S2-704 Kontrollskrivning Mikrodatorteknik CDT209 2007-09-20 S2-704 Svar Svar till uppgifterna lämnas på separat papper. En poäng per uppgift. Max 30 poäng. Bonuspoäng beräknas enligt följande tabell: 6-10 poäng

Läs mer

Assemblerprogrammets struktur; exempel

Assemblerprogrammets struktur; exempel Maskinorienterad Programmering 2010/11 Maskinnära programmering en introduktion Ur innehållet: Assemblatorn, assemblerspråk Datatyper Tilldelningar, l i unära och binära operationer Permanenta/tillfälliga

Läs mer

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal. Laboration:. Jämförelser mellan assembler och C. I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal. Förberedelser:

Läs mer

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Torsdagen den 13 mars 2014, klockan 14:00 19:00 i MA:10. Tillåtna hjälpmedel: på tentan utdelad formelsamling,

Läs mer

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte CT3760 Mikrodatorteknik Föreläsning 4 Tisdag 2005-09-06 Stacken I datasammmanhang är en stack ett minnesområde. Det är processorn som använder stacken. För att skapa en stack anger man en adress i stackpekarregistret.

Läs mer

Laboration 2 i Datorteknik- Assemblerprogrammering II

Laboration 2 i Datorteknik- Assemblerprogrammering II Högskolan i Halmstad 1 (8) - Assemblerprogrammering II Målet med laborationen är att få begrepp om Subrutiner. in/utparametrar. Lokala variabler Maska in bitar till ett register Konstruktion av subrutiner

Läs mer

Datorsystemteknik Föreläsning 7DAVA14

Datorsystemteknik Föreläsning 7DAVA14 Datorsystemteknik Föreläsning 7DAVA14 Innehåll Introduktion (forts) Polling (cyklisk avfrågning) Större delen av materialet framtaget av :Jan Eric Larsson, Mats Brorsson och Mirec Novak IT-inst LTH Exempel

Läs mer

Maskinorienterad Programmering 2010/11

Maskinorienterad Programmering 2010/11 Maskinorienterad Programmering 2010/11 Maskinnära programmering en introduktion Ur innehållet: Assemblatorn, assemblerspråk Datatyper Tilldelningar, l i unära och binära operationer Permanenta/tillfälliga

Läs mer

KALKYLATOR LABORATION4. Laborationens syfte

KALKYLATOR LABORATION4. Laborationens syfte LABORATION4 KALKYLATOR Laborationens syfte I denna laboration ska en enkel kalkylator konstrueras med hjälp av VHDL och utvecklingsverktyget Vivado från Xilinx. Hårdvaran realiseras på det redan bekanta

Läs mer

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt

Läs mer

Assemblerprogrammering del 3

Assemblerprogrammering del 3 Assemblerprogrammering del 3 Dagens föreläsning behandlar: Kompendiet kapitel 9 och 10.4 Arbetsboken kapitel 16 Ur innehållet: Modularisering, subrutiner och strukturerad programutveckling (flödesdiagram)

Läs mer