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

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

Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer

Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

Övningsuppgifter i Mikrodatorteknik för U2

Föreläsningsanteckningar till Konstruktionsmetoder

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

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

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

INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN

Digital- och datorteknik

Tentamen PC-teknik 5 p

Tentamen PC-teknik 5 p Lösningar och kommentarer

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

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

Kontrollskrivning Mikrodatorteknik CDT S2-704

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

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

Programexempel 1 AND-funktionen

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

#include <pic.h> #include <sys.h> char LEFT,RIGHT,MOTORHASTIGHET;

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

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist

Microprocessor / Microcontroller

Laboration nr2 med enchipsdatorn PIC-16F877

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

Föreläsningsanteckningar 2. Mikroprogrammering I

PROTOTYPUTVECKLING AV DIGITALT

Tentamen PC-teknik 5 p Lösningar och kommentarer

Realtidsprogrammering

Tentamen PC-teknik 5 p

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

Lösningar till tentamen i EIT070 Datorteknik

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Digital- och datorteknik

Laboration D164. ELEKTRONIK Digitalteknik. Digitalteknik med enchipsdatorer

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

Construction of a laboration card with the PIC-processor

Digital- och datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Lathund. C för inbyggda system

Tentamen PC-teknik 5 p

Digital- och datorteknik

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Tentamen. Datorteknik Y, TSEA28

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

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

Tentamen. Datorteknik Y, TSEA28

Assemblerprogrammets struktur; exempel

Lathund. C för inbyggda system

F5: Högnivåprogrammering

F5: Högnivåprogrammering

CE_O3. Nios II. Inför lab nios2time

Tentamen Systemkonstruktion

FÖRORD...3 MEMEC SCANDINAVIA AB...3

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

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

Tentamen. Datorteknik Y, TSEA28

Tentamen PC-teknik 5 p Lösningar och kommentarer

Maskinorienterad Programmering 2010/11

3. Mikroprogrammering II

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

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

TSEA28 Datorteknik Y (och U)

Exempel 3 på Tentamen

Programexempel för FLEX

LEU240 Mikrodatorsystem

Övning2 Datorteknik, HH vt12 - Programmering

Laboration 2 i Datorteknik- Assemblerprogrammering II

Systemkonstruktion SERIEKOMMUNIKATION

Tentamen. Datorteknik Y, TSEA28

Extrauppgifter för CPU12

TSEA28 Datorteknik Y (och U)

F4: Assemblerprogrammering

TSEA28 Datorteknik Y (och U)

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

Styrenheten styrsignalsekvenser programflödeskontroll

Tentamen. Datorteknik Y, TSEA28

A-del motsvarande KS1

Tentamen. Datorteknik Y, TSEA28

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

Det finns en hemsida. Adressen är

"Crash Course in Programming"

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

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.

Att använda pekare i. C-kod

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Laboration Datorteknik TSIU02 2. I/O-programmering

Grundläggande datavetenskap, 4p

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

Digital- och datorteknik

Mikroprogrammering I

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

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Tenta i Digitalteknik

Transkript:

Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer Program: Elektroteknik Datum: 03-08-17 Tid: 10:00-15:00 Lokal: E171 Hjälpmedel: Linjal, miniräknare, Datablad: MC60705 och PIC16F84 (Utdelas och återlämnas.) Bilaga: Include-fil för PIC16F84 Examinator: Anders Arvidsson Telefon: 036-15 61 12, 0707-76 28 86 Examinatorn besöker tentamen. Uppgifterna i del A redovisas direkt i frågebladet eller på separat ark, vilka då ska numreras och hänvisas till från uppgiftsbladet. Uppgifterna i del B redovisas enbart på separat ark. Max poäng: 25 Betyg Poäng 3 10 4 15 5 20 1 (10)

