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

Föreläsningsanteckningar till Konstruktionsmetoder

INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN

Övningsuppgifter i Mikrodatorteknik för U2

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

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

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

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

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Tentamen PC-teknik 5 p

Kontrollskrivning Mikrodatorteknik CDT S2-704

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

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

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

Digital- och datorteknik

Programexempel 1 AND-funktionen

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

Microprocessor / Microcontroller

Tentamen PC-teknik 5 p Lösningar och kommentarer

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

Realtidsprogrammering

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

Tentamen PC-teknik 5 p Lösningar och kommentarer

Lösningar till tentamen i EIT070 Datorteknik

Lathund. C för inbyggda system

Lathund. C för inbyggda system

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

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

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

Digital- och datorteknik

PROTOTYPUTVECKLING AV DIGITALT

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

Laboration nr2 med enchipsdatorn PIC-16F877

Enchipsdatorer med tillämpningar LABORATION 6, ROBOT

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

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

Minnen delas in i två huvudgrupper, permanenta och icke permanenta. Non-volatile and volatile.

Digital- och datorteknik

Tentamen PC-teknik 5 p

Lösningar till tentamen i EIT070 Datorteknik

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

A-del motsvarande KS1

Laboration 2 i Datorteknik- Assemblerprogrammering II

F8: Undantagshantering

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

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Construction of a laboration card with the PIC-processor

Tentamen PC-teknik 5 p

CE_O3. Nios II. Inför lab nios2time

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

Övning2 Datorteknik, HH vt12 - Programmering

Teknisk dokumentation

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

3. Mikroprogrammering II

Tentamen. Datorteknik Y, TSEA28

Programexempel för FLEX

LABORATION. Datorteknik Y

Avbrottshantering. Övningsuppgifter

LEU240 Mikrodatorsystem

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

Lösningar till tentamen i EIT070 Datorteknik

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

7HQWDPHQLNRQVWUXNWLRQVPHWRGHU 'HOWHQWDPHQ / VQLQJDURFKNRPPHQWDUHU

LABORATION. Datorteknik Y

Digitala Projekt(EITF40) - Larm

Systemkonstruktion SERIEKOMMUNIKATION

Tentamen Systemkonstruktion

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Digital- och datorteknik

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

Digital- och datorteknik

Moment 2 Digital elektronik. Föreläsning Inbyggda system, introduktion

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

Tentamen. Datorteknik Y, TSEA28

Datakommunikation med IR-ljus.

Laboration D164. ELEKTRONIK Digitalteknik. Digitalteknik med enchipsdatorer

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

School of Mathematics and Systems Engineering. Kamerasensor. Sensor för att identifiera objekt på bilden från en videokamera.

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Att använda pekare i. C-kod

Datorprojekt, del 1. Digitala system 15 p

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

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Stack och subrutiner Programmeringskonventionen

Läsminne Read Only Memory ROM

Digitala Projekt(EITF40) - Larm

Föreläsningsanteckningar 3. Mikroprogrammering II

Effektpedal för elgitarr

Vår väg till Godkänt, och sedan vidare...

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

Assemblerprogrammering del 3

HF0010. Introduktionskurs i datateknik 1,5 hp

Övningsuppgifter i Mikrodatorteknik 4p/5p

Tentamen PC-teknik 5 p Lösningar och kommentarer

Transkript:

