Lösningar till övning CE_O CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.
|
|
- Erika Henriksson
- för 5 år sedan
- Visningar:
Transkript
1 ösningar till övning CE_O CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io äs in data från IN-port ( skjutomkopplare TOGGES18) a) ösningsförslag i Nios-II-assembler..equ toggles18,0x850.global Get_Data Get_Data: movia r8,toggles18 ldwio r2,0(r8) movia r8,0x3ffff and r2,r2,r8 b) ösningsförslag i C: #define TOGGES18 ( (unsigned int *) 0x850 ) int Get_data( void ) volatile unsigned int * toggles18 = TOGGES18; unsigned int tmp = *toggles18; urn( tmp & 0x3ffff ); c) Ordet volatile i en variabeldeklaration anger att variabelns värde kan komma att ändras, på ett sätt som C-kompilatorn inte kan förutse. Det gör att kompilatorn inte får optimera läsningar av och skrivningar till variabeln. Ett exempel på optimering som är förbjuden för en variabel som är deklarerad volatile, är att flytta läsning av variabeln ut ur en slinga och lägga det lästa värdet i ett register. d) Om man skriver till in-porten så ignoreras det skrivna värdet av hårdvaran, det vill säga värdet försvinner. e) Övriga bitar dvs de med index 18 och uppåt kommer vid läsning få ett värde som beror på hur hårdvaran är konstruerad, 0 eller 1 eller slumpvis 0 eller 1. ösningar till övning CE_O6, sida 1 (av 12)
2 6.2. Skriv ut data till UT-port. (lysdioder GREENED9 ) a) ösningsförslag i Nios-II-assembler..equ greenled9,0xa10.global Put_Green_ight Put_Green_ight: andi r4,r4,0x1ff movia r8,greenled9 stwio r4,0(r8) mov r2,r4 b) ösningsförslag i C: #define GREENED9 ( (unsigned int *) 0xa10 ) int Put_Green_ight( int lightbits ) volatile unsigned int * greenled9 = GREENED9; unsigned int tmp = lightbits & 0x1ff; *greenled9 = tmp; urn( tmp ); c) Om programmet läser från ut-porten så finns två möjliga resultat. Vilket som gäller beror på hur portens hårdvara är konstruerad. Det ena möjliga resultatet är att läsningen ger det värde programmet senast skrev till ut-porten. För detta alternativ måste ut-porten ha hårdvara så att programmet kan göra läsningar, och inte bara skrivningar. Det andra möjliga resultatet är att läsningen ger ett ospecificerat, "slumpmässigt" värde. Detta alternativ inträffar om konstruktören har sparat in på hårdvaran, så att utporten endast är skrivbar (write-only). Ordet "slumpmässigt" har skrivits inom citationstecken här ovanför. Orsaken är att en write-only-utport brukar ha en mycket skev fördelning på de värden den urnerar; det gör den olämplig som slumptalsgenerator. d) Övriga bitar dvs de med index 9 och uppåt kommer vid skrivning att ignoreras. ösningar till övning CE_O6, sida 2 (av 12)
3 6.3. Översätt binärt till 7-segment Skriv en subrutin hex7seg som omvandlar från 4 lsbits i r4 till 7 lsbits i r2. Av figur nedan framgår vilka bitar i r2 som svarar mot vilka segment i displayen. Detta val av segment ger utskrift för värden 0-9 samt A-F (A b c d E F) Hur man skiljer man mellan 6 och b framgår av figuren nedan. a) ösningsförslag i Nios-II-assembler.data bit index TABE: # gör en tabell för tända och släckta segment noll:.byte 0b # OBS! tabellen förutsätter ett:.byte 0b # etta för tänt segment 0 tvaa:.byte 0b # vilket inte är som i labben tre:.byte 0b fyra:.byte 0b fem:.byte 0b sex:.byte 0b sju:.byte 0b atta:.byte 0b nio:.byte 0b A:.byte 0b b:.byte 0b c:.byte 0b d:.byte 0b E:.byte 0b F:.byte 0b # pust det var många ettor och nollor.global hex7seg hex7seg: movia r2, TABE # nu pekar r2 på 0(TABE) andi r8, r4, 0xF # maska fram 4 SBits add r2, r2, r8 # nu pekar r2 på byte-offset (TABE) ldb r2, 0(r2) # nu innehåller r2 koden! andi r2, r2, 0x7F # onödigt ety DB gör SignExtend av 0 # men det här blev ju lätt 1 2 ösningar till övning CE_O6, sida 3 (av 12)
4 b) ösningsförslag i C: /* OBS! Denna tabell förutsätter en nolla för de segment som ska lysa */ /* för varje index i tabellen lagras 4 bytes dvs en int */ /* för varje index i tabellen skulle man kunna ha valt att lagra en char/byte */ int trantab[] = 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x08, 0x03, 0x46, 0x21, 0x06, 0x0e ; int hex7seg( int digit ) register int tmp = digit & 0xf; urn( trantab[ tmp ] ); 6.4. Skriv ut ett tal på 7-segment Display a) ösningsförslag i Nios-II-assembler.equ hex_low28,0x9f0 # hex_low28 address # program code follows.global PutoSegVal # be globally available PutoSegVal: movia r8,hex_low28 # set address stwio r4,0(r8) # write output data mov r2,r4 # setup urn value # urn to caller b) ösningsförslag i C: #define HEX_OW28 ( (volatile int *) 0x9f0 ) void PutoSegVal( int hexlowbits ) volatile int * hex_low28 = HEX_OW28; *hex_low28 = hexlowbits; 6.5. Skriv ut olika tal på 7-segment Display a) ösningsförslag i Nios-II-assembler.global main main: call Get_data # indata till r2 mov r16, r2 # spar kopia andi r4,r2,0x1ff # kopiera 9 bitars indata till r4 call Put_Green_ight # tänd/släck 8 lysdioder mov r4,r16 # 32 bitar parameter till call fixandshow # som skriver ut 4 siffror, se nedan br main ösningar till övning CE_O6, sida 4 (av 12)
5 # Och här kommer en subrutin som skriver ut fyra siffror # endast de 16 minst signifikanta bitarna används fixandshow: push r31 # skydda uradress push r16 # vi behöver ett register som hex7seg inte ändrar push r17 # och ett till register som hex7seg inte ändrar mov r16,r4 # spara data i r16 call hex7seg # översätt 4 bitar till 7 bitar mov r17,r2 # och spar siffra 1 i r17, 7 bitar srli r4,r16,4 # högerskifta fram 4 nya bitar till r4 call hex7seg # översätt 4 bitar till 7 bitar slli r2,r2,7 # och skifta 7 bitar vänster or r17,r2,r17 # kombinera in siffra 2 i r17 med bitvis OR srli r4,r16,8 # högerskifta fram 4 nya bitar till r4 call hex7seg # översätt 4 bitar till 7 bitar slli r2,r2,14 # och skifta nu 14 bitar vänster or r17,r2,r17 # kombinera in siffra 3 i r17 srli r4,r16,12 # högerskifta fram 4 nya bitar till r4 call hex7seg # översätt 4 bitar till 7 bitar slli r2,r2,21 # och skifta 21 bitar vänster denna gång or r4,r2,r17 # kombinera in siffra 4 i r4 denna gång call PutoSegVal # skriv ut på 7-segmentsdisplay pop r17 # återställ sparat registervärde pop r16 # återställ sparat registervärde pop r31 # återställ sparad uradress b) ösningsförslag i C: int main() unsigned int tmp; while( 1 ) tmp = Get_Data(); (void) Green_ight( tmp ); fixandshow( tmp ); void fixandshow( unsigned int bitstoshow ) unsigned int hexresult; hexresult = hex7seg( bitstoshow ); hexresult = hexresult ( hex7seg( bitstoshow >> 4 ) << 7 ); hexresult = hexresult ( hex7seg( bitstoshow >> 8 ) << 14 ); hexresult = hexresult ( hex7seg( bitstoshow >> 12 ) << 21 ); PutoSegVal( hexresult ); ösningar till övning CE_O6, sida 5 (av 12)
6 6.6. Timer a) ösningsförslag i Nios-II-assembler.equ period, # ger 1 millisekund mellan varje TimeOut # om man vill ha en hel sekund mellan varje TimeOut väljer man värdet equ Timer1Base, 0x920.global inittimer inittimer: movia r8, Timer1Base # nu pekar r8 på timer-ksen, 0x920 movia r9, period # r9 innehåller lämpligt värde stwio r9, 8(r8) # periodl skrivs srli r9, r9, 16 # skifta höger 16 bitar stwio r9, 12(r8) # periodh skrivs movi r9, 0b0110 # Run and Continous stwio r9, 4(r8) # Write Control stwio r0, 0(r8) # reset TO-biten ösningsförslag i C: #define TIMER1( (unsigned int *) 0x920 ) #define PERIOD (49999) void inittimer( void ) volatile unsigned int * Timer1Base = TIMER1; Timer1Base[2] = (PERIOD & 0xFFFF); Timer1Base[3] = PERIOD >> 16; Timer1Base[1] = 0x6; /* Start + Continuous */ Timer1Base[0] = 0; b) ösningsförslag i Nios-II-assembler:.global checktimer checktimer: movi r2, -1 # default-värde till r2, betyder No Time-Out movia r8, Timer1Base # nu pekar r8 på timer-ksen ldwio r9, 0(r8) # nu finns status i r9 (rättat) andi r9, r9, 1 # nu finns Time-Out-biten i r9 (rättat) beq r9, r0, NoTimeOut # hoppa om Time-Out-biten är n0ll stwio r0, 0(r8) # nollställ Time-Out-biten movi r2, 0 # nollställ r2, betyder Time-Out NoTimeOut: # och så ur med rätt värde i r2: 0 / -1 ösningar till övning CE_O6, sida 6 (av 12)
7 ösningsförslag i C: int checktimer ( void ) volatile unsigned int * Timer1Base = TIMER1; if ((Timer1Base[0] & 1) == 0) urn(-1); /* else */ Timer1Base[0] = 0; urn(0); c) ösningsförslag i Nios-II-assembler:.global delayt delayt: ble r4, r0, slutt # hoppa om r4 mindre än eller lika med 0 push r31 # skydda uradressen baa: call checktimer # läs av Time-Out-biten blt r2, r0, baa # invänta urvärde 0 (Time-Out) slutt: subi r4, r4, 1 # minska r4 med 1 bgt r4, r0, baa # fortsätt så länge r4 större än noll pop r31 # återställ uradressen ösningsförslag i C: void delayt ( int millisek ) int i; for (i = millisek; i>0; i = i - 1) while ( checktimer() ) /* wait for TO-bit */ ; urn(); while ( checktimer() ) /* wait for TO-bit */ ; kan bytas mot while ( checktimer()!= 0 ) /* wait for TO-bit */ ; eller bytas mot while ( checktimer() == -1 ) /* wait for TO-bit */ ; ösningar till övning CE_O6, sida 7 (av 12)
8 6.7. äs in data från IN-port ( KEYS4 ) a) ösningsförslag i Nios-II-assembler.equ keys4,0x840.global Get_Button Get_Button: movia r8,keys4 # nu pekar r2 på in-porten ldwio r2,0(r8) # data läses in andi r2,r2,15 # nollställ bit b) ösningsförslag i C #define KEYS4( (int *) 0x840 ) int Get_Button( void ) volatile int * keys4 = KEYS4; int tmp = *keys4; urn( tmp & 0xf ); ösningar till övning CE_O6, sida 8 (av 12)
9 6.8. Subrutinen TACK Tick back (för idag) Programkod i C: void tickback( int * timep ) /* Get current value, store locally */ int t = * timep; t -= 1; /* Decrement local copy */ /* If result was not a valid BCD-coded time, adjust now */ if( (t & 0x f) >= 0x a ) t -= 0x ; if( (t & 0x000000f0) >= 0x ) t -= 0x000000a0; /* Seconds are now OK */ if( (t & 0x00000f00) >= 0x00000a00 ) t -= 0x ; if( (t & 0x0000f000) >= 0x ) t -= 0x0000a000; /* Minutes are now OK */ if( (t & 0x000f0000) >= 0x000a0000 ) t -= 0x ; if( (t & 0x00ff0000) >= 0x ) t -= 0x00d60000; /* Hours are now OK */ if( (t & 0x0f000000) >= 0x0a ) t -= 0x ; if( (t & 0xf ) >= 0xa ) t -= 0x ; /* Days are now OK */ * timep = t; /* Store new value */ ösningar till övning CE_O6, sida 9 (av 12)
10 6.9. Ett helt stort program Rita ett flödesschema för nedanstående program och skriv programmet Skriv ut 2 siffror på 7-segment varje sekund. Använd en NON-blocking delay för att uppnå detta Dessutom ska knapparna KEYS4 kännas av och leda till följande. Nedtryckning av KEY1 ska nollställa tiden. Nedtryckning av KEY2 ökar tiden ett steg (med TICK) Nedtryckning av KEY3 minskar tiden ett steg (med TACK som är Tick back) Programmet ska avvakta tills man släpper knappen förstås. (Det förväntas att man inte trycker på två knappar samtidigt) ösningar till övning CE_O6, sida 10 (av 12)
11 ösningsförslag i Nios-II-assembler main: call inittimer # Run and Continous once per second mainloop: call checktimer # kolla om Time-Out (Non-Blocking) blt r2, r0, GoOn # hoppa till GoOn om TO-biten var 0 Time: movia r4, Value call tick # från lab nios2time movia r4, Value ldw r4, 0(r4) # siffra till r4 call Put27 # skriv ut 2 siffror GoOn: call Get_Button # (Non-Blocking) nor r2, r2, r0 # invertera (här eller i GetButton) andi r2, r2, 0xE # och maska fram bit 3, 2 och 1 beq r2, r0, mainloop # om ingen knapp nedtryckt IF1: andi r9, r2, 0b0010 # kolla om KEY1 är nere bne r9, r0, KEY1 # IF KEY1 down goto KEY1 IF2: andi r9, r2, 0b0100 # kolla om KEY2 nere bne r9, r0, KEY2 # IF KEY2 down goto KEY2 IF3: andi r9, r2, 0b1000 # kolla om KEY3 nere bne r9, r9, KEY3 # IF KEY3 down goto KEY3 br mainloop # ingen knapp nere ERROR!!! KEY1: movia r4, Value stw r0, 0(r4) # clear time Value br Bottomup KYE2: movia r4, Value call tick # från lab n2time br Bottomup KEY3: movia r4, Value call tack # ny rutin, se uppgift nedan BottomUp: call Get_Button nor r2, r2, r0 # invertera andi r2, r2, 0xE bne r2, r0, BottomUp # invänta alla knappar uppe # Now all buttons are released br mainloop OBS! Fungerar dåligt (tiden står still) med en knapp nedtryckt mer än 1 sekund. Beaktar ej fallet att flera knappar trycks ner samtidigt. ösningar till övning CE_O6, sida 11 (av 12)
12 6.10. En separat timer, timer_2 (överkurs) a) ösningsförslag i Nios-II-assembler, skillnad mot timer_1 i bold text..equ period, # ger 1 millisekund mellan varje TimeOut.equ Timer2Base, 0x940.global inittimer2 inittimer2: movia r8, Timer2Base # nu pekar r8 på timer-ksen, 0x940 movia r9, period # r9 innehåller lämpligt värde stwio r9, 8(r8) # periodl skrivs srli r9, r9, 16 # skifta höger 16 bitar stwio r9, 12(r8) # periodh skrivs movi r9, 0b0110 # Run and Continous stwio r9, 4(r8) # Write Control stwio r0, 0(r8) # reset TO-biten b).global checktimer2 checktimer2: movi r2, -1 # default-värde till r2 movia r8, Timer2Base # nu pekar r8 på timer-ksen ldwio r9, 0(r8) # nu finns status i r2 andi r9, r9, 1 # nu finns Time-Out-biten i r2 beq r9, r0, NoTimeOut # hoppa om Time-Out-biten är n0ll stwio r0, 0(r8) # nollställ Time-Out-biten movi r2, 0 # nollställ r2 NoTimeOut: # och så ur med rätt värde i r2: 0 / -1 c).global delayt2 delayt2: ble r4, r0, slutt # hoppa om r4 mindre än eller lika med 0 push r31 # skydda uradressen baa: call checktimer2 # läs av Time-Out-biten blt r2, r0, baa # invänta urvärde 0 subi r4, r4, 1 # minska r4 med 1 bgt r4, r0, baa # fortsätt så länge r4 större än noll pop r31 # återställ uradressen slutt: d) restart_timer2: movia r8, Timer1Base2 # nu pekar r8 på timer-ksen, 0x940 ldwio r9, 8(r8) # läs värdet från Period ow stwio r9, 8(r8) # och skriv tillbaks samma värde # periodl skrivs och därmed kopieras Period till Counter som då börjar om movi r9, 0b0110 # Run and Continous stwio r9, 4(r8) # Write Control stwio r0, 0(r8) # reset TO-biten # detta är ju nästan allt som görs i inittimer2, så man kan ju använda inittimer2 i stället. ösningar till övning CE_O6, sida 12 (av 12)
Övning 6. Parallellport, timer
Övning 6 Parallellport, timer 6.1 de2_pio_toggles18 Memory-Mapped addresses LEDG8 LEDR17 LEDR16 LEDR15 LEDR14 LEDR13 LEDR12 LEDR11 LEDR10 LEDR9 LEDR8 LEDR7 LEDR6 LEDR5 LEDR4 LEDR3 LEDR2 LEDR1 LEDR0 LEDG7
Läs merCE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.
IS1200 Exempelsamling till övning CE_O6, 2015 CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io. 6.1. Läs in data från IN-port (skjutomkopplare TOGGLES18) Skriv en subrutin, Get_Data
Läs merÖvning 7. Timer, serieport
Övning 7 Timer, serieport 7.6 timer_1 Memory-Mapped addresses 0x920 status 0x924 control 0x928 periodl 0x92C periodh 0x930 snapl 0x934 snaph 15 0 Run TO (Time-Out) ITO cont start stop timer_1 start D Q
Läs merIS1500 Lösningar övning CE_O7 2014. CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io.
IS1500 ösningar övning CE_O7 2014 CE_O7. Programmerad in/utmatning. Serieport. Förberedelser till nios2io. 6.1. Vad är seriell kommunikation? a) Vad är skillnaden mellan seriell och parallell kommunikation?
Läs merCE_O3. Nios II. Inför lab nios2time
IS1200 Exempelsamling till övning CE_O3, 2015 CE_O3. Nios II. Inför lab nios2time 3.1. Logiska operationer (se uppgift 1.2 c) Repetera (eller lär dig) innebörden av de logiska operationerna "bitvis AND",
Läs merKontrollskrivning Mikrodatorteknik CDT209 2007-09-20 S2-704
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
Läs merIS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1
IS1200 Datorteknik Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1 1 4.1 Little och big endian 2 Nios II? Nios II är Little-endian (men eftersom det är en soft-processor
Läs merCE_O1. Nios II. Enkla assembler-instruktioner.
IS1500 ösningsförslag till övning CE_O1 2014 CE_O1. Nios II. Enkla assembler-instruktioner. 1.1. Datorarkitektur för Nios II a) Tabell 3 1 i Nios II Processor Reference Handbook visar processorns register:
Läs merLaboration 2 i Datorteknik- Assemblerprogrammering II
Högskolan i Halmstad 1 (8) - Assemblerprogrammering II Målet med laborationen är att få begrepp om Subrutiner. in/utparametrar. Lokala variabler Maska in bitar till ett register Konstruktion av subrutiner
Läs merCE_O3. Nios II. Stackhantering och förberedelse för lab nios2time
IS1200 ösningsförslag till övning CE_O3 2015 CE_O3. Nios II. Stackhantering och förberedelse för lab nios2time 3.1. ogiska operationer Nios II kan utföra de logiska operationerna AND, OR, XOR och NOR.
Läs merCE_O2. Nios II. Subrutiner med mera.
IS1500 Lösningsförslag till övning CE_O2 2014 CE_O2. Nios II. Subrutiner med mera. 2.1. Binära lagringsformat R-type: (Register-format) ra (5 bit) rb (5 bit) rc (5 bit) operationskod (17 bit) Detta format
Läs merLösningar till tentamen i EIT070 Datorteknik
Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 13 mars 2013, klockan 14:00 19:00 i Vic 2 A-D, 3 A-C. Tillåtna hjälpmedel: på tentan utdelad
Läs merLösningsförslag till tentamen i IS1500 Datorteknik
Lösningsförslag till tentamen i IS1500 Datorteknik 2010-12-13 Obs! Dessa lösningsförlag kan vara felakktiga och/eller ofullständ Uppgift 1. Maskinartmetik a) Flyttalet X lagras som 0 1000 0011 000 1001
Läs merDigitala Projekt(EITF40) - Larm
Digitala Projekt(EITF40) - Larm Handledare: Bertil Lindvall Erik Oredsson, I-09 Sara Sellin, I-09 2012-05-08 1. SAMMANFATTNING I denna rapport presenteras vårt projekt att bygga ett huslarm från grunden
Läs merAVR 5. Styrning av trafikljus. Digitala system 15 p
Namn: Laborationen godkänd: Digitala system 15 p AVR 5 LTH Ingenjörshögskolan vid Campus Helsingborg Styrning av trafikljus. Syftet med laborationen är att styra en trafikkorsning med hjälp av en mikroprocessor.
Läs merDatorteknik 2 (AVR 2)
Namn: Laborationen godkänd: Digitala system 15 hp Datorteknik 2 (AVR 2) LTH Ingenjörshögskolan vid Campus Helsingborg Enkel in- och utmatning. Drivrutiner. Bithantering. I denna laboration ska vi förbättra
Läs merAnsvarig lärare: Olof Andersson, Telefon 021-101314 (besöker skrivsalen)
MÄLRLENS HÖGSKOL Institutionen för elektroteknik Tentamen Mikrodatorteknik T3760 atum 2005-10-28 Tid 08.30 12.30 nsvarig lärare: Olof ndersson, Telefon 021-101314 (besöker skrivsalen) Om du klarat samtliga
Läs mer#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;
#include #include #include unsigned char num; int count = 0; // antal i lokalen char larmtriggered = 0; //om larmet är utlöst char larmactivated = 0; //om larmet
Läs merÖvning2 Datorteknik, HH vt12 - Programmering
Övning2 Datorteknik, HH vt12 - Programmering För denna övning behöver man adresskarta och beskrivning av laborationsplattform. Finns bland föreläsningsanteckning samt i bilaga l till Lab l. Använd även
Läs merTentamen i IS1500/IS1200/2G1518 Datorteknik fredagen den 19 augusti 2011 kl
Tentamen i IS1500/IS1200/2G1518 Datorteknik fredagen den 19 augusti 2011 kl 14.00 19.00 Examinator: Fredrik Lundevall (IS1500), Johan Wennlund (IS1200, 2G1518). Jourhavande lärare: Johan Wennlund. Tentamensuppgifterna
Läs merÖvningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010
STYRNING - i Mikrodatorteknik för U2 2010 1. Uppgift M10 (5p) aug-09 Skriv ett program i PIC-assembler som - gör PortB till utport - ettställer bit 0, 3 och 4 i PortB - nollställer bit 5 och 6 i PortB
Läs merEDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)
EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) 1. Motivation ROM. 8kbyte 2 3 2 10 byte 13 Adressbitar [A12,A0] direkt till ROM-kapsel. RWM. 32kbyte 2 5 2 10 byte 15 Adressbitar
Läs merArduinokurs. Kurstillfälle 4
Kurstillfälle 4 CW-generering Det här kan ses som överkurs men kan ändå vara roligt för att kunna generera CW på ett enkelt sätt. Det blir en hel del nytt men vi tar det steg för steg Som alla vet gäller
Läs merProgrammering av inbyggda system. Kodningskonventioner. Viktor Kämpe
Kodningskonventioner Viktor Kämpe Varför kodningskonventioner? Förståelse för Skillnaden mellan lokala/globala variabler. Funktionsargument. Returvärde. Möjliggör Mix av assembler och C. Kodningskonventioner/VK
Läs mer4. Maskinnära programmering i C. Förberedelser till hemlaboration 1.
IS1200 ösningar till exempel, övning 4, 2015 4. Maskinnära programmering i C. Förberedelser till hemlaboration 1. 4.1. Big-endian och little-endian När heltal, flyttal och adresser ska lagras i datorns
Läs merDataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte
CT3760 Mikrodatorteknik Föreläsning 4 Tisdag 2005-09-06 Stacken I datasammmanhang är en stack ett minnesområde. Det är processorn som använder stacken. För att skapa en stack anger man en adress i stackpekarregistret.
Läs merCE_O5. Cacheminne. Hemlaboration 2.
IS1500 Exempelsamling till övning CE_O5, 2014 CE_O5. Cacheminne. Hemlaboration 2. 5.1. Medeltidshistoria Diskutera förloppet då CPU:n gör en läsreferens i huvudminnet dvs information kopieras från huvudminne
Läs merDigital- och datorteknik
Digital- och datorteknik Föreläsning #18 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Assemblerprogrammering Assemblatorer vs kompilatorer
Läs merDigital- och datorteknik
Digital- och datorteknik Föreläsning #8 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola Assemblatorer vs kompilatorer En assemblator är ett program
Läs merLösningar till tentamen i EIT070 Datorteknik
Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Torsdagen den 13 mars 2014, klockan 14:00 19:00 i MA:10. Tillåtna hjälpmedel: på tentan utdelad formelsamling,
Läs merA-del motsvarande KS1
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
Läs merProgramrä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.
F5 Föreläsning i Mikrodatorteknink 2006-09-05 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. Programräknaren
Läs merDatorsystem Laboration 2: Minnesmappade bussar
Datorsystem Laboration 2: Minnesmappade bussar Senast uppdaterad: 14 oktober 2012 Version 1.2 Student: Lärare: Underskrift: Underskrift: Datum: Datorsystem Laboration 2 1 Innehåll 1 Inledning 2 1.1 Introduktion..................................
Läs merGeneral Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18
F3 Föreläsning i Mikrodatorteknink 2006-08-29 Kärnan i microcontrollern består av ett antal register och en ALU. Till detta kommer också ett antal portar. Det finns 64 st portar. Några är anslutna mot
Läs merLösningar till tentamen i EIT070 Datorteknik
Lösningar till tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 7 mars 2012, klockan 14:00 19:00 i Vic 2, 3. Tillåtna hjälpmedel: på tentan utdelad formelsamling,
Läs merTentamen PC-teknik 5 p
Tentamen PC-teknik 5 p Namn:. Klass:... Program: Di2, Em3, Et3 Datum: 03-08-15 Tid: 13:30-18:30 Lokal: E171 Hjälpmedel: Linjal, miniräknare, Instruktionsrepertoar för 8086 (utdelas), Lathund, Pacific C
Läs merEtt program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.
CT3760 Mikrodatorteknik Föreläsning 12 Torsdag 2006-10-05 Naxos Pollning Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå. En
Läs merÖvningsuppgifter i Mikrodatorteknik för U2
i Mikrodatorteknik för U2 Skriv instruktioner som utför följande operationer (angivna tal antas givna i hexadecimal form om inget annat anges): 1. (0x20) + 25 (0x30) 2. (0x22) - (0x31) (0x25) 3. (w) +
Läs merTSEA28 Datorteknik Y (och U)
TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2018-01-16 3 TSEA28 Datorteknik Y (och U) Föreläsning 2 Kent Palmkvist, ISY Praktiska kommentarer Mail kommer skickas ut när labanmälan är möjlig
Läs merDatorteknik. Exempeluppgifter i Laborativ Examination
Datorteknik Exempeluppgifter i Laborativ Examination Michael Josefsson Version 0.1 Inledning Nedan följer förslag på några representativa demonstrationslaxar. Uppgifterna är konstruerade så att de ska
Läs merLösningsförslag till tentamen i Datorteknik 2011-05-28
Lösningsförslag till tentamen i Datorteknik 2011-05-28 Varning: dessa lösningsförslag kan vara felakktiga och/eller ofullstän Uppgift 1. Maskinaritmetik a) Flyttalet X lagras som 1 1000 0110 000 1100 0000
Läs merDatorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.
Datorteknik Tomas Nordström Föreläsning 6 För utveckling av verksamhet, produkter och livskvalitet. Föreläsning 6 Vad händer vid uppstart SoC och Kringkretsar, PIO Programmering i Assembler Lab2 genomgång
Läs mer(Lösningsförslag finns sist i denna fil.)
(Lösningsförslag finns sist i denna fil.) Läser externa signaler. Har 64 ingångar (kanaler), från 0 till 63. Kan bara avläsa en ingång i taget. Avlästa värdet positivt 16-bitars tal. Varje läsning tar
Läs merPC-teknik, 5 p LABORATION FILHANTERING
PC-teknik, 5 p LABORATION FILHANTERING Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2004-09-14 Laborant(er): 1 Syfte Laborationen ska illustrera möjligheten att använda funktioner i DOS för att
Läs merPROJEKT STAFFAN STALLEDRÄNG
PROJEKT STAFFAN STALLEDRÄNG PROJEKT STAFFAN STALLEDRÄNG s 1 I det här projektet ska du koppla en krets som innehåller en högtalare och en lysdiod, samt skriva ett program som får högtalaren att spela en
Läs merSystemkonstruktion LABORATION REALTIDSPROGRAMMERING
Systemkonstruktion LABORATION REALTIDSPROGRAMMERING Laborationsansvariga: Anders Arvidsson, Björn Lundblad Utskriftsdatum: 2002-10-31 Laboranter: 1 Syfte Denna laboration syftar till att öva användningen
Läs merMål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?
Mål Datorteknik Föreläsning 3 Att veta hur maskinkoden för ett program byggs upp Att börja programmera i på riktigt Att kunna skriva och anropa subrutiner i Att förstå hur stacken fungerar Att veta vad
Läs merGrundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Läs merLaboration 4: Knappstuds Drivrutiner för att eliminera störningar.
ATMega16 Laborationer av Kjell 2 Rev:5 Datum: 29.09.2010 Page 1 of 7 Laboration 4: Knappstuds Drivrutiner för att eliminera störningar. Inledning: Laborationskortet EasyAVR6 har bland annat tryckknappar
Läs merAssemblerprogrammering för ARM del 2
Assemblerprogrammering för ARM del 2 Ur innehållet Programflöde Subrutiner, parametrar och returvärden Tillfälliga (lokala) variabler Läsanvisningar: Arbetsbok kap 2 Quick-guide, instruktionslistan Assemblerprogrammering
Läs merLABORATION. Datorteknik Y
LABORATION Datorteknik Y Avbrottsprogrammering på Darma Version 4.03 Februari 2019 (OA, KP) Namn och personnummer Godkänd 1 1 Inledning Syftet med laborationen är först att ge övning i avbrottsprogrammering
Läs merGrundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volatile, #define Arrayer av pekare, arrayer av arrayer Hemuppgifter: v2. Föregående
Läs merCE_O9. Exceptions, interrupts, traps. Förberedelser för lab 3, nios2int
IS1200 ösningar till övning CE_O9, 2015 CE_O9. Exceptions, interrupts, traps. Förberedelser för lab 3, nios2int 9.1 Hantering av Exceptions i Nios-2 Vektoriserad hantering av Exceptions. Tre tänkbara orsaker
Läs merKALKYLATOR LABORATION4. Laborationens syfte
LABORATION4 KALKYLATOR Laborationens syfte I denna laboration ska en enkel kalkylator konstrueras med hjälp av VHDL och utvecklingsverktyget Vivado från Xilinx. Hårdvaran realiseras på det redan bekanta
Läs merSupport Manual HoistLocatel Electronic Locks
Support Manual HoistLocatel Electronic Locks 1. S70, Create a Terminating Card for Cards Terminating Card 2. Select the card you want to block, look among Card No. Then click on the single arrow pointing
Läs merEnkla datatyper minne
Enkla datatyper minne 143.56 sant Sonja A falskt 18 1999-10-29 Bertil Gralvik, KTH Ingenjörsskolan 1 Addera två tal Algoritmen Summera tal Mata in två tal Beräkna Skriv ut resultat Mata in tal 1 Mata in
Läs merExtrauppgifter för CPU12
1 Extrauppgifter för CPU12 X1a) Skriv en instruktionssekvens som nollställer bit 3-0 i alla minnesord i adressintervallet 2035H, 2049H Använd X-registret för adressering X1b) Skriv en subrutin som maskerar
Läs merSvar till Övning3 Datorteknik, HH vt12 Avbrott och timers
Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers Avbrott generellt F7.1. Avbrott sköts med hårdvara i processorn, man läser av hårdvarumässigt. Polling är en enklare princip för I/O- hantering.
Läs merProgramallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne
Programallokering Att placera program i flashrespektive RAM-minne Program i FLASH-minne Bara lokala variabler Globala oinitierade variabler Globala initierade variabler Program med avbrott Program i RAM-minne
Läs merAVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser
Namn: Laborationen godkänd: Digitala system 15 hp AVR 3 - datorteknik LTH Ingenjörshögskolan vid Campus Helsingborg Avbrott. Syften med den här laborationen är att introducera avbrott. Avbrott som uppkommer
Läs merDatorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH
Datorteknik Föreläsning 3 Assembler, stack och subrutiner, programmeringskonventionen Mål Att veta hur maskinkoden för ett program byggs upp Att börja programmera i assembler på riktigt Att kunna skriva
Läs merInstitutionen för elektro- och informationsteknologi, LTH
Datorteknik Föreläsning 3 Assembler, stack och subrutiner, programmeringskonventionen Mål Att veta hur maskinkoden för ett program byggs upp Att börja programmera i assembler på riktigt Att kunna skriva
Läs mer6 Lågnivåprogrammering
6 Lågnivåprogrammering När språket C konstruerades hade man som en av målsättningarna att språket skulle kunna hantera programmering på lågnivå. Med lågnivå menas det som man tidigare behövt använda assemblerprogrammering
Läs merTentamen med lösningsförslag
Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen med lösningsförslag EDA482 (EDA481) Maskinorienterad programmering D EDA487 (EDA486) Maskinorienterad programmering Z
Läs merStudera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.
Namn: Laborationen godkänd: Digitala system 15 p Datorprojekt, del 2 L T H I n g e n j ö r s h ö g s k o l a n v i d C a m p u s H e l s i n g b o r g Projektlaboration 2, skrivning till LCD. Förberedelser:
Läs merc a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11
A basic -bit Select between various operations: OR, AND, XOR, and addition Full Adder Multiplexer Digitalteknik och Datorarkitektur hp Föreläsning : introduktion till MIPS-assembler - april 8 karlmarklund@ituuse
Läs merLEU240 Mikrodatorsystem
Institutionen för data- och informationsteknik 2011-10-11 LEU240 Mikrodatorsystem Vi har tidigare i olika sammanhang sett att det är önskvärt att kunna använda ett högnivåspråk som C för att skriva program
Läs merGPIO - General Purpose Input Output
GPIO - General Purpose Input Output Ur innehållet: Digital IO Ideala och verkliga signaler Bitvis in- och utmatning Anslutning - fysiskt gränssnitt F407 - GPIO-modul tillämpningar Programmering av enkelt
Läs merDatorprojekt, del 1. Digitala system 15 p
Namn: Laborationen godkänd: Digitala system 15 p L T H I n g e n j ö r s h ö g s k o l a n v i d C a m p u s H e l s i n g b o r g Datorprojekt, del 1 Projektet består i att skapa en klocka där tiden visas
Läs merDemonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3
LCD Display och Grafik Demonstration och konsultation Arbetsbokens avsnitt 5 och 6 LCD Grafisk display Introduktion till laboration 3 Målsättning: Efter lektionen ska alla självständigt kunna slutföra
Läs merProgrammera i teknik - kreativa projekt med Arduino
NYHET! Utkommer i augusti 2017 Smakprov ur boken Programmera i teknik - kreativa projekt med Arduino av Martin Blom Skavnes och Staffan Melin PROJEKT LJUS s 1 I det här projektet kommer du att bygga en
Läs merTSEA28 Datorteknik Y (och U)
TSEA28 Datorteknik Y (och U) Föreläsning 2 Kent Palmkvist, ISY TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2017-01-17 2 Dagens föreläsning Kort repetition Större programmeringsexempel Subrutiner
Läs merTDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Läs merUlf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:
Grundläggande C-programmering del 2 Pekare och Arrayer Ulf Assarsson Läromoment: Pekare Absolutadressering (portar): typedef, volafle, #define Arrayer av pekare, arrayer av arrayer Hemuppgi9er: v2. Föregående
Läs merTSEA28 Datorteknik Y (och U)
TSEA28 Datorteknik Y (och U), föreläsning 2, Kent Palmkvist 2019-01-22 3 TSEA28 Datorteknik Y (och U) Föreläsning 2 Kent Palmkvist, ISY Praktiska kommentarer Labanmälan öppnar måndag 28/1 kl 12.30 Anmälningssystemet
Läs merTDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016
TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte ordnade i någon
Läs merFortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe
Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering
Läs merProgramexempel för FLEX
Aktivera Kursens mål: Konstruera en dator mha grindar och programmera denna Aktivera Förra veckans mål: Konstruera styrenheten. genom att. implementera olika maskininstruktioner i styrenheten. Kunna använda
Läs merTentamen med lösningsförslag
Institutionen för data- och informationsteknik CHALMERS TEKNISKA HÖGSKOLA Tentamen med lösningsförslag DAT017 (DAT016) Maskinorienterad programmering IT EDA482 (EDA481) Maskinorienterad programmering D
Läs merTentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp
Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp Institutionen för elektro- och informationsteknik Campus Helsingborg, LTH 2016-12-22 8.00-13.00 Uppgifterna i tentamen ger totalt 60
Läs merDatorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga
Datorarkitektur I Tentamen Lördag 10 April 2010 Ekonomikum, B:154, klockan 09:00 14:00 Examinator: Karl Marklund 0704 73 32 17 karl.marklund@it.uu.se Tillåtna hjälpmedel: Penna Radergummi Linjal Följande
Läs merKlassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Läs merProgrammering av inbyggda system
GPIO, In- och utmatning Demonstration och konsultation ST407 GPIO konfigurering och användning Arbetsbokens avsnitt 4 och 5 LCD ASCII-display Keyboard Introduktion till laboration 2 Demonstrationsövning
Läs merPROJEKT LJUD. KOPIERINGSUNDERLAG Martin Blom Skavnes, Staffan Melin och Natur & Kultur Programmera i teknik ISBN
PROJEKT LJUD PROJEKT LJUD s 1 I det här projektet ska du koppla en krets som innehåller en högtalare och skriva ett program som får högtalaren att spela toner och melodier. Materiel Arduino dator kopplingsdäck
Läs merAssemblerprogrammering - fördjupning
Assemblerprogrammering - fördjupning Ur innehållet: Trampoliner tabellerade funktionsadresser Aktiveringspost med ARM Cortex M4 Mer om parameteröverföring Registerspill Kodgenerering - ISA "Kodoptimering"
Läs merLaborationens mål är att få displayen att visa timmar, minuter och sekunder samt att kunna ställa klockan.
Namn: Laborationen godkänd: Digitala system 15 p L T H I n g e n j ö r s h ö g s k o l a n v i d C a m p u s H e l s i n g b o r g Datorprojekt, del 3 Projektlaboration 3, hantering av klocka. Laborationsuppgifter:
Läs merExempelsamling Assemblerprogrammering
Exempelsamling Assemblerprogrammering I uppgifterna nedan utgå från följande programskelett: #include.data var1:.word 12 var2:.word 19 sum: prod:.float 0.set noreorder.text.globl start.ent start
Läs merStyrteknik: Binära tal, talsystem och koder D3:1
Styrteknik: Binära tal, talsystem och koder D3:1 Digitala kursmoment D1 Boolesk algebra D2 Grundläggande logiska funktioner D3 Binära tal, talsystem och koder Styrteknik :Binära tal, talsystem och koder
Läs merKALIBRERINGS MENY. För att komma tillbaka till Mätfunktionerna håll inne M -knappen 3s. eller vänta 1 min. 1 =MOD. 9.6 KBaud
1 (6) FUNKTION HDH-C kalibrerings/konfigureringsverktyg behövs för drifttagning av HDH-M transmittrarna. Med HDH-C kan följande utföras: - Modbus inställningar - Regulator parametrar - Mät kalibrering
Läs merRealtidsprogrammering. En introduktion Implementering (med exempel från PIC)
Realtidsprogrammering En introduktion Implementering (med exempel från PIC) Utan timing Periodtid varierar beroende på funktionernas exekveringstid. Specificera endast maxtid ( Worst case) och eventuellt
Läs merPer Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647
Lågnivåprogrammering Föreläsning 2 Lågnivåprogrammering Förberedelse inför laboration 2. Maskinspråk, assemblerspråk Talrepresentation En enkel dator, komponenter Instruktionsformat, instruktionscykel
Läs merModbus Seriell Kommunikation
Översikt Modbus protokollet är en allmänt använd och väldokumenterad kommunikationsmetod. Det är ett enkelt och effektivt sätt att programmera våra olika produkter A typiskt Modbus-paket ser ut så här:
Läs merAssemblerprogrammering, ARM-Cortex M4 del 3
Assemblerprogrammering, ARM-Cortex M4 del 3 Ur innehållet: Fler pekartyper Användning av stacken Lagringsklasser, synlighet - lokala variabler Funktioner - returvärden och parametrar Läsanvisningar: Arbetsbok
Läs merCE_O9. Exceptions, interrupts, traps. Förberedelser för lab 3, nios2int
IS1200 Exempelsamling till övning CE_O9, 2015 CE_O9. Exceptions, interrupts, traps. Förberedelser för lab 3, nios2int 9.1. Hantering av exceptions i Nios II. Vektoriserad hantering av Exceptions. Hur fungerar
Läs merDet finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2012-06-04 Skrivtid: 1400-1700 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Läs merLista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien
DIGITAL- OCH MIKRODATORTEKNIK, U2 11-01-12 09.00 13.00 Tillåtna hjälpmedel: Instruktionslista PIC16F877A Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien Fullständiga lösningar
Läs merPå den här övningen ska vi träna på att förflytta en figur med hjälp av piltangenterna.
På den här övningen ska vi träna på att förflytta en figur med hjälp av piltangenterna. 1. Öppna filerna du förberedde förra veckan (charactercontrol.fla och Main_Character.as). 2. I Main_Character.as,
Läs merFortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe
Fortsä'ning Pekare Ulf Assarsson Originalslides av Viktor Kämpe Pekare och Arrayer/VK 2 Pekare och Arrayer/VK 3 Förra föreläsningen Pekare Bll data Arrayer fix storlek och adress Dynamisk minnesallokering
Läs merDet är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.
Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
Läs mer