Tentamensfrågor, del A Redovisa svaren direkt i frågebladet. Med PIC:en avses nedan PIC16F84 och med 705:an avses MC68705P3. Inga include-filer eller deklarationer förutsätts gjorda om inget annat anges. 1. Nedanstående instruktioner utförs i 705:an. Beskriv ackumulatorns innehåll, i binär form, efter att instruktionerna utförts. (2 p) LDA #4 COM A INC A NEG A A: 0000 0100 (COM + INC = NEG) 2. PIC:en och 705:an skiljer sig ganska mycket beträffande arkitektur. Redogör för dessa skillnader (vilken processor som har vilken arkitektur) och vad de innebär (i grova drag). Nyckelord: Harvard/von Neumann, CISC/RISC, pipeline, mikroprogram (4 p) PIC är en processor byggd på Harvardarkitektur, vilket innebär att program och data ligger i separata minnen. Denna arkitektur är lätt att pipelina och PIC har en tvåstegs pipeline, vilket dubblerar exekveringshastigheten. Instruktionsuppsättningen är av typen RISC, d v s få och måttligt komplexa instruktioner som exekveras genom avkodning och styrning av ett kombinatoriskt nät (i fyra sekventiella steg). 705:an är av CISC-processor med von Neumann arkitektur. Instruktioner och data ligger i samma minne. De många och ibland komplexa instruktionerna exekveras som mikrokod, vilken kan ta olika lång tid att exekvera beroende på instruktionens komplexitet. 705:an saknar pipeline (men observera att det finns CISC-processorer med Pipeline, t ex från Intel). 2 (10)

3. Redogör för skillnaden mellan relativ och absolut adressering i 705:an. Exemplifiera också med instruktioner. (3 p) Vid relativ adressering anger operanden hur långt framåt eller bakåt i koden programpekaren ska hoppa. Eftersom skillnaden i adress (mot aktuellt värde på programpekaren) anges med en byte är länden på hoppen begränsade (ca 127 - +129 steg). Exempel på instruktion BRA. Vid absolut adressering anger operand(erna) vart programpekaren ska peka. Exempel på instruktion JMP. 4. Vilken hex-kod kommer att genereras av nedanstående assemblerinstruktion för PIC:en? ORG.10 Test GOTO Test Svara hexadecimalt. (1 p) Svar: 280A 3 (10)

5. Nedan visas två subrutiner skrivna för PIC:en (P16F84.INC inkluderad) respektive 705:an. Analysera rutinerna och fyll i tabellen nedan. Flaggornas status och arbetsregistrens innehåll ska anges efter att återhopp utförts. Arbetsregistrenas innehåll anges decimalt. (Observera att DC-flaggans värde efter PIC-rutinen ej behöver anges. Fyra korrekta svar ger 3 p / processor). (6 p) Rutin för PIC:en. Anropas med W = 22 dec. MSD och LSD är variabler deklarerade i RAM. BinBCD CLRF MSD MOVWF LSD SUBLOOP MOVLW.10 SUBWF LSD,W BTFSS STATUS,C GOTO PACKA MOVWF LSD INCF MSD,F GOTO SUBLOOP PACKA SWAPF MSD,W IORWF LSD,W NOP RETURN Rutin för 705:an Tid Byte Flaggor MCSub CLR A 4 1 --NZ- ADD #1 2 2 h-nzc DEC A 4 1 --nz- CLI 2 1 -i--- RTS 6 1 ----- Efterfrågad uppgift PIC:en 705:an Programminne som åtgår 13 Word 6 Byte Exekveringstid 28 Cykler 18 Cykler Arbetsregistrets innehåll W = 34 (=22 hex ) ACC = 0 Flaggors status Z = 0 C = 0 H = 0 I = 0 N = 0 Z = 1 C = 0 4 (10)