Tentamen Enchipsdatorer med tillämpningar Lösningar och kommentarer Program: Elektroteknik Datum: 03-05-19 Tid: 13:30-18:30 Lokal: He303 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 två instruktioner utförs i 705:an. Beskriv ackumulatorns innehåll, i binär form, efter att instruktionerna utförts. (1 p) LDA #4 NEG A A: 11111100 2. Redogör kortfattat för nedanstående begrepp. (Det räcker inte att enbart uttyda förkortningarna.) (1 p) RISC Reduced Instruction Set Computer Arkitektur med få och enkla instruktioner där man låter programmeraren bygga upp mer komplexa instruktioner med hjälp av flera små. CISC Complex Instruction Set Computer Arkitektur med instruktionsuppsättning som även innehåller komplexa instruktioner som ofta exekveras genom mikrokod. 3. Ange två fördelar med RISC jämfört med CISC. (2 p) Exempel: Enkel styrenhet och avkodning => hög klockfrekvens Homogena instruktioner => effektiv pipeline 4. Vilken av följande minnestyper är endast lämpligt att använda vid mycket stora volymer? Ringa in rätt svar. (1 p) OTP EPROM Flash EPROM EPROM EEPROM PROM ROM Då maskprogrammering används är initialkostnaden hög. 2 (10)

5. Vilken hex-kod kommer att genereras av nedanstående assemblerinstruktion för PIC:en? BTFSS INTCON,T0IF P16F84.INC anses inkluderad. Svara hexadecimalt. (1 p) 1D0B (= 01 1101 0000 1011 2 ) INCON = 0001011 2 T0IF = 010 2 6. Nedan visas en deklaration av en variabel i 705:an respektive PIC:en. Var i minnet den ligger framgår ej och behöver inte kännas till i uppgiften. 705:an TEMP DS 1 PIC:en TEMP RES 1 Uppgiften går ut på att skriva några assemblerinstruktioner så att pekarregistret i respektive processor pekar på variabeln. Skriv instruktionerna före den assemblerinstruktion som bifogas för respektive processor, så att kommentaren efter denna blir sann. För PIC:en anses P16F84.INC inkluderad. 705:an LDX #TEMP ;Ladda indexreg. med adressen för TEMP LDA,X ;Ladda ackumulatorn med innehållet i TEMP PIC:en MOVLW TEMP ;Ladda W med adressen för TEMP MOVWF FSR ;Ladda pekarreg. med adressen för TEMP MOVF INDF,W ;Ladda W med innehållet i TEMP (2 p) 7. Vilken hexkod kommer att genereras av följande instruktioner i 705:an? Skriv svaret direkt efter respektive instruktion. (2 p) LDA 256 C6 01 00 ADD #2 AB 02 STA $10 B7 10 3 (10)

8. 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 = 12 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 RETURN Rutin för 705:an MCSub CLR A DEC A ADD #1 SEI RTS Efterfrågad uppgift PIC:en 705:an Programminne som åtgår 12 Word 6 Byte Exekveringstid 19 Cykler 18 Cykler Arbetsregistrets innehåll W = 18 (=12 hex ) ACC = 0 Flaggors status Z = 0 C = 0 H = 1 I = 1 N = 0 Z = 1 C = 1 Hur PIC-rutinen fungerar framgår i filen counter.asm som tillhör Lab 5. 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. 9. Ett larm kan avaktiveras med en kod som ställs in med ett vridströmställare för hexkod, som kan se ut enligt bilden: Vredet ger talen 0 15 på port A bit 0-3. Rätt kod är talet 5. Skriv en subrutin för 705:an som testar om rätt kod är inställd, och returnerar talet 1 i ackumulatorn om så är fallet. Annars returneras 0. Rätt kod ska detekteras oavsett vad som ligger på övriga bitar i port A. (2 p) Det framgår ej i uppgiften, men PORTA får förutsättas deklarerad (annars går det bra att adressera den genom adress 0). Lösningsexempel: KODTEST: LDA #15 ;Ladda masken AND PORTA ;Maska ut hexvred, spara i A CMP #5 ;Jämför vred med kod BNE WRONG ;Till WRONG om fel kod LDA #1 ;Meddela rätt kod RTS WRONG: CLR A ;Meddela fel kod RTS 5 (10)

