MÄLARDALENS HÖGSKOLA Institutionen för elektroteknik Tentamen Mikrodatorteknik CT3760 Datum 2005-10-28 Tid 08.30 12.30 Svar till A- och B-del A-del motsvarande KS1 Uppgift A1. Vad blir resultatet då instruktionen ANDI, R18, 0x34 har utförts? R18 innehåller från början talet det binära talet 0010 0010. A R18 innehåler decimalt 20 Bitvis and mellan 0x22 0ch 0x34 0010 0010 0011 0100 0010 0000 = 0x20 Uppgift A2. PORTD har insignalen 0x34. Vad blir då utsignalen till PORTB efter det att följandprogram körts? IN R20, PIND 0x34 till R20 ORI R20,0xF0 Bitvis or mellan 0x34 och 0xF0 0011 0100 1111 0000 1111 0100 LSL R20 Skifta ett steg åt vänster fyll med en nolla. 1 1110 1000 OUT PORTB,R20 Läs ut 0xE8 C 0xE8 Uppgift A3. Ange vilken/vilka bit i statusregistret SREG som sätts då följande programsekvens utförs. Antag att SREG är nollställd från början LDI R16,0x3F 0x3F till R16 CPI R16,0x3D utför subtraktion 3F 3D = 0x02 ger ett positivt tal, ingen bit i SREG ändras. R16 är oförändrad efter instruktionen A ingen bit 2006-10-18 H:\CT3760\Period1_2005\2005_10_28_2S.doc 1/5
Uppgift A4. Vilken instruktion ettställer de två mest signifikanta bitarna i register R16 utan att de övriga bitarna påverkas? OR-funktionen med noll behåller det ursprungliga värdet. OR med ett ger alltid en etta. De två mest signifikanta bitarna ger 1100 0000. 0xC0 E ORI R16, 0xC0 Uppgift A5. Följande tre instruktioner är skrivna i assembler. Blir det någon skillnad på maskininstruktionerna då dessa översätts? LDI R20, 250 decimalt 250 = 0xFA LDI R20, 0xFA LDI R20, -6 6 uttryckt som ett binärt tal 0000 0110 tvåkomplement 1111 1010 motsvarar 6 1111 1010 = 0xFA B Nej Uppgift A6. Istället för att skriva registernamn kan man använda ett symboliskt namn. R20 kan exempelvis få namnet: tentamen. På vilket sätt anger man ett symboliskt namn? C.def tentamen = R20 Uppgift A7. Vad är innehållet i registren R18, R19 och R20 efter det att följande program körts? LDI R17,0x08 dec R17 dec R17 POP R18 POP R19 POP R20 stop: rjmp stop Svar: R18 = 0x06 R19 = 0x07 R20 = 0x08 Uppgift A8. Assemblerprogram brukar inledas med.include "m16def.inc". Beskriv vad denna fil har för innehåll. Svar: Innehåller symboliska namn på register och olika bitar i register. Detta gör att man exempelvis kan skriva PORTA, DDRD osv. 2006-10-18 H:\CT3760\Period1_2005\2005_10_28_2S.doc 2/5
Uppgift A9. Ett assemblerprogram brukar också innehålla följande kod: LDI temp,low(ramend) OUT SPL,temp LDI temp,high(ramend) OUT SPH, temp Vad gör dessa fyra rader? Vad innebär RAMEND? Svar: Detta gör att en stack definieras. RAMEND är en adress till SRAM. Närmare bestämt den sista minnesplatsen i RAM-minnet. Stacken börjar på den hösta adressen, och får sedan växa nedåt. Uppgift A10. Vilka minnestyper innehåller en mickrocontroller Atmega16? Beskriv också användningen av de olika minnestyperna. FLASH-minne. Ett minne som är av EEPROM-typ. Man kan skriva in information till minnet. Informationen finns kvar vid spänningsbortfall. Används för att lagra program. SRAM. Statiskt ram-minne. Informationen finns kvar så länge som minnet har matningsspänning. Här finns bl.a. stacken EEPROM. Minne som behåller informationen efter det att spänningen slagits av. Används för tabellvärden. Man kan spara innehållet i registren här om man använder sig av processorns möjlighet att försätta sig i strömbesparande läge. B-del motsvarande KS2 Uppgift B11. Atmega16 innehåller en 10-bit A/D-omvandlare. Hur många logiska nivåer har en sådan omvandlare? 10 A 2 Uppgift B12. Referensspänningen för A/D-omvandlaren i Atmega 16 är 5,0000V. Detta innebär att den minsta spänningsförändring som kan upptäckas är 4,88 mv. Om man bara utnyttjar de 8 mest signifikanta bitarna i den 10-bit omvandlare som är inbyggd, så blir den minsta spänningsförändring som kan upptäckas. Den minsta förändring som kan upptäckas vid 10-bit upplösning är 4,88 mv Det är exempelvis övergången från 00 0000 0000 till 00 0000 0001 Om man plockar bort de sista två bitarna så kommer man bara att se en övergång från 00 0000 0000 till 00 0000 0100 Vilket innebär 4 ggr så stor skillnad. B 19,53 mv 2006-10-18 H:\CT3760\Period1_2005\2005_10_28_2S.doc 3/5
Uppgift B13. En A/D-omvandlare bör vara linjär. Vad är villkoret för att A/D-omvandlaren i Atmega 16 skall vara linjär. Största avvikelsen från nominellt värde få vara i området Villkoret för att en omvandlare skall vara linjär är ± 0,5 LSB. Detta villkor gäller vid konstruktionen av A/D omvandlaren. Om man använder 10 bitar eller 8 bitar, beror på programskrivningen. A ± 0,5 * 4,88 mv Uppgift B14. En fyrkanssignal har följande utseende. Ange duty-cycle för signalen. 1 0 8 ms 2 ms C 0,75 Pertiodtiden är 8 ms. Signalen har värdet 1 under ( 8 2 ) ms. 6/8 = 0,75 Uppgift B15. Vad inträffar då man får en nolla till reset-ingången på processorn? Reset är detsamma som återstart. Allt börjar om. B Programpekaren ställs om till det värde som anges för resetvektorn. Uppgift B16. En tilldelningssats i C har följande utseende: kalle = (kalle << 1) + 1; ( (kalle << 1) betyder skifta ett steg åt vänster. ) Du skall skriva en assemblerkod som motsvarar satsen. Vilket av följande är korrekt assemblerkod? Antag att variabeln kalle finns deklarerad på följande sätt i assembler: kalle:.byte 1 Alternativ a gör ingen addition av ett. Alterntiv b add r20, r20 får som resultat att r20 multipliceras md två, dessutom syntaxfel i subi. Man kan ej ange minustecken. Alternativ c Syntaxfel i add. Instruktionen fungerar bara på register, ej konstanter. Alternativ d Rätt. 0xFF betyder 1. subi r20,0xff gör att ( -1 ) subtrheras från r20. Dvs man lägger till ett. 2006-10-18 H:\CT3760\Period1_2005\2005_10_28_2S.doc 4/5
A LDS R20,kalle B LDS R20,kalle LSL R20 ADD R20,R20 STS kalle,r20 SUBI R20, -1 STS kalle,r20 C LDS R20,kalle D LDS R20,kalle LSL R20 LSL R20 ADD R20,1 SUBI R20, 0xFF STS kalle,r20 STS kalle,r20 Uppgift B17. Då Watchdog har löst ut så kommer: A Programmet att starta om från början B Programmet startar om från den adress som finns angiven för watchdog. C Programmet hoppar över nuvarande instruktion. D Programmet startar om från breakpoint. Alternativ A Uppgift B18. Beskriv vad som händer vid ett interrupt. Antag att anropet inte är spärrat. Pågående instruktion avslutas Adressen till nästa instruktion lagras på stacken I-bit i SREG nollställs Den adress som hör ihop med avbrottet hämtas i vektortabellen och laddas till programräknaren. Processorn utför det program som hör ihop med avbrottet. Detta program avslutas med instruktionen --- reti ---. Den adress som finns på stacken laddas till programpekaren. I-biten ett-ställs. Uppgift B19. Beskriv skillnaden mellan interrupt och pollning. Vid pollning kontrollerar programmet om någon speciell händelse inträffat. Om så skett kommer en subrutin att utföras. Vid interrupt kommer en händelse att initiera ett avbrott av den normala pogramkörningen. Istället körs en avbrottsrutin, den som motsvarar subrutinen ovan. Uppgift B20. Vilka är fördelarna med A/D-omvandling enligt successiv approximation? Omvandlingstiden är konstant. Oberoende av insignalens storlek. Relativt snabb omvandling. 2006-10-18 H:\CT3760\Period1_2005\2005_10_28_2S.doc 5/5