Grunder i programmering Vår väg till Godkänt, och sedan vidare... Ett väl utfört arbete ger en inre tillfredsställelse, och är den grund varpå samhället vilar. Karl-Bertil Jonsson ii
Grunder i programmering Innehållsförteckning Mikroprocessorteknik A - ENK1207...4 Lite historia:...5 Röret, transistorn, Operationsförstärkaren...5 ALU, register, bussar...5 Instruktioner, hur instruktioner blir signaler...5 register för stack, zero, carry...5 Aritmetik...5 Allmän programmering...6 Angående kommentarer!...6 Angående kodning!...6 Arbetsgång i text...7 Arbetsgång grafisk...8 Hacka kod för PIC...9 Skapa en loop...9 Skapa ett pulståg...9 Skapa en logisk funktion...9 Villkor...9 Hopp...9 Avbrott...9 Koda säkert och skalbart...9 Länkar...10 Digitalteknik...10 iii
Mikroprocessorteknik A - ENK1207 50 poäng inrättad 2000-07 SKOLFS: 2000:31 Mål Mål för kursen 4 av 12 09-01-09
Lite historia: Anledningen till historielektionen är att visa varför processorer har kommit att bli vad de är. Röret, transistorn, Operationsförstärkaren Reläet är en enkel komponent att hantera, men ack så effektkrävande och långsam. Röret (Eng. electron tube eller valve) kräver att en svärm av elektroner finns tillgängliga och det får man genom att värma upp en glödtråd (filament) i vakuum. På så vis kan man attrahera elektronerna med mer eller mindre positivt laddade metallytor. Mellan glödtråden och den positiva sidan finns ett galler vilket matas med en signalspänning för att styra elektronflödet (strömmen). Ganska avancerade konstruktioner kan tryckas in i ett rör. Dioder, trioder, pentoder bara för att nämna de vanligaste. Operationsförstärkaren utvecklades för att utföra aritmetiska operationer, men då med analoga signaler. Huvudblocket i en OP är strömspegeln och konstantströmsgeneratorn. OP:n förekommer sällan, eller aldrig i datorer, utan som förstärkare i olika konstellationer. ALU, register, bussar ALU:n bearbetar data enligt de kretslösningar den är konstruerad med. Data och instruktioner anländer på samma buss, och samtidigt, eller inte, beroende av arkitektur. Harvard-arkitekturen har olika minnen och bussar för data och instruktioner. von Neumann-arkitekturen använder samma minne och buss till både data och instruktioner. Därför kan Harvard-arkitekturen uppvisa snabbare exekvering på bekostnad av en mer komplex kretslösning. Instruktioner, hur instruktioner blir signaler register för stack, zero, carry Aritmetik 5 av 12
Allmän programmering Från idé via flödesschema till exekverbar fil. Det är inte bara vid programmering man kan dra nytta av flödesschema. Det hjälper till att bringa ordning på tankar och hjälper till att förklara för andra sina idéer. Flera av standardsymbolerna härstammar från just datortekniken, men det gör inget om man lånar dem för att beskriva avloppsrening eller möblering vid en flytt. Det är också så att ett antal symboler beskriver föråldrade begrepp. Det gör inte så mycket eftersom vi klarar os långt på de övriga. I vårt fall ska vi ju dock använda flödesschemat för att ge stöd vid programmeringen. Det hjälper inte att bara ha ett schema, i slutänden ska det ju bli kod som vi kan programmera processorn med. Angående kommentarer! Att skriva överdrivet många kommentarer hjälper väldigt lite, även om det hjälper mer än inga alls. Men att sätta rätt kommentar på rätt ställe är guld värt. Strunta i att beskriva exakt vad instruktionen ska göra, den som hjälpligt kan instruktionsuppsättningen blir inte hjälpt av det. Skriv istället tydligt vad rutinen ska åstadkomma, vilka parametrar som ingår, kanske vilka rutiner som behöver resultatet. Angående kodning! Tänk på att en processor bara kan göra en sak åt gången. Vid detta laget känner vi till hur man skapar loopar för att vänta bort en massa tid i form av klockcykler. Det är användbart när man bara ska utföra en enkel sekvens. Men det är ett fruktansvärt slöseri med resurser och lämpar sig inte när flera processer måste skötas parallellt. 6 av 12 09-01-09
Arbetsgång i text Här ska jag nu beskriva hur man med små steg i många omgångar åskådliggjör sina problemställningar på ett tydligt sätt, och därför förenklar problemlösningen. Rena skolexempel kan skilja sig ganska mycket från verkligheten, det får inte glömmas bort. Det gäller att hitta lösningar på problemen oavsett. 1. Teckna ner din idé. Det spelar ingen roll hur du gör, bara du fångar den så att den inte glöms bort. Att använda standardsymboler är inte nödvändigt. 2. Identifiera olika delar i projektet. Somliga är distinkta och lätta att urskilja. 3. Ordna delarna i en följd som kan fungera. Sällan är det en bra idé att sätta upp fönstren först när man bygger hus... 4. När vi kommit så här långt kan det vara lönt att använda standardsymboler. Först och främst för att kunna förklara för andra vad man menar när man frågar om hjälp. 5. Allteftersom flödesschemat börjar ta form, kan man börja fundera över att fylla delblocken med kod. Om blocken redan innan beskrivits med ytterligare en nivå av flödesschema, ja då blir arbetet ännu lättare. 6. Glöm inte att ta hänsyn till hårdvarumässiga begränsningar. 7. Innan vi når ett sådant djup i kodandet att överblicken försämras (för det gör den i lite större projekt), så fundera över vilka delblock som liknar varandra. Dessa block kan man skapa som subrutiner med gemensamma parametrar. Lägger man lite tid här, så vinner man tiofalt lite längre fram. 8. Man får lov att backa och revidera sitt projekt, både för att lägga till och dra ifrån funktioner. Men också för att ändra så att koden blir lättare att hantera och generalisera kodsnuttar så att de lättare kan återanvändas. Tja, så här håller man på och successivt byter innehållet i schemats symboler mot programmeringskod. 8. Om bara koden håller ihop så mycket att det går att kompilera den, så gör det. Bara det faktum att koden funkar i kompilatorn betyder inte att allt är utan problem. Men det betyder att man inte behöver tänka så mycket på irriterande syntaktiska buggar, när det finns allvarligare fel att hitta. 9. Väldigt sällan (aldrig) funkar det som man tänkt sig redan första gången. Du blir troligen tvungen att gå tillbaka och "putsa" lite på koden mer än en gång. Glöm därför inte att hela tiden skriva kommentarer om hur koden är tänkt att fungera. Att börja rota i koden efter en vecka utan kommentarer är illa nog. En månad och två projekt senare är det bara löjligt att försöka. 7 av 12
Arbetsgång grafisk Fånga idéen och sortera de ingående villkoren Identifiera vad som behövs för att realisera projektet Fyll blocken med kod ; ----Knapptest-------------------------------- test btfss PORTA,0 ;Kontrollera knappen goto slack0 ;Annars gå vidare movlw D'0' call tand ;tänd och gå vidare goto next1 RETURN ; ----/Knapptest------------------------------- Glöm inte kommentarerna!! Gör tydliga referenser till andra block när de inte får plats på samma sida! Räkna med att pröva och ompröva lösningarn hela tiden. Se om koden fungerar att kompilera då och då. 8 av 12 09-01-09
Hacka kod för PIC Se dokumentet Elmer för assembler till mikrokontrollern från Microchip. Det är ganska enkelt att säga att PIC har 35 instruktioner och är lätt att lära sig. Det finns även direktiv och konfigurationer att lära sig. Skapa en loop Skapa ett pulståg Skapa en logisk funktion Villkor Hopp Avbrott Koda säkert och skalbart Jag ska nu införa begreppet skalbarhet. Det betyder att oavsett funktionens, organisationens (det kan kvitta om det är ett program, företag, förening eller maskin) storlek, så måste arbetet uträttas. Skalbart är det när man uträttar ett arbete och storleken är ovidkommande. Man kan skala upp lönekontorets antal utbetalningar till 3000, men processen är densamma om det bara är fyra. Till kodningen hör att koda säkert. Med det menar jag att du redan i flödesschemat som ligger till grund för programmeringen, tar hänsyn till oförutsedda händelser. Det låter kanske motsägelsefullt, och man lär sig nog bäst genom att gå på minorna själv. Vad jag menar är att innan varje gång man lämnar en subrutin, så städa upp efter den. Låt inte småskräp föröka sig i minnesareorna. Se till att subrutiner, makron, variabler och annat har enkla men betydelsefulla namn. Undvik Svenska tecken i koden. Det funkar dock oklanderligt i kommentarerna. 9 av 12
Länkar Digitalteknik Grindar och transistorer förklarade på ett bra sätt. Ett löst sammansatt nätverk av kollegor och vänner bidrar också fackkunskaper inom sina områden. Mats Wiklund http://faktabanken.nu/elektronik.htm Inte bara elektronik presenteras. surfa upp en nivå och se. Wikipedia täcker alldeles för mycket för att jag ska kunna nämna allt i en kort presentation. Men mycket information saknas på Svenska. Bortse inte från viktig kunskap på Engelska eller Danska, Norska och för den delen andra språk. http://www.wikipedia.org/ Talsystem och siffror: http://sv.wikipedia.org/wiki/siffra Låskretsar och vippor. Högskolorna är suveräna källor till kunskap. William Sandqvist har skrivit detta dokument. http://www.isk.kth.se/kursinfo/6b4059/vippor/index.htm Men William har skrivit mycket mer. En bit ner på sidan hittar du en lista på kursmaterial. Han har dessutom tillåtit oss att använda det i undervisningen, med glädje till och med! Vi har all anledning att återkomma till hans verk. http://www.isk.kth.se/kursinfo/6b4059/kursprogvt07.htm Datatermgruppen http://www.nada.kth.se/dataterm/ 10 av 12
Nu är det slut.