Laboration D164. ELEKTRONIK Digitalteknik. Digitalteknik med enchipsdatorer

Relevanta dokument
DIGITALTEKNIK. Laboration D164. Logiska funktioner med mikroprocessor Kombinatoriska funktioner med PIC16F84 Sekvensfunktioner med PIC16F84

Programexempel 1 AND-funktionen

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Övningsuppgifter i Mikrodatorteknik för U2

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

mikroprocessorer Elektronik DIGITALTEKNIK Logiska funktioner med

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Programmerbar logik (PLD) Programmeringsspråket VHDL Kombinatoriska funktioner i VHDL för PLD Sekvensfunktioner i VHDL för PLD

Laboration D181. ELEKTRONIK Digitalteknik. Kombinatoriska kretsar, HCMOS v 2.1

DIGITALTEKNIK I. Laboration DE1. Kombinatoriska nät och kretsar

DIGITALTEKNIK I. Laboration DE2. Sekvensnät och sekvenskretsar

Laboration D159. Sekvensnät beskrivna med VHDL och realiserade med PLD. Namn: Datum: Epostadr: Kurs:

DIGITALTEKNIK. Laboration D172

Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

Laboration D151. Kombinatoriska kretsar, HCMOS. Namn: Datum: Epostadr: Kurs:

DIGITALTEKNIK. Laboration D161. Kombinatoriska kretsar och nät

Laboration D184. ELEKTRONIK Digitalteknik. Sekvensnät beskrivna med VHDL och realiserade med PLD

Introduktion till syntesverktyget Altera Max+PlusII

CE_O3. Nios II. Inför lab nios2time

Laboration 3 i Digital- och Mikrodatorteknik. Utvecklingssystemet MPLAB IDE Grundläggande assemblerprogrammering för PIC

Laboration 2 i Datorteknik- Assemblerprogrammering II

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Digital- och datorteknik

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Digitalteknik EIT020. Lecture 15: Design av digitala kretsar

Laboration nr2 med enchipsdatorn PIC-16F877

Föreläsningsanteckningar till Konstruktionsmetoder

Tenta i Digitalteknik

F5 Introduktion till digitalteknik

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Repetition och sammanfattning av syntes och analys av sekvensnät

Digital elektronik CL0090

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

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

T1-modulen Lektionerna Radioamatörkurs OH6AG OH6AG. Bearbetning och översättning: Thomas Anderssén, OH6NT Heikki Lahtivirta, OH2LH

Laboration i digitalteknik Introduktion till digitalteknik

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Tenta i Digitalteknik

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

Digitala system EDI610 Elektro- och informationsteknik

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok.

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

Det finns en hemsida. Adressen är

Digital elektronik CL0090

Simulering med ModelSim En kort introduktion

Tentamen Enchipsdatorer med tillämpningar. Lösningar och kommentarer

LEU240 Mikrodatorsystem

IE1204/IE1205 Digital Design

Tentamen i Digitalteknik 5p

Digital- och datorteknik

Tenta i Digitalteknik

2-14 Binära talsystemet-fördjupning Namn:

Struktur: Elektroteknik A. Digitalteknik 3p, vt 01. F1: Introduktion. Motivation och målsättning för kurserna i digital elektronik

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

Laborationshandledning för mätteknik

Grundläggande Datorteknik Digital- och datorteknik

Flödesschema som visar hur man använder Quartus II.

AVR 5. Styrning av trafikljus. Digitala system 15 p

Tentamen i Digital Design

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Digital- och datorteknik

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

DIGITAL ELEKTRONIK. Laboration DE3 VHDL 1. Namn... Personnummer... Epost-adress... Datum för inlämning...

Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1

Tentamen i IE1204/5 Digital Design onsdagen den 5/

CPU. Carry/Borrow IX. Programräknare

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Digital elektronik CL0090

Lunds Universitet LTH Ingenjörshögskolan IDa1, IEa1 Helsingborg. Laboration nr 4 i digitala system ht-15. Ett sekvensnät. grupp. namn.

Introduktion till digitalteknik

Styrenheten styrsignalsekvenser programflödeskontroll

Lathund. C för inbyggda system

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Introduktion till logik

Följddiagram för händelsestyrda rörelser

Tentamen i IE1204/5 Digital Design onsdagen den 5/

DIGITALA TAL OCH BOOLESK ALGEBRA

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Lösningförslag till Exempel på tentamensfrågor Digitalteknik I.

Grunderna i stegkodsprogrammering

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

Lösningar till tentamen i EIT070 Datorteknik

Moment 2 - Digital elektronik. Föreläsning 1 Binära tal och logiska grindar

Lösningar till tentamen i EIT070 Datorteknik

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Tentamen i IE1204/5 Digital Design måndagen den 15/

Introduktion till Xilinx CPLD och ISE WebPack 6.2 Version NV

Tentamen Enchipsdatorer med tillämpningar. Lösningar och kommentarer

"Crash Course in Programming"

Sekvensnät i VHDL del 2

INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN

TSIU05 Digitalteknik. LAB1 Kombinatorik LAB2 Sekvensnät LAB3 System

IE1205 Digital Design: F9: Synkrona tillståndsautomater

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

5:2 Digitalteknik Boolesk algebra. Inledning OCH-funktionen

Exempel på tentamensfrågor Digitalteknik

Transkript:

UMEÅ UNIVERSITET Tillämpad fysik och elektronik Digitalteknik Björne Lindberg 21-1-4 v 1.1 ELEKTRONIK Digitalteknik Laboration D164 Digitalteknik med enchipsdatorer Namn... Personnummer... Studieprogram... Epostadress... Datum för visad koppling (signerad)... Datum för inlämning.