10. Skriv ett exekverbart program för 705:an som räknar antal pulser som fås på interruptpinnen. Vid puls (fallande flank) hoppar programmet till en avbrottsrutin som räknar upp port B. När port B slår runt (d v s går från 255 till 0) ska detta markeras genom att sätta port A, pinne 0, till etta. Inga deklarationer får förutsättas vara gjorda. (3 p) Lösningsförslag: ;*** Deklarationer av register PORTA EQU 0 PORTB EQU 1 DDRA EQU 4 DDRB EQU 5 ;*** Program ;* Initiering ORG $80 ;Här börjar programminnet INIT: LDA #255 STA DDRA ;Port A utgång (bit 0 räcker) LDA #255 STA DDRB ;Port B utgång CLR CLI PORTB ;* Huvudprogram MAIN: BRA MAIN ;Evig loop ;Clear Interrupt Mask Bit ;=> tillåt avbrott ;* Interruptrutin ISR_INT: INC PORTB ;PORTB = PORTB + 1 BEQ OVERFLOW ;Porten "slog runt" RTI OVERFLOW: BSET PORTA,0 ;Sätt port A, bit 0 RTI ;Return from Interrupt ;*** MOR ;*** INT ORG 1924 ;X-tal eller RC anges ej i uppgift DB 0 ;Konfigurera MOR för kristall ORG 2042 DW ISR_INT ;Hoppa till adressen ;ISR_INT vid INT-avbrott ;*** Resetvektor ORG 2046 DW INIT ;Hoppa till adressen INIT vid reset END 6 (10)

11. Det är lätt att glömma att slå på cykellyset när det är mörkt, och lätt att glömma lyset på när man lämnar cykeln, så batterierna varar inte speciellt länge. Du ska göra ett program till PIC:en som gör att lyktorna aktiveras automatiskt när det är mörkt och någon använder cykeln. För att känna om det är mörkt används en fotodiod som är kopplad till en komparator som ger en etta till PIC-processorn när det är mörkt nog. För att känna om någon använder cykeln används en vibrationssensor. Den består av en mekanisk vippa som ger pulser till PIC-processorn. Beroende på hur sensorn är justerad kan den ge etta eller nolla ut i vila, så vibration upptäcks genom att känna en förändring (eller valfri flank). Kortaste pulstid är ca 50 ms, (att tänka på vid val av hur givaren läses eller var i programmet detta sker). Separata utgångar används för att aktivera lyktan fram respektive bak. En etta ut aktiverar lyktan. Eftersom framlyktan drar mer ström ska denna släckas 30 sekunder efter att ingen vibration upptäckts, medan baklyktan (en lysdiod) lyser i 3 minuter, så syns cyklisten bra om han t ex stannar vid rött ljus. För att processorn inte ska dra så mycket ström klockas den av en 32,768 khz kristall. (Processor och övrig elektronik drar då ca 50 µa i vila.) Rita ett enkelt schema där det framgår vilka pinnar du väljer för respektive sensor. Gör också ett flödesschema eller liknande före kodning, där strukturen görs tydlig och uppdelning i subrutiner görs. Skriv därefter ett fullständigt (= exekverbart) program för PIC:en som löser uppgiften. Programmet får avvika upp till 10% från angivna tider. (4 p) Lösningsförslag: Grundidé: Låt vibrationssensorn generera avbrott på positiv flank, på så sätt missas inga vibrationer. Låt timern generera avbrott varje sekund. Detta ger en exakt timing. Då kristallfrekvensen är 2 15 Hz och denna delas 4 ggr internt konfigureras prescalern för delning med 32. Timern ska ej laddas om vid avbrott då denna räknar 256 steg (2 8 ). (2 2 +2 5 +2 8 = 2 15 ) Detta ger mycket att tänka på vid initiering, och viss overhead p g a standardåtgärder vid avbrott, men det som är unikt för uppgiften löses på ca 20 rader totalt. I avbrottsrutin: Om källa = timer => räkna upp tidräknare (COUNT) Om källa = vibrationssensor => Kolla om mörkt, i så fall, tänd lyse och nollställ tidräknare I Main: Kolla om tidräknaren nått 30 respektive 180 sekunder. Släck i så fall rätt lyse. (Det spelar ingen roll att lyset inte alltid är tänt när Main försöker släcka det.) Valda portar mm: Se kommentarer och deklarationer i koden på följande sidor. 7 (10)

