Kontrollskrivning Mikrodatorteknik CDT209 2007-09-20 S2-704 Svar Svar till uppgifterna lämnas på separat papper. En poäng per uppgift. Max 30 poäng. Bonuspoäng beräknas enligt följande tabell: 6-10 poäng ger 1 bonuspoäng 11-15 poäng ger 2 bonuspoäng 16-20 poäng ger 3 bonuspoäng 21-25 poäng ger 4 bonuspoäng 26-30 poäng ger 5 bonuspoäng. Bonuspoäng gäller endast vid tentamenstillfället 2007-10-26 Uppgift 1. LDI temp, 0b10101110 Vilket hexadecimalt tal kommer att tilldelas variabeln temp? 0xAE ( =174 10 ) Uppgift 2. Skriv det decimala talet 7 som ett binärt tal med 8 bitar i tvåkomplementform. 0b 1111 1001 Uppgift 3. Vad är en label? En symbolisk adress Uppgift 4. Microcontrollern innehåller tre olika minnestyper. Vilka. SRAM, FLASH EEPROM Vilken minnestyp används för programminne? FLASH Uppgift 5. Du vill att ett program för ATmega16 skall börja på minnesadress 0x0080 Hur skall programmet börja?.cseg.org 0x0080 Uppgift 6. ATmega16 har 32 generella register och 64 s.k. I/O-register ( portar) Vad är det för skillnad mellan dessa två grupper? De 32 generella registren är kopplade till ALU. I/O-registren styr microcontrollerns arbete. Uppgift 7. I/O-registret DDRA har värdet 0x33. Hur kommer PORTA att fungera? Bit 0,1 4 och 5 blir utgångar, de övriga ingångar 2007-09-20 Kontrollskrivning med svar 1/6
Uppgift 8. Vilka register är direkt kopplade till ALU? R0 till R31, samt SREG Uppgift 9. Vilka register bildar y-registret? R28 och R29 Uppgift 10. Vad behövs för att en subrutin skall fungera? En stack måste finnas Uppgift 11. Vad är ett assemblerdirektiv? En instruktion som styr assemblatorns arbete Uppgift 12. En assemblerinstruktion är EOR. I databladet finns bl.a. följande information: Operation: Rd Rd Rr Syntax: Operands: Program Counter: EOR Rd,Rr 0 Rd 31, 0 Rr 31 PC PC +1 16-bit Opcode: 0010 01rd dddd rrrr Ange maskinkoden för EOR R17, R17 Vad blir innehållet i R17 efter operationen? 0x2711 noll Uppgift 13. Instruktionsuppsättningen för ATmega16 innehåller ett antal Bransch instructions. En del avser villkorliga hopp. Vad styr om ett villkorligt hopp skall utföras eller ej? En eller flera bitar i SREG Uppgift 14. Skriv en rutin i assembler som använder stacken för att byta värdet i register R5 med värdet i register R8. PUSH R5 PUSH R8 POP R5 POP R8 Uppgift 15. Antag stackpekaren innehåller talet 0x400. Vad innehåller stackpekaren efter det att instruktionen PUSH R18 utförts? 0x03FF Uppgift 16. Vad är fördelen med att använda ett SRAM jämfört med ett Dynamiskt RAM? SRAM behöver ej uppdateras med jämna mellanrum. Behåller inläst värde så länge som matningsspänning finns 2007-09-20 Kontrollskrivning med svar 2/6
Uppgift 17. Hur anropas en subrutin i ett assemblerprogram. RCALL label eller CALL label Uppgift 18. Ett datasegment placeras på adressen 0xA5 på följande sätt:.dseg.org 0xA5 uppgift: Ange assemblerinstruktioner som laddar x-registret med startadressen till uppgift. LDI LDI XL, low(uppgift) XH, high(uppgift) Uppgift 19. Följande rader i assembler ger en fördröjning. ldi R18, 0xff yttre: ldi R17, 0xff Back: dec R17 brne Back dec R18 brne yttre Skriv om funktionen så att den kan användas som en subrutin. tid: ldi yttre: ldi R18, 0xff R17, 0xff Back: dec brne dec brne ret Back yttre R17 R18 Uppgift 20. En del av ett assemblerprogram ser ut så här:.include m16def.inc.cseg.org 0.def temp = R17 rjmp Start 2007-09-20 Kontrollskrivning med svar 3/6
Start: LDI temp, 255 OUT DDRB, temp LDI temp, 0x35 OUT PORTB, temp Stop: rjmp Stop Skriv ett C-program som har motsvarande funktion. #include<avr/io.h> void main( ) { DDRB = 255; PORTB = 0x35; stop: goto stop; } Uppgift 21. Skriv en funktion i C som ger en tidsfördröjning. void tid( ) { unsigned int x; for( x=0; x< 65000; x++) ; } Uppgift 22. Hur anropas en egendefinierad funktion i C? Funktionen måste deklareras innan den används. void tid( ) ; Anropas sedan i main med tid( ); Uppgift 23. Hela PORTB har definierats som en inport. Det är endast bitarna 3 och 4 som skall användas i ett program. Övriga bitar skall nollställas (maskning). Skriv en assemblerrutin som utför åtgärden. IN temp, PINB ANDI temp, 0x18 Uppgift 24. Samma uppgift som föregående. Skriv ett C-kommando som gör samma sak. unsigned char temp; temp = PINB & 0x18; 2007-09-20 Kontrollskrivning med svar 4/6
Uppgift 25. Skriv en for-loop i C som har samma funktion som while(1) { } for( ; ; ) { } Uppgift 26. Flödesschemat är givet. Skriv ett C-program som ger funktionen. Start B-port UT D-port IN Jämför med 0x10 Inläst tal < 0x10? Ja mindre: Läs ut 0xF0 Läs ut 0x07 Stanna unsigned char temp; DDRB = 0xFF; DDRD = 0; temp = PIND; if( temp < 0x10) PORTB = 0x07; else PORTB = 0xF0; stop: goto stop Uppgift 27. Vad får b för värde efter det att while-satsen utförts? unsigned b=0; unsigned arr[]= {1,3,5,7,11,13,17}; unsigned i=0 ; while(i<=3) { b = b + arr[i]; i = i +1; } 1 + 3 + 5 +7 = 16 2007-09-20 Kontrollskrivning med svar 5/6
Uppgift 28. Vilken assembler instruktion motsvarar C-statsen katt: goto katt;? katt: rjmp katt Uppgift 29. Variabeln PELLE är av typen unsigned char PELLE har det hexadecimala värdet 0x91. Vad innehåller PELLE efter det att följande tilldelningssats utförts? PELLE = PELLE 0x60; PELLE har värdet 0xF1 Uppgift 30. PELLE har det hexadecimala värdet 0x91. Vad innehåller PELLE efter det att följande tilldelningssats utförts? PELLE = PELLE B&& 0x60; PELLE har värdet 0x01 2007-09-20 Kontrollskrivning med svar 6/6