2 Innehåll Innehåll... 2 INLEDNING... 3 Referenser... 3 UTRUSTNING... 3 TALSYSTEM... 4 LOGISK ALGEBRA (BOOELSK ALGEBRA)... 5 NOT-funktionen... 6 AND-funktionen... 6 OR-funktionen... 6 Grind-symboler... 7 NOT-grinden... 7 AND-grinden... 7 OR-grinden... 7 REALISERING AV GRINDNÄT MED ENCHIPSPROCESSOR... 8 Först några fysiska (mekaniska) data... 8 MICROPROCESSORENHETER... 1 PROGRAMMERING AV KAPSEL... 11 OPERAND... 13 KOMMENTARER... 13 ASSEMBLERDIREKTIV... 13 PROGRAMEXEMPEL 1... 14 Editera Projektet:... 16 Assemblera koden... 16 Simulering... 17 Programmering av krets... 17 Inkoppling... 17 PROGRAMEXEMPEL 2... 19 Realisering av OR-funktionen... 19 1. 2-ing NAND (Not AND)... 21 2. 3-ing NAND... 21 3. 2-ing NOR-grind... 22 4. 3-ing NOR-grind... 22 Kombinatoriska kretsar. (Kombinatorik)... 23 EXOR.... 23 EXNOR... 24 Källkodsbeskrivning... 25 5. Realisera en digital funktion med nedanstående sanningstabell... 25 6. En digital funktion beskrivs med booelsk algebra på följande sätt... 26 7. En digital krets har 5 st insignaler och en utsignal. Dess logiska funktion ska vara sådan att om exakt tre av insignalerna är höga ska utsignalen bli hög... 26 Ytterligare instruktioner för att underlätta källkodsskrivning... 27 8. Realisera nedanstående sanningstabell med hjälp av tabell... 29 9. Realisera en fyra-bitars kodomvandlare BIN - GRAY... 29 1. Realisera den digitala funktionen i uppgift 5... 3 11. Kodlås... 3 SEKVENSKRETSAR... 31 PROGRAMEXEMPEL 3... 32 Kopplingsschema.... 33 Källkod... 34 12. Laborationsuppgift... 36 13. Laborationsuppgift... 36 14. Laborationsuppgift... 37 15. Laborationsuppgift... 37

3 INLEDNING Denna laboration är avsett att ge en inblick i hur grundläggande modern DIGITALTEKNIK kan förverkligas med en enkel mikroprocessor.. Introduktionen är traditionell, d.v s med terori för digital logik, men med enchipsdatorn som enda komponent för att realisera olika digitala funktioner. Det hittills vanligaste är att använda kretsar ur TTL och CMOS-familjerna. De huvudmoment som laborationen behandlar är följande: 1. KOMBINATORISKA KRETSAR 2. SEKVENSKRETSAR Referenser PIC http://www.microchip.com/download/lit/pline/picmicro/families/16f8x/devices/16f84/343 c.pdf MPLAB manualer och programvara: http://www.microchip.com/1/tools/picmicro/devenv/mplabi/index.htm UTRUSTNING Persondator typ IBM eller kompatibel. Kopplingsdäck med 5 volts matningsspänning 4 st lysdioder 4 st motstånd på ca 3-5 Ω 4 st motstånd på 2-5 kω (Ovanstående komponenter behövs inte om man har tillgång till labbdäck typ Heathkit el likn) Enchipskretsar av typ PIC16F84 Utvecklingsprogramvara:

4 TALSYSTEM Decimala talsystemet, som används i vår vardag, har tio tecken (symboler). Symbolerna,1,2,...,9 placeras sedan på ett speciellt sätt för att ange tal större än 9. Detta sätt kallas för positionssystem. Symbolens position anger dess värde eller vikt. I den talkultur vi växer upp i anger talet 11 "ett tiotal + ett ental". Barn i förskoleåldern kan lika gärna tolka 11 som 2 d.v.s. 1+1. 127=1x1 + 2x1 + x1 + 7x1 Positionernas vikt anges som ental, tiotal, hundratal, tusental o.s v. Matematiskt skrivs positionernas vikt som 1 n där n anger positionen.positionen noll () är den längst till höger alltså entalen. 1 = ental 1 1 = tiotal = hundratal o.s.v Binära talsystemet är i princip uppbyggt på likartat sätt. Bi betyder två, och anger att talsystemet har två symboler, nämligen och 1, Hur kan man då ange att ett tal är större än 1? Ja, på samma sätt som i det decimala talsystemet. Tecknens position i talet anger deras vikt. Positionsvikterna bestämmes på likartat sätt som i det decimala talsystemet. Matematiskt beskrivs positionsvikterna som 2 n. 2 = 1 2 1 = 2 2 2 = 4 2 3 = 8 2 4 = 16 2 5 = 32... 1 = 1x8 + x4 + 1x2 + x1 = 12 1 De små siffrorna till höger om talen (så kallade index) anger vilket talsystem som använts. 2 resp. 1 kallas talsystemens baser. Digitaltekniken liksom datortekniken utnyttjar det binära talsystemet, då de digitala elektriska komponenterna endast entydigt kan tolka två tillstånd. Dessa tillstånd representeras ofta av 1 = till (eller hög nivå) = från (eller låg nivå) eller som i den logiska matematiken 1 = sant (eller ja) = falskt (eller nej)

5 LOGISK ALGEBRA (BOOELSK ALGEBRA) I den logiska algebran finns tre grundfunktioner nämligen: NOT (ICKE) AND (OCH) OR (ELLER) Dessa funktioner kan jämföras med den numeriska algebrans + addition - subtraktion x multiplikation o.s.v För att illustrera logisa funktioner användes bl.a sanningstabeller. (Jämför med multiplikationstabellen). Tänk dig följande exempel på sanningstabell: Du ska göra en smörgås och har tillgång till följande pålägg: Gurka: G Smör: S Ost: O Paprika: P Smörgås betecknas med M. För att illustrera hur många olika slags kombinationer av smörgåsar med pålägg som är tänkbara görs därför en tabell. I kolummerna står 1 för ja och för nej G S O P M 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 I M-kolummen visas " sanningen ". Ettorna anger vilka påläggskombinationer som kan accepteras. (Du kan ju givetvis ha en helt annan uppfattning om påläggskombinationer!!)

6 NOT-funktionen Sanningstabell: a f 1 1 Tabellen ska läsas så att: om a = (falsk, från) så är f = 1 (sann, till) om a = 1 (sann,till) så är f = (falsk, från) Funktionen kan tecknas f = a (läses: funktionen f lika med NOT a) a kallas variabel och f funktion. Strecket ovanför a är beteckning för NOT-funktionen. AND-funktionen Sanningstabell Funktionen tecknas f a b f 1 1 1 1 1 = a b Punkten är operatorsymbol för AND-funktionen OR-funktionen Sanningstabell Funktionen tecknas a b f 1 1 1 1 1 1 1 f = a + b + -tecknet är operatorsymbol för OR-funktionen. I de funtioner som visats ovan har endast två variabler använts. Naturligtvis kan man ha ett godtyckligt antal variabler, men för att visa funktionernas egenskaper räcker det med att ta med två. Funktionerna NOT, AND och OR har, liksom en mängd andra digitala funktioner, egna symboler. Symbolen för funktionerna och dess elektriska motsvarighet kallas grind.

7 När man konstruerar en elektrisk krets som ska generera den logiska funktion säger man att funktionen realiseras. Grind-symboler NOT-grinden " NOT-ring" a 1 f a är insignal och, f utsignal. AND-grinden a b & f a och b insignaler, f utsignal. OR-grinden a b >1 f

8 REALISERING AV GRINDNÄT MED ENCHIPSPROCESSOR. Realisering av en logisk funktion betyder som tidigare nämnts att man konstruerar någonting som förverkligar det man i teorin har funderat ut. Detta kan göras på en mängd olika sätt: pneumatiskt, hydraliskt, mekaniskt, genetiskt, elektriskt för att nämna några exempel. I denna laboration ska vi använda en elektrisk komponent, som är mycket mångsidig. Enchipsprocessorn. Elektriska kretsar som realiserar digitala funktioner finns i en mängd varianter. Olika teknologier vid tillverkningen och deras speciella elektriska egenskaper har fått ge namn åt olika kretsfamiljer. TTL- (Transistor - Transistor - Logik) och HCMOS-komponenter (High Speed Complementary Metal Oxid Semiconduktor) är vanliga alternativ. En stor mängd olika funktioner finns i de så kallade TTL och HCMOS biblioteken. Enchipsprocessorer finns också i ett flertal varianter. De är programmerbara och kan därför användas till en mängd olika digitala funktioner. Den vi valt kallas PIC16F84 och tillverkas av Microchip En sådan kapsel kostar i dag (21) under 5 kr. Innan vi försöker använda den måste vi lära oss några viktiga saker om dess elektriska, fysiska egenskaper samt något om hur man programmerar den. Vi ska inte i detalj fördjupa oss i alla microprocessortermer utan enbart gå igenom de som är nödvändiga för denna kurs i digitalteknik. Först några fysiska (mekaniska) data. Kapseln har 18 ben, 9 på varje sida. Tretton ben används för kommunikation med omvärlden (I/O). Dessa tretton ben är uppdelade på två grupper; Port A med 5 ben och port B med 8 ben. Portarna kan man med enkla programmeringsinstruktioner själv bestämma om de ska vara digitala in- eller utgångar. Mycket praktiskt och användbart!! Fem ben (4, 5, 14, 15 & 16) används för processorns elektriska grundfunktioner. (Se fig. 1) Två ben (3, 6) har dubbla funktioner som både I/O och andra funktioner. En port är en grupp anslutningar som alla kan nås med en enda programinstruktion. Det finns även instruktioner som berör endast ett ben på en port. Portarna har beteckningarna RA och RB: Portarna har något olika elektriska egenskaper som vi ännu inte behöver sätta oss in i. Vi ska i huvudsak använda : PortB till Ingångar och PortA till Utgångar

9 För de inledande övningarna ska nedanstående grundkopplingsschema användas. 2 33 2 33 1 1 1 2 3 4 RA2 RA3 MCLR PIC16F84 RA1 RA 18 17 16 15 R3 33 R4 33 R5 VCC 5Vdc 5 k C1 33n VCC 5Vdc 5 14 U4 6 RB 13 U3 7 RB1 12 8 RB2 11 9 RB3 1 R7 R7 R7 R6 47K 47K 47K 47K Endast fyra av PortB s anslutningar används inledningsvis. De ska programmeras till ingångar. Med switcharna SW - SW3 ska ingångarna RB-RB3 kunna - eller 1-ställas. Fyra av PortA s ben ska användas till utgångar. Lysdioder ska visa om utgångarna är höga (1-ställda) eller låga. (-ställda) Siffrorna utanför kapselsymbolen är bennummer.

1 MICROPROCESSORENHETER Internt i kapseln, på själva processorchipset finns ett flertal olika enheter. Här ska nu ges korta beskrivningar av några: Microprocessorenhet (CPU): Till varje instruktion hör ett microprogram som lagras i CPU. PIC16F84 har 35 olika instruktioner och varje instruktion kan dessutom ha ett antal s.k. adresseringsmoder. CPU innehåller alltså en mängd olika microprogram. Styrenhet (CPU-control): Allt arbete i microprocessorn måste samordnas tidsmässigt. Styrenheten synkroniserar med hjälp av systemklockan det interna arbetet i processorn. Beräkningsenhet (ALU): Register: Sköter numeriska och logiska beräkningar-dessa beräkningar sker alltid så att resultatet lagras i arbetsregistret. Tillfällig plats för lagring av olika data. t.e.x arbetsregistret W som används vid beräkningar, programräknaren PC som ordnar så att instruktionerna kommer i rätt ordning Datariktningsregister (DDR): Innehållet i dessa register styr om en anslutning ska vara in- eller utgång. RAM: Skriv/Läs-minne som används av programmet. Här kan tillfälliga resultat av olika operationer lagras. FLASHROM: Läsminne där programmet lagras. Här kan inte information lagras under programkörningen.

11 PROGRAMMERING AV KAPSEL För skrivning av program, (editering av källkod), konvertering av program till operator och binärkod (assemblering), testning av program (simulering) samt själva överföringen av kod till kapseln (programmering), finns en utvecklingsprogramvara som heter MPLAB. Källkoden måste skrivas efter bestämda regler (syntax) En källkodsrad ska se ut så här: LABEL: OPKOD OPERAND1,OPERAND2...;KOMMENTAR LABEL: Label är ett namn som refererar till en speciell rad i källkoden. Första positionen (tecknet) i raden är reserverat för LABEL-namnet. Man kan använda upp till sju tecken på LÄGESnamnet. Om inget lägesnamn ska anges eller namnet är kortare än sju tecken hoppar man ändå till den åttonde teckenpositionen för inskrivning av operatorkoden. Använd TABtangenten. OPKOD OPKOD eller operator är en microprocessorsinstruktion. Den består av tre till fem bokstäver konstruerade som ett slags förkortning för operationen. En sådan förkortning försöker vara ett stöd för minnet om vad instruktionen utför. Därför kallas opkoderna för MNEMONICS. Ett viktigt register som används i princip hela tiden är W, Working register. Det är ett 8 bitar stort lagringsområde där processorn snabbt och enkelt kan manipulera data. Resultatet av de flesta operationer lagras i W, ex vid addition, subtraktion, logiska operationer m.m. Här följer nu exempel på några vanliga instruktioner, med mnemonic och en kort beskrivning av instruktionen.. MOVLW k Move Literal k to W Laddar ett värde till W. Vilket värde som ska hämtas bestämmes av den efterföljande operanden. Exempel. MOVLW xff ;Lagrar värdet xff i W MOVWF f Move W to f Laddar värdet i W till register f Exempel MOVWF PORTA; Laddar det värde som finns i W till port A ANDLW k And literal k with W ANDar ihop värdet I W med k och resultatet hamnar i W Exempel ANDLW x5f ; fore operation: W = xa3 ;efter operation: W = x3 SUBWF f,d Subtract W from f