Del B Redovisa svaren på separat papper. Programmen ska delas in i block och förses med beskrivande kommentarer. Rörig (svårläst) struktur ger poängavdrag. Påbörja ny uppgift på nytt ark. För att slippa skriva om så mycket vid strukturella förändringar i koden kan det vara lämpligt att också skriva subrutiner på separata ark. 6. En reklamskylt i en butik kan visa 16 olika meddelanden. Vilket meddelande som för tillfället visas ställs in med en vridströmställare för hexkod, som ser ut enligt bilden: Vredet ger talen 0 15 på fyra pinnar. Pinnarna är anslutna till Port A bit 0 3. Problemet är att när mönsterkortet ritades visade det sig smidigare att vända på ordningen på bitarna så mest signifikant bit kopplas till A0, näst mest signifikant till A1 o s v Skriv en subrutin för 705:an som i ackumulatorn returnerar det tal som är inställt på vredet, med bitarna i rätt ordning. Rätt tal ska returneras oavsett vad som ligger på övriga bitar i port A. Om några variabler används ska du ange hur dessa ska deklareras. (2 p) Se lösning i nästa uppgift. 7. Skriv ett exekverbart program för 705:an som använder subrutinen ovan för att läsa in hexvredet. Om (och endast om) en förändring sker ska talet skickas seriellt till skylten. Kommunikation med skylten sker seriellt enligt nedanstående protokoll: Data, bit nr 3 2 1 0 Klocka Diagrammet illustrerar vad som ska skickas från 705:an. På första positiva klockflanken samplar displayen MSB, på sista LSB. (Biten måste alltså ligga ute före och under klockflanken.) Tiden mellan två positiva klockflanker får inte vara större än 1 ms. Efter sista klockpulsen måste klockan ligga låg minst 10 ms innan nästa tal får skickas, Detta för att mottagaren i skylten ska veta att det är MSB som kommer nästa gång. Välj själv portar för klocka och data. Gör själv indelning i lämpliga subrutiner, men programmet ska innehålla en subrutin som skiftar ut data till displayen. Förändringar på vredet måste upptäckas inom 100 ms. Som oscillator används ett RC-nät som ger 2 MHz ±20%. Inga deklarationer får förutsättas vara gjorda. (3 p) Lösningsförslag på nästa sida. 5 (10)

;*** SFR PORTA EQU 0 DDRA EQU 4 ;*** Bitar i port A SCLK EQU 6 ;Seriell klocka ut SDA EQU 7 ;Seriell klocka ut ;*** RAM ORG 16 TEMP DS 1 A_COPY DS 1 OLDVRED DS 1 ;*** Program ORG 128 INIT: CLR PORTA ;Börja med klocka låg LDA #%11000000 STA DDRA ;Klocka och data ut, resten in CLR OLDVRED MAIN: JSR READ_VRED ;Läs in vred CMP OLDVRED ;Jämför med föregående BNE UPDATE ;Om ej lika, uppdatera BRA MAIN UPDATE: STA OLDVRED ;För att kunna finna olikhet JSR SEND_DATA ;Skicka seriell data BRA MAIN ; *** Läser in hexvred och returnerar talet i A ; Porten sparas i en variabel för att inte läsa fel tal om ; vredet ändras medan rutin körs. (Ej krav på tentan.) ; "Lokala" variabler att deklarera: ; TEMP DS 1 ; A_COPY DS 1 READ_VRED: CLR TEMP ;Nollställ temp-variabel LDA PORTA STA A_COPY msb: BRCLR 0,A_COPY,bit2 BSET 3,TEMP ;Om MSB satt bit2: BRCLR 1,A_COPY,bit1 BSET 2,TEMP ;Om bit 2 satt bit1: BRCLR 2,A_COPY,lsb BSET 1,TEMP ;Om bit 1 satt lsb: BRCLR 3,A_COPY,READ_END BSET 0,TEMP ;Om LSB satt READ_END: LDA TEMP RTS ; *** Skickar innehållet i A seriellt till display ; Då endast fyra bitar skickas görs detta lite "slösaktigt" ; "Lokal" variabel att deklarera: ; TEMP DS 1 SEND_DATA: STA TEMP BCLR SDA,PORTA ;Nollställ databit BRCLR 3,TEMP,SEND_msb BSET SDA,PORTA ;Om databit hög SEND_msb: BSET SCLK,PORTA ;Skicka på stigande flank 6 (10)

BCLR SCLK,PORTA ;Återställ klocka BCLR SDA,PORTA ;Nollställ databit BRCLR 2,TEMP,SEND_bit2 BSET SDA,PORTA ;Om databit hög SEND_bit2: BSET SCLK,PORTA ;Skicka på stigande flank BCLR SCLK,PORTA ;Återställ klocka BCLR SDA,PORTA ;Nollställ databit BRCLR 1,TEMP,SEND_bit1 BSET SDA,PORTA ;Om databit hög SEND_bit1: BSET SCLK,PORTA ;Skicka på stigande flank BCLR SCLK,PORTA ;Återställ klocka BCLR SDA,PORTA ;Nollställ databit BRCLR 0,TEMP,SEND_bit0 BSET SDA,PORTA ;Om databit hög SEND_bit0: BSET SCLK,PORTA ;Skicka på stigande flank BCLR SCLK,PORTA ;Återställ klocka JSR DELAY_20 ; Lägg linjen i vila ca 20 ms RTS ; *** Skapar ca 20 ms fördröjning för att säkerställa mellanrum ; 10 ms mellanrum krävs, men pga onoggrannhet i oscillatorn väljs längre tid ; Oscillator 2 MHz => 2 us cykeltid => 10 000 c krävs DELAY_20: LDA #200 DELAY_LOOP: BSR SHORT_D ; 14 c BSR SHORT_D ; 14 c BSR SHORT_D ; 14 c DEC A ; 4 c BNE DELAY_LOOP ; 4 c => 50 c loop RTS ; *** Anrop (BSR) och återhopp tar 14 c SHORT_D: RTS ;*** MOR ORG 1924 DB 128 ;RC-n t ;*** Resetvektor ORG 2046 DW INIT END 7 (10)