list p=16f84 include "P16F84.INC" ; 32,768 khz X-tal => 1/8192 sek cykeltid (=1/(2^13)) ; 32,768 = 2^15 (Smidigt vid konfig av timer) ; *** Bitar (In och utgångar) ; * Port B Vibr EQU.0 ;Vibrationssensor (INT) Dark EQU.1 ;Fotodiod, 1 = mörkt Fram EQU.2 ;Främre lykta Bak EQU.3 ;Bakre lykta ; *** RAM S_TEMP equ.12 ;Sparar register vid int W_TEMP equ.13 COUNT EQU.14 ;Räkneregister ; *** Program ORG.0 goto INIT ;*********************************************************** ;*** Avbrottsrutin ***************************************** ;*********************************************************** ORG.4 ; Spara undan flaggor ISR movwf S_TEMP ;Spara undan flaggor movwf W_TEMP ;Sparar W i W_TEMP swapf STATUS,W ;Sparar STATUS swappat i W movwf S_TEMP ;Sparar undan swappat STATUS ; Testa vilken källa btfss INTCON,T0IF ;Timerinterrupt goto VIBE ;Annars vibrationssensor ; Timeravbrott bcf INTCON,T0IF ;Nollställ interruptflagga incf COUNT,F ;Öka tidräknaren goto END_ISR ;Avsluta ; Flank på RB0 VIBE bcf INTCON,INTF ;Nollställ int-flagga btfss PORTB,Dark ;Hoppa vidare om mörkt goto END_ISR ;annars ingen åtgärd bsf PORTB,Fram ;Tänd främre lykta bsf PORTB,Bak ;Tänd bakre lykta clrf COUNT ;Nollställ tidräknare ; Återställ flaggor, avsluta interrupt END_ISR swapf S_TEMP,W ;Swappar tillbaks => W movwf STATUS ;Återställer STATUS swapf W_TEMP,F ;Swappar swapf W_TEMP,W ;Swappar och återställer W retfie 8 (10)

;*********************************************************** ;*** Initiering ******************************************** ;*********************************************************** INIT bsf STATUS,RP0 ;--- Bank 1 --- movlw B'00000011' movwf TRISB ;RB0 & RB1 in clrf TRISA ;Ut ger lägsta strömförbrukning ; Initierar timer för att räkna ut på en sekund ; 1/(2^13) = 1/(2^8)/(2^5) => Timer (256) * presc (32) => 1 s bcf OPTION_REG,T0CS ;Koppla intern clk till timer bcf OPTION_REG,PSA ;Koppla prescaler till timer bcf OPTION_REG,PS0 bcf OPTION_REG,PS1 bsf OPTION_REG,PS2 ;Delningstal = 32 bcf STATUS,RP0 ;--- Bank 0 --- ; Initierar register clrf PORTB clrf COUNT ; Initierar interrupt bcf INTCON,T0IF ;Förhindrar interrupt direkt bcf INTCON,INTF ;Förhindrar interrupt direkt bsf INTCON,INTE ;Möjliggör RB0-interrupt ;Stigande flank är default bsf INTCON,T0IE ;Möjliggör timerinterrupt bsf INTCON,GIE ;Möjliggör interrupt (globalt) ;*********************************************************** ;*** Huvudprogram ****************************************** ;*********************************************************** MAIN movlw.30 xorwf COUNT,W ;Jämför COUNT med 30 btfsc STATUS,Z ;Hoppa över om ej lika bcf PORTB,Fram ;Släck främre lykta e 30 s movlw.180 xorwf COUNT,W ;Jämför COUNT med 180 s btfsc STATUS,Z ;Hoppa över om ej lika bcf PORTB,Fram ;Släck bakre lykta e 3 min goto MAIN END 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)