12 Subtraherar register f med värdet i W-registret. Reultatet läggs i W om d= eller i f om d=1 Exempel SUBWF REG1 ; före operation: REG1 = x6 W = X2 ;efter operation: REG1 = x4 W = x2 GOTO k Goto address k Programräknaren PC får det nya värdet k, dvs programmet hoppar till den instruktion som finns vid adressen k och börjar exekvera koden från det stället. K kan vara en adress i hexadecimal form eller en label. Exempel GOTO x ;Programmet startar om från adressen x eller GOTO HITVILLJAG ;Programmet hoppar till det ställe ;där etiketten HITVILLJAG finns ;och börjar exekvera koden från det ;stället. BTFSC f,b Bit test, skip if clear Testar bit b i register f. Om b = 1 Nästa instruktion verkställs b = Nästa instruktion hoppas över Exempel BTFSC STATUS,2 ;Testar bit 2 i STATUS-register BCF PORTA,2 ;Om bit 2, STATUS-registret ;verkställs denna instruktion, ;annars inte. BCF PORTA,3 ;Denna instruktion verkställs alltid BTFSS f,b Bit test, skip if set Testar bit b i register f. Om b = Nästa instruktion verkställs b = 1 Nästa instruktion hoppas över Exempel BTFSS STATUS,2 ;Testar bit 2 i STATUS-register BCF PORTA,2 ;Om bit 2, STATUS-registret ;verkställs denna instruktion, ;annars inte. BCF PORTA,3 ;Denna instruktion verkställs alltid De sex ovan nämnda instruktionerna är några av de vanligaste. Precis som i ett vanligt språk så utgör 1 % av dess ord 9% av språket. Totalt finns 35 olika instruktioner till PIC16F84 processorn. Med ovanstående instruktioner bör Du kunna skriva det mesta av programkoden

13 OPERAND Operanden kan vara av flera slag: 1. beskriver var data ska hämtas/lagras: i minnet, en fördefinierad variabel/konstant eller i ett register 2. den data som för tillfället ska hanteras. KOMMENTARER För att göra assemblerprogam enklare att följa och förstå skrivs efter varje rad en kort kommentar. Semikolon (;) inleder alltid en kommentar. Här är nu fem rader som exempel på programkod. START BSF PORTA, ;Ettställer bit på port A CALL wait ;Anropar subfunktion wait BCF PORTA, ;Nollställer bit på port A CALL wait ; Anropar subfunktion wait GOTO START ; Gå tillbaka till instruktionen vid START ;och fortsätt exekvera kod from den ;positionen ASSEMBLERDIREKTIV Förutom de 35 processorinstruktionerna finns ett antal ASSEMBLERDIREKTIV. Dessa direktiv måste finnas för att assemblerprogramvaran ska få viktig information som den behöver när källkoden ska översättas (konverteras) till kod för enchipsprocessorn. Assemblerdirektiven är lika oavsett vilken microprocessor som källkoden skrivs för. Tre viktiga assemblerdirektiv ska nämnas här. ORG Används för att assemblerprogrammet ska ge programkoden en viss adress. Exempel: ORG x1 ;Ger programkoden den ;hexadecimala adressen 1. ORG ska placeras som en instruktion i källkoden EQU Betyder lika med.ger namn åt ett tal, kod eller en adress. Exempel: KONST EQU xc ;hexkoden xc ges namnet KONST. Källkod inleds ofta med en lista där man ger namn åt ofta förekommande koder. Detta underlättar programkonstruktionen och gör källkoden mera lättläst. EQU placeras som instruktion i källkoden. END Anger att källkoden är slut. Placeras som instruktion i källkoden.

14 PROGRAMEXEMPEL 1 Nu följer ett exempel där vi med hjälp av enchipsprocessorn ska realisera funktionen hos en TVÅ INGÅNGARS AND-grind. I detta exempel ska varje moment i hela arbetsgången gås igenom. 1. SPECIFICERA UPPGIFTEN Realisera en två-ingångars AND-grind. a b & f 2. RITA ETT FULLSTÄNDIGT KOPPLINGSSCHEMA 2 33 2 33 1 1 1 2 3 4 RA2 RA3 MCLR PIC16F84 RA1 RA 18 17 16 15 R3 33 R4 33 R5 VCC 5Vdc 5 k C1 33n VCC 5Vdc 5 14 U4 6 RB 13 U3 7 RB1 12 8 RB2 11 9 RB3 1 R7 R7 R7 R6 47K 47K 47K 47K I samtliga exempel och övningar kopplas utsignalerna via lysdioder till jord. I ett kopplingsschema behöver endast de anslutningar som används i uppgiften redovisas.

15 3. SKRIV KÄLLKOD Här följer ett exempel på hur utvecklingsprogrammet MPLAB används. Följ exemplet punkt för punkt så kommer Du att möta de delar du främst behöver av detta utveckligshjälpmedel. 1. Skapa en katalog där du vill ha dina filer 2. Starta MPLAB. START/PROGRAM/Microchip MPLAB/MPLAB. 3. Välj Options/Development Mode//Tools, stall in MPLAB SIM, PIC16F84 och tryck på Apply och sedan på OK. 4. Välj Project/New Project, bläddra till din katalog, skriv UPPGIFT1.PJT i File Name, tryck OK, OK. 5. Editorn är en ordbehandlare,med speciella egenskaper, som kan accepteras av assemblerprogrammet. Det finns en mängd finesser såsom förgmärkning av reserverade ord och debughjälp. Välj File/New och mata in följande kod i editor fönstret: LIST P=16F84 #INCLUDE P16F84.INC ORG ;Väljer processor ;Inkluderar en fil som innehåller alla vanliga ;registerdefinitioner (EQU). Bl.a. definieras att ;PORTA ligger på adress x5. ;Include-filen kan uteslutas men då måste ;definiera all använda "registernamn" själv eller ;använda den rätta adressen i koden. ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank 1 CLRF TRISA ;Hela Port A utgång MOVLW xff MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN MOVLW x3 ;Ladda W med x3 SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll X3 BTFSC STATUS,2 ;Testa om result eller 1 GOTO ETTST ;Om testet gav 1 => Ettställ PortA, bit BCF PORTA, ;Om testet gav => Nollställ PortA, bit GOTO MAIN ;Kolla en gång till ETTST BSF PORTA, ;Ettställ PortA, bit GOTO MAIN ;Kolla en gång till END

16 6. Välj File/Save as, bläddra fram till din katalog (Borde vara där redan), fyll I UPPGIFT1.ASM i rutan File Name, OK. Några kommentarer till källkoden på föregående sida. x betyder att data är skrivet som hexadecimal kod LIST P=16F84 Väljer processor #INCLUDE P16F84.INCInkluderar en fil som innehåller alla vanliga registerdefinitioner (EQU). Bl.a. definieras att PORTA ligger på adress x5. Include-filen kan uteslutas men då måste definiera all använda "registernamn" själv eller använda den rätta adressen i koden. ORG Programkoden programmeras in i kapseln med start på adressen efter ORG dvs x. Det är praktiskt att göra så eftersom resetvektor(något som pekar dit där processorn ska börja köra efter ett uppehåll) pekar på -adressen BSF STATUS, RP Väljer minnesbank 1 där porta s datariktningsregister finns. BCF STATUS,RP Åter till bank där det mesta vi behöver finns ;Huvudprogram MAIN * * ;programkod * GOTO MAIN END Detta skapar en evig slinga som processorn kör i all evinnerlig tid (till vi stänger av den) Måste finnas i slutet i varje källkodsfil. Editera Projektet: Här sätter man parametrar för projektet; Vilken processor, vilka källkodsfiler ska ingå osv 7. Välj Project/Edit Project, tryck på Uppgift1(.hex) I rutan Project Files, klicka på Add Node och markera UPPGIFT1.ASM, OK 8. I Development Mode ska det stå MPLAB-SIM, 16F84, om inte, tryck på Change och ändra det. 9. Tryck OK i Edit Project -fönstret. Assemblera koden Assemblering kallas det steg då vi gör om assemblerkoden till 1:or och :or som datorn kan förstå. Dessutom bestäms var olika delar såsom programkod, funktioner och variabler ska läggas i minnet. 1. Verktygsknappen längst till vänster används för att bläddra mellan olika verktygslådor. Blädra fram simuleringsverktygen (kännetecknas av att näst sista knappen har glasögon).

17 11. Tryck på Grön tratt som det rinner blått ur (sista knappen) för att assemblera koden. Om allt är bra ska du få en varning som ber dig kontrollera att Banks bits are correct. Om du i Build results -fönstret dubbelklickar på en varning eller felmeddelande så hamnar man i källkoden på den rad som genererade felmeddelandet. Om du fick ett felmeddelande, dubbelklicka på det och korrigera ffelet i källkoden och tryck på trattknappen igen. Simulering Simulering kallas det när man testkör programmet i datorn. 12. Ingångarnas nivåer kan styras med Debug/Simulator stimulus/asyncronous Stimuli. Då får man upp ett fönster med 12 knappar. För att kunna använda en knapp måste man först definiera vad den ska göra genom att högerklicka på den och välja vilken ingång den ska påverka och vad som ska göras med den ingången. Definiera upp två knappar för att sätta RB och RB1 höga, samt två knappar till för att sätta dem låga. 13. Ett tyck på SFR verktyget öppnar ett fönster som visar registren. 14. Ett tryck på reset-verktyget (Bild av kretsen) återställer programmet. 15. Ett tryck på steg-verktyget (två skosulor) utför en instruktion i programmet. I editor-fönstret syns vilken instruktion som står näst i tur att utföras. Stega igenom programmet och studera hur W och portarna ändras vid olika värden på RB och RB1. Observera också hur programpekaren PC pekar på nästa instruktion som ska verktällas. Vi ska använda PC senare så det är viktigt att ni förstår dess funktion. Programmering av krets 16. Anslut programmeraren till en serieport på datorn, samt spänning. 17. Sätt in en 16F84 i hållaren på programmeraren. OBS! Var noga med att placera den rätt och vända den så att pin 1 vid gropen på kreten placeras vid 12 på programmeraren! 18. Välj Picstart plus/enable programmer så söker MPLAB kontakt med programmeraren. 19. Justera följande: 2. Device 16F84 21. Oscillator(Vanligen RC) 22. Watchdog timer (vanligen OFF) 23. Power up timer(säkrast med ON) 24. Code Protect (OFF) 25. Tryck på program -knappen 26. Ta loss kapseln, koppla upp och testkör. Inkoppling +5 Volt till Vdd och MCLR (Kolla MCLR i databladet sid 41). Volt till Vss 47 el. 5 kω motstånd mellan Osc1 och Vdd. När man kommit igenom alla stegen en första gång utan att misslyckas med något så känner man sig väldigt nöjd. Diverse misslyckanden i början hör till vanligheterna vid programmering. Utvecklingsprogrammet MPLAB förenklar dock felsökning och ändring av källkoden.

18 AND-funktionen som microprocessorinstruktion. Maskning I kopplingsschemat anslöts RB2 RB7 till noll (jord) för att signaler från dessa inte skulle störa signaler från RB och RB1 när vi skulle göra en jämförelse med % 11. (OBS! de binära bitarna grupperas fyra och fyra för att göra binärkoden mera lättläst). Ett annat sätt att sålla bort ointressanta signaler är att maskera dem. Vid denna maskering används den digitala funktionen AND. Antag att W innehåller 11 11 och man vill nollställa fyra bitar längst till vänster och ha de fyra bitarna längst till höger orörda.. En AND-operation med 1111 kan ordna detta. I ett räkneschema (algoritm) kan det se ut så här: W före ANDLW 1111 ANDLW med 1111 1111 W efter ANDLW 11 För varje position utföres AND-operationen. Endast där det finns två ettor i samma position kommer det nya accumulatorinnehållet att bli en etta. Ett praktiskt sätt att nollställa signaler som för tillfället är ointressanta, som fått ett eget namn: Maskning.

19 PROGRAMEXEMPEL 2 Nu återstår att pröva ytterligare digitala funktioner. Realisering av OR-funktionen. Sanningstabell a b f 1 1 1 1 1 1 1 Kopplingsschema. (Symbolschema) 2 33 2 33 1 1 1 2 3 4 RA2 RA3 MCLR PIC16F84 RA1 RA 18 17 16 15 R3 33 R4 33 R5 VCC 5Vdc 5 k C1 33n VCC 5Vdc 5 14 U4 6 RB 13 U3 U3 7 8 RB1 RB2 12 11 U3 9 RB3 1 R7 R7 R7 R6 47K 47K 47K 47K

2 Här följer nu källkoden för en 2-ing OR-grind. LIST P=16F84 #INCLUDE P16F84.INC ORG ;Väljer processor ;Inkluderar en fil som innehåller alla vanliga ;registerdefinitioner (EQU). Bl.a. definieras att ;PORTA ligger på adress x5. ;Include-filen kan uteslutas men då måste ;definiera all använda "registernamn" själv eller ;använda den rätta adressen i koden. ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank 1 CLRF TRISA ;Hela Port A utgång MOVLW xff MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN MOVF PORTB, ;Flytta portb's innehåll till W-registret ANDLW X3 ;Maska fram de två bitarna vi är intresserade av MOVWF XE ;Flytta resultatet till adress xe MOVLW x ;Ladda W med x SUBWF xe, W ;Subtrahera det som tidigare låg på PORTB och nu ;ligger på xe med W:s innehåll x BTFSS STATUS,2 ;Testa om result eller 1 GOTO ETTST ;Om testet gav 1 => Ettställ PortA, bit BCF PORTA, ;Om testet gav => Nollställ PortA, bit GOTO MAIN ;Kolla en gång till ETTST BSF PORTA, ;Ettställ PortA, bit GOTO MAIN ;Kolla en gång till END Pröva gärna att ettställa övriga ingångar på RB. Funktionen ska inte påverkas då vi maskat bort dessa bitar