8. Skriv ett fullständigt program för PIC:en som genererar ett rinnande ljus på port B. En etta ska till synes skiftas åt vänster (från LSB mot MSB). Detta ska ske genom att processorn vid stigande flank på port A, bit 0 (som är en ingång), hämtar ett nytt värde ur en tabell som ligger i programminnet och lägger detta på porten. Ljuset kommer alltså att skifta med samma frekvens som läggs på port A. Bifogad include-fil får inkluderas i programmet. Rita även ett litet schema som visar inkoppling av en 4 MHz kristall med tillhörande komponenter (med värden) och övriga anslutningar (t ex matningsspänning) som behövs. Strömmen genom dioderna ska vara 10 20 ma. (4 p) Se schema på nästa sida. Lösningsförslag: include "p16f84.inc" OFFSET EQU.12 ;Tabelloffset ORG.0 ;Program börjar på adress 0 ;*** Initiering Init bsf STATUS,RP0 ;Byt till bank 1 movlw b'00000001' movwf TRISA ;Port A, bit 0, ingång clrf TRISB ;Hela port B utgång bcf STATUS,RP0 clrf OFFSET ;Börja med etta till höger ;*** Huvudprogram Main btfss PORTA,0 goto Main ;Väntar på positiv flank movf OFFSET,W ;Hämta det tal som ligger på... CALL Ljustab ;position OFFSET ur tabellen... movwf PORTB ;och lägg ut det på PORTB. incf OFFSET,F ;Peka på nästa tal i tabellen btfsc OFFSET,3 clrf OFFSET ;Nollställ OFFSET om större än 7 Wait_n btfsc PORTA,0 ;Väntar på negativ flank goto Wait_n goto Main ;*** Tabell för rinnande ljus Ljustab addwf PCL,F ;Addera OFFSET till programpekare retlw b'00000001' retlw b'00000010' retlw b'00000100' retlw b'00001000' retlw b'00010000' retlw b'00100000' retlw b'01000000' retlw b'10000000' END 8 (10)

Schema till uppgift 12: Kapacitanserna bör ligga inom 15 33 pf enligt datablad, sidan 39. 9 (10)

Bilaga, include-fil till PIC P16F84.INC W EQU H'0000' F EQU H'0001' ;----- Register Files ----- INDF EQU H'0000' TMR0 EQU H'0001' PCL EQU H'0002' STATUS EQU H'0003' FSR EQU H'0004' PORTA EQU H'0005' PORTB EQU H'0006' EEDATA EQU H'0008' EEADR EQU H'0009' PCLATH EQU H'000A' INTCON EQU H'000B' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' EECON1 EQU H'0088' EECON2 EQU H'0089' ;----- STATUS Bits ----- IRP EQU H'0007' RP1 EQU H'0006' RP0 EQU H'0005' NOT_TO EQU H'0004' NOT_PD EQU H'0003' Z EQU H'0002' DC EQU H'0001' C EQU H'0000' ;----- INTCON Bits ----- GIE EQU H'0007' EEIE EQU H'0006' T0IE EQU H'0005' INTE EQU H'0004' RBIE EQU H'0003' T0IF EQU H'0002' INTF EQU H'0001' RBIF EQU H'0000' ;----- OPTION Bits ----- NOT_RBPU EQU H'0007' INTEDG EQU H'0006' T0CS EQU H'0005' T0SE EQU H'0004' PSA EQU H'0003' PS2 EQU H'0002' PS1 EQU H'0001' PS0 EQU H'0000' 10 (10)