21 Laborationsuppgifter 1. 2-ing NAND (Not AND) Sanningstabell a b f 1 1 1 1 1 1 1 Kopplingsschema a b & f Komplettera kopplingsschemat med bennummer och genomför samtliga led fram till testning av funktionen. 2. 3-ing NAND Sanningstabell a b c f 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Kopplingsschema a b c & f Komplettera kopplingsschema, skriv källkod och simulera.

22 3. 2-ing NOR-grind Sanningstabell a b f 1 1 1 1 1 Kopplingsschema Komplettera kopplingsschema. Skriv källkod och simulera. 4. 3-ing NOR-grind Sanningstabell a b c f 1 1 1 1 1 1 1 1 1 1 1 1 1 Kopplingsschema. a b c > 1 f Välj lämpliga ben för anslutning av signalerna a,b,c och f. Komplettera kopplingsschemat, skriv källkod och simulera..

23 Kombinatoriska kretsar. (Kombinatorik) Digitala system är ofta sådana att funktionen inte kan beskrivas med enkla AND,NAND, OR, NOR-grindar, utan man måste kombinera ett flertal grindar. En del av dessa enkla, vanligt förekommande, digitala system har fått egna namn och symboler. EXOR oxh EXNOR är sådana digitala funktioner. EXOR. Sanningstabell a b f 1 1 1 1 1 1 Symbol a b =1 f Det boolska funktionsuttrycket blir f = ab + ab "Ettorna" i tabellens funktionsuttryck plockas ut och bildar en summa av produkter. Första tillfället där f=1 ser vi att a= och b=1. Detta skrivs som ab. EXOR-grinden är så vanlig att den har fått en egen operatorsymbol. f = ab + ab skrivs som f = a b är en icke Booelsk operator., det vill säga de logiska lagarna gäller i allmännhet inte för EXOR-funktionen.

24 EXNOR EXNOR (XNOR) är den inverterande EXOR (XOR)-funktionen Sanningstabell Symbol a b f 1 1 1 1 1 1 a b =1 f Realisering av EXOR Kopplingsschema 2 33 2 33 1 1 1 2 3 4 RA2 RA3 MCLR PIC16F84 RA1 RA 18 17 16 15 R3 33 R4 33 R5 VCC 5Vdc 5 k C1 33n VCC 5Vdc 5 14 U4 6 RB 13 U3 U3 7 8 RB1 RB2 12 11 U3 9 RB3 1 R7 R7 R7 R6 47K 47K 47K 47K

25 Källkod LIST P=16F84 #INCLUDE P16F84.INC ORG ;Väljer processor ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank 1 CLRF TRISA ;Hela Port A utgång MOVLW x1f MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN MOVLW x1 ;Ladda W med x1 SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll X1 BTFSC STATUS,2 ;Testa om result eller 1 GOTO ETTST ;Om testet gav 1 => Ettställ PortA, bit MOVLW x2 ;Ladda W med x2 (1) SUBWF PORTB, W ;Subtrahera PORTB med W:s innehåll X1 BTFSC STATUS,2 ;Testa om result eller 1 GOTO ETTST ;Om testet gav 1 => Ettställ PortA, bit BCF PORTA, ;Om testet gav => Nollställ PortA, bit GOTO MAIN ;Kolla en gång till ETTST BSF PORTA, ;Ettställ PortA, bit GOTO MAIN ;Kolla en gång till END Källkodsbeskrivning Här jämför vi med de insignalskombinationer som ska ge en etta ut. När vi jämfört med alla signaler som ska ge ett ut och inte hittar någon kombination som medför uthopp till SET så ska PB nollställas. OBS!! I koden finns ingen maskning av insignalerna. Infoga själv maskning i källkoden ovan 5. Realisera en digital funktion med nedanstående sanningstabell. Rita fullständigt kopplingsschema, skriv källkod och simulera. a b c f 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

26 Utsignalen kopplas via en lysdiod till jord. 6. En digital funktion beskrivs med booelsk algebra på följande sätt f = abc + ab c + ab c Realisera med PIC16F84. Rita kopplingsschema, skriv källkod, simulera och koppla upp. 7. En digital krets har 5 st insignaler och en utsignal. Dess logiska funktion ska vara sådan att om exakt tre av insignalerna är höga ska utsignalen bli hög. Beskriv med sanningstabell, rita kopplingsschema, skriv källkod, simulera och koppla upp.

27 Ytterligare instruktioner för att underlätta källkodsskrivning. SUBRUTIN Vad menas med SUBRUTIN? Väldigt ofta behöver man samma programrutin vid flera tillfällen. Vid assemblerprogrammering finns, liksom i övrig programmering, möjlighet att anropa programrutiner genom att använda särskilda hopp -instruktioner. De instruktioner som används är: CALL k ;JUMP TO SUBROUTINE k Då görs ett uthopp i programmet till det ställe som anges efter CALL. Exempel CALL RUTIN1 Subrutinen måste då ges namnet RUTIN1 och skall avslutas med RETURN RETURN ;RETURN FROM SUBROUTINE Denna instruktion medför ett återhopp till instruktionen efter uthoppsinstruktionen. Exempel RUTIN1 MOVWF PORTA ;Lägg ut utsignalen på port A RETURN Man kan anropa subrutiner i subrutiner i subrutiner -Detta kallas nästlade subrutinanrop I många processorer är det tillgängligt minne som begränsar antalet nästlade subrutinanrop. I PIC16F84 är det dock begränsat till åtta nästlade anrop. Ett exempel på nästlade anrop i två nivåer: 1 2 RUTIN1 PROGRAMKOD * CALL RUTIN1 * 4 PROGRAMKOD * * CALL RUTIN2 * RETURN 3 RUTIN2 PROGRAMKOD * * RETURN Observera att CALL inte kan ersättas av GOTO. Vid instruktionen CALL lagras nämligen återhoppsadressen i ett register, så att programmet kan hitta tillbaka vid RETURN. Vid GOTO lagras ingen återhoppsadress, så programmet kan inte hitta tillbaka.

28 GOTO används bara när man vill flytta till ett annat ställe i koden och fortsätta exekvera koden på det nya stället som om inget har hänt. SÖKA VÄRDEN I EN TABELL MED HJÄLP AV INDEX Ett vanligt sätt att hitta värden för en funktion är att samla dem i en tabell. När man vill hämta värden ur en sådan tabell till W-registret kallas det för att man laddar W-registret indexerat. Att söka värden i en i förväg upprättad tabell med data, är mycket vanligt rutin för en microprocessor. I många processorer finns ett speciellt register, indexregistret, som används för hitta rätt värde i den tabell man upprättat. Hos PIC16F84 finns dock inget sådant register så man måste hitta ett annat sätt att lösa det hela. Vi använder ett indirekt sätt att indexera genom att påverka programpekaren PC. Vi använder den ngt speciella instruktionen RETLW k ;Return with Literal k in W som används så här: CALL TABLE ;W contains table offset value ;W now has table value TABLE ADDWF PC ;W = offset RETLW k1 ;Begin table RETLW k2 ; RETLW k3 ; RETLW k4 ; RETLW kn ; End of table 1. Vi anropar TABLE någonstans I vårt huvudprogram med ett bestämt värde i i W-registret. Det är detta värde som vi senare ska använda som index i vår sökning i tabellen 2. Det första vi gör i TABLE är att vi adderar vårt index som finns i W-registret med programpekarens innehåll och lägger innehållet i PC. Hade vi tex siffran i=3 kommer pprogrampekaren nu att peka på RETLW k3 som kommer att återvända till huvudprogrammet med k3 s värde i W-registret Följande källkodsexempel som läser in ett tal på port B och lägger ut så många ett:or på port A visar på användningen av en tabell 1. läser av port B. 2. Anropar kodavsnittet vid TABLE 3. Återvänder från TABLE med värdet på den plats i tabellen som motsvarar värdet på port B i W-registret. 4. Skriver ut värdet på port A MAINTAB MOVF PORTB, ;1 CALL TABLE ;2 MOVWF PORTA ;4 GOTO MAINTAB TABLE ADDWF PCL ;W = offset RETLW x ;Begin table RETLW x1 ; RETLW x1 ; RETLW x2 ; RETLW x1 ; ;3

29 RETLW x2 ; RETLW x2 ; RETLW x3 ; END Här kan vi nu riktigt se den uppenbara fördelen med att använda enchipsprocessorn för att realisera digitala funktioner. Vi behöver endast en krets. Även om funktionen är mycket komplicerad klarar vi oss med en enda kapsel, nämligen enchipsdatorn. 8. Realisera nedanstående sanningstabell med hjälp av tabell c b a f4 f3 f2 f1 hexkod? 1 1 x5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 a-c är insignaler, f4-f1 utsignaler. Tips: Skriv programmet så att bitarna f4-f1 behandlas som en enda 8-bitars port. Som ett förberedande led kan därför kolumnen hexkod fyllas i. Rita Komplett kopplingsschemat och skriv tabellen. Skriv källkod och simulera. 9. Realisera en fyra-bitars kodomvandlare BIN - GRAY. Rita ett fullständigt kopplingsschema, skriv källkod och simulera. BINÄR GRAY B3 B2 B1 B G3 G2 G1 G 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1. Realisera den digitala funktionen i uppgift 5 med tekniken att använda tabell i källkoden. 11. Kodlås Realisera sista uppgiften i laboration D161 med en PIC16F84. Observera att du kanske måste växla och omdefiniera riktningarna på portarna.

31 SEKVENSKRETSAR En ofta förekommande digital konstruktion kallas för SEKVENSKRETS. De funktioner som vi hitintills lärt oss att realisera har också ett gemensamt namn nämligen KOMBINATORISKA. För dessa två grupper av digitala funktioner gäller följande definitioner: KOMBINATORISK KRETS : Utsignalerna bestämmes enbart av insignalernas värden SEKVENSKRETS : Utsignalerna bestämmes av insignalerna och kretsens tidigare tillstånd. De två typerna av funktioner kan illustreras med nedanstående bilder: KOMBINATORISK KRETS SEKVENSKRETS i1 i2 insignaler TORISK u1 u2 utsignaler In KOMBINA- Kombinatorisk Ut in KRETS un krets Minne för tidigare tillstånd

32 Tillståndsdiagram. (Automat, State Machine) För att illustrera och beskriva en sekvenskrets funktion används tillståndsdiagram. PROGRAMEXEMPEL 3 tillstånd med tillståndsbeteckning (tillstånds-) övergång S S1 S3 S2 Denna sekvenskrets har fyra tillstånd, S, S1, S2, S3. Tillståndsdiagrammet visar hur en övergång från ett tillstånd till ett annat kan ske. I detta exemp el finns inga egentliga insignaler eller utsignaler. En fullständigt meningslös funktion. Genom att komplettera diagrammet något kan en mera meningsfull sekvenskretsfunktion åstadkommas. S/Z S1/Z1 S3/Z3 S2/Z2 Z, Z1, Z2, Z3 anger vilka utsignaler som ska genereras av de olika tillstånden. Denna typ av tillståndsdiagram där utsignalerna är knutna till tillstånden kallas för en MOORE-automat.

33 Varje utsignalvariabel svarar mot en utsignalkod: Utsignal Kod Z 1 1 Z1 1 1 Z2 1 1 Z3 1 1 I detta exempel är ordningen på tillstånden given. Z, Z1, Z2, Z3,Z, Z1,Z2, o s v. Inga insignaler kan påverka ordningen Här följer kopplingsschema samt förslag på källkod. Observera att denna tillståndsmaskin inte klockas på vanligt sätt med en klockingång. Tillståndsmaskinen går själv mellan tillstånden med intervall som bestäms av en tidsfördröjningsrutin (WAIT). Tidsfördröjningen kan ändras genom att ändra några värden i WAITrutinen. Kopplingsschema. 33 33 2 2 1 1 1 2 3 RA2 RA3 PIC16F84 RA1 RA 18 17 16 R3 33 R4 33 R5 VCC 5Vdc 5 k C1 4 MCLR 15 33n VCC 5Vdc 5 14 6 RB 13 7 RB1 12 8 RB2 11 9 RB3 1 Utsignalerna på port A kopplas till lysdioder för att indikera utsignaler.

34 Källkod. LIST P=16F84 #INCLUDE P16F84.INC ;Väljer processor ;Inkluderar en fil som innehåller alla vanliga ;registerdefinitioner (EQU). Bl.a. definieras att ;PORTA ligger på adress x5. ;Include-filen kan uteslutas men då måste ;definiera all använda "registernamn" själv ;eller använda den rätta adressen i koden. VAR1 EQU xc VAR2 EQU xd VAR3 EQU xe TILLST EQU x3c ;Variabel för nuv. tillstånd att läggas ORG ;Startar på vid reset BSF STATUS, RP ;Väljer minnesbank 1 CLRF TRISA ;Hela Port A utgång MOVLW x1f MOVWF TRISB ;Hela Port B ingång BCF STATUS,RP ;Åter till Bank ;Huvudprogram MAIN S CALL WAIT ;Anropar subrutin WAIT CLRF TILLST ;Clearar variabeln TILLST som representerar tillståndet MOVF TILLST, ;Flyttar tillståndets värde till W-reg. CALL UT ;Anropar UT med nuv. tillståndet i W S1 CALL WAIT INCF TILLST ;Går till nästa tillstånd MOVF TILLST, CALL UT S2 CALL WAIT INCF TILLST MOVF TILLST, CALL UT S3 CALL WAIT INCF TILLST MOVF TILLST, CALL UT GOTO MAIN ; *** SUBRUTIN WAIT *** WAIT MOVLW X1 ;Ändra Literal för att få egna värden på fördröjningen MOVWF VAR3 ;Lagra W i VAR3 LOOP3 MOVLW x77 ;Ändra Literal för att få egna värden på fördröjningen MOVWF VAR2 ;Lagra W i VAR2 LOOP2 MOVLW xaa ;Ändra Literal för att få egna värden på fördröjningen MOVWF VAR1 ;Lagra W i VAR LOOP1 DECFSZ VAR1,1 ;Räkna ner VAR1 med ett till VAR1 =, då går vidare GOTO LOOP1 DECFSZ VAR2,1 ;Räkna ner VAR2 med ett till VAR2 =, då går vidare GOTO LOOP2 DECFSZ VAR3,1 ;Räkna ner VAR3 med ett till VAR3 =, då går vidare GOTO LOOP3

35 RETURN ; ; HÄR FÖLJER NU DEN SUBRUTIN SOM GER UTSIGNALER ; FÖR VARJE TILLSTÅND. UT CALL TABLE ;Se tidigare exempel MOVWF PORTA ;Lägg ut utsignalen på port A RETURN TABLE ADDWF PCL RETLW x3 RETLW x6 RETLW xc RETLW x9 ;Ger utsignalerna; 11, 11, 11 el 11 beroende på ;nuv. tillstånd. END Källkoden ovan behöver några förklaringar. Inledningen är som tidigare i huvudsak en standardstart. Några nya definitioner av namn har tillkommit: VAR1 EQU xc VAR2 EQU xd VAR3 EQU xe TILLST EQU x3c är minnesceller i den så kallade LÄS/SKRIV -delen av minnet Vi definierar en position(adress) i minnet som vi kan skriva till och läsa från. Perfekt om vi vill lagra undan värden i variabler och sedan kunna ändra när vi vill. Sedan ger vi alla dessa adresser en etikett så vi lätt kan hitta dessa. Ger lättare programmering. TILLST är en variabel som används i huvudprogrammet och VAR1, VAR2 och VAR3 används i en subrutin som kallas WAIT. Efter VAR1 EQU xc Hänvisar vi till adressen xc varje gång vi använder VAR1 Ex.vis är: MOVWF VAR3 och MOVWF xe exakt samma instruktion i vårt program (Flyttar värdet som finns i adressen xe till W-registret). Subrutinen WAIT Många av microprocessorns instruktioner har en exekveringstid på cirka 1 µs, det vill säga den tid det tar att utföra en instruktion. Med denna hastighet hinner vi aldrig med att se vad som händer med våra utsignaler. Frödröjningsrutiner skapas därför ofta med den enda funktionen att fördröja exekveringen. En eller flera minnesceller laddas med tal, för att sedan i så kallade nästlade loopar räknas ned till noll. Studera gärna mera i detalj hur WAIT-rutinen är konstruerad. Denna programrutin är en standardkonstruktion. OBSERVERA! Under utveckling och simulering av källkoden laddas minnescellerna med små tal, ofta ett (1). I annat fall blir simuleringstiden onödigt lång. Programkod simuleras nämligen inte lika snabbt som den exekveras i den riktiga microprocessorn. Huvudprogrammet är konstruerat så att i varje tillstånd anropas subrutiner för de uppgifter som ska utföras. Subrutinen UT kan i en tabell hämta värde på utsignal.

36 12. Laborationsuppgift. Ändra i exempelprogram 3 så att WAIT-subrutinen byts ut mot en CLOCK-subrutin, som läser av en ingång, RB. Varje gång en ny puls kommer på ingången ska tillståndsmaskinen gå vidare till nästa tillstånd. 13. Laborationsuppgift. Tillståndsdiagrammet nedan ska illustrera en hiss i en byggnad med fyra våningar. Utsignalerna (Z) beror enbart av det tillstånd (S) man befinner sig. Insignalerna (I) anger till vilken våning hissen ska. Rita kopplingsschema, skriv källkod och simulera.. I3 S3/Z3 I3 I2,I1,I S2/Z2 I2 I2,I3 I1,I S1/Z1 I1 I1,I2,I3 I S/Z I

37 14. Laborationsuppgift Realisera sista uppgiften i laboration D162 med en PIC16F84 15. Laborationsuppgift Denna uppgift är en variant på uppgift 13. Här ska ytterligare två utsignaler genereras. Den ena har beteckningen UPP och den andra NER. UPP ska genera 4 pulser med frekvensen 5 Hz på PB7 samt en hög nivå på PB6. NER ska generera samma pulsskur på PB7 men en låg nivå på PB6. Rita kopplingsschema, skriv källkod, simulera och koppla upp. I denna laboration kan en stegmotor och en stegmotor-drivkrets användas för att realisera en mera verklighetstorgen hissanordning. I3/Z3 S3/Z3 I3/UPP I2,I1,I/NER S2/Z2 I2/Z2 I2,I3/UPP I1,I/NER S1/Z1 I1/Z1 I1,12,13/UPP I/NER S/Z I/Z Redovisning skriftligt och praktiskt enligt examinationskraven för aktuell kurs. Normalt ska skriftlig redovisning innehålla: förarbete (nåt slags resonemang om avvägningar och beräkningar som ligger till grund för den lösning man väljer) inkl. kodning av in- och utsignaler Assembler-kod Simuleringsresultat med ett urval intressanta sekvenser (bl.a. komplett uppräkning och komplett nedräkning) och praktisk redovisning bestå av att visa upp en fungerande koppling för labhandledare.

38 I slutänden är det examinationsvillkoren för aktuell kurs som har sista avgörandet. För elektro HT21 redovisas uppgifterna 8 & 11 skriftligt och genom visad uppkoppling.