Begriffe und Grundlagen
Worin unterscheidet sich ein Microcontroller von einer CPU? Der Controller ist ne CPU + X: I/O Peripherie (Ports, A/D Wandler, D/A Wandler, Serielle Schnittstellen usw..), RAM, ROM, Timer. Man denke an die Anwendungen: Auto, Handy, Waschmaschiene, Tintenpisser, Modem, Fahrrad (Computergesteuerte Gangschaltung).
Erklären Sie den Begriff Befehlszyklus anhand eines Beispiels.
Welche Aufgabe hat der Assembler? de.wikipedia.org/wiki/Assemblersprache
Worin besteht der Unterschied zwischen CISC und RISC? de.wikipedia.org/wiki/Reduced_Instruction_Set_Computing
Was sind MIPS? Milionen Instruktionen pro Sekunde
Was bewirkt ein Reset? Register und PC werden auf Null gesetzt: Folge Programm beginnt wieder bei Adresse 0
Erklären Sie die Abkürzungen MSB und LSB? Most Significant Bit -> Das Bit ganz links hat die grösste Wertigkeit...
Der Flash-Speicher des ATtiny2313 ist 2KByte gross, als 16 Bit organisiert.
Wofür wird der Flash-Speicher verwendet? Er ist der Programm- und Konstantdatenspeicher.
Wie oft kann der Flash-Speicher wiederbeschrieben werden? Mindestens 10000 mal.
Warum ist der Speicher 16 Bit organisiert? Weil die Befehle 16 bzw. 32 Bit lang sind.
Wie viele Adressen hat der 2kiB Flash-Speicher? Da er 16 Bit organisiert ist: 2048 Byte / 2 Byte = 1024 Adressen.
In Assember übersetzen
Dem Assembler seien schon die 1Byte Register-Variablen a,b,c bekannt.
Erstellen Sie Assembler-Programme für folgende Rechnungen und ermitteln Sie die Anzahl der Takte zur Bearbeitung:
a = b + c; | b = b -c; | a = a +1; | b = b - 3; | if (b == 0) a = c; |
Rechnen in Assembler
Geben Sie den Inhalt von SREG-Flags N,Z,C und dem Register R16 nach der Ausführung des Befehls an. Gehen Sie davon aus, dass vor dem ersten Befehl N,Z,C gelöscht (0) sind.
Befehl | SREG | R16 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
N | Z | C | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
ldi R16, 8 | |||||||||||
com R16 | |||||||||||
subi R16, 5 | |||||||||||
clr R16 | |||||||||||
neg R16 |
Befehl | SREG | R16 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
N | Z | C | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
ldi R16, 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
com R16 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
subi R16, 5 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
clr R16 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
neg R16 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Programm analysieren
.include "tn2313def.inc" .def a = R16 ;R16 als Variable a .def b = R17 ;R17 als Variable b .def c = R18 ;R18 als Variable c ;Zuweisen von Werten a,b adam: cp a,b brmi eva mov c,a sub c,b rjmp gogo eva: mov c,b sub c,a gogo: ... |
Nebenstehender Quelltext ist gegeben: Erstellen Sie einen PAP für den Quelltext. Lösung.. Wie sieht der Quellcode für ein entsprechendes C-Programm aus? Lösung anzeigen..Welche Werte werden für folgende Belegungen von a und b für c errechnet?
|
Programm erstellen
Erstellen Sie ein Programm (Assembler mit PAP) das berechnet:
Wenn a gerade dann b = 1 sonst b = 0.
Lösung anzeigen..Programm analysieren
Analysieren Sie folgendes Assembler-Programm.
.include "tn2313def.inc" .def tmp = R16 .def merker = R17 init: out DDRD,tmp out PORTD,tmp ldi tmp,0xFF out DDRB,tmp out PORTB,tmp atest: in tmp,PIND andi tmp,0x40 brne btest in merker,PIND andi merker,0x0F btest: in tmp,PIND andi tmp,0x20 brne atest in tmp,PIND andi tmp,0x0F cp tmp,merker brne nein out PORTB,tmp rjmp atest nein: ldi tmp,0xFF out PORTB,tmp rjmp atest |
An Port B (Ausgang) sind die 8 Leuchtdioden (LED) angeschlossen. Eine LED leucht, wenn das jeweilige Bit = 0 ist. BRNE Branch if not equal (to Zero): Sprung, wenn das Ergebnis der letzten Rechenoperation ungleich null ist. Welche Einstellungen werden zwischen Marke "init:" und "atest:" vorgenommen, leuchten die LEDs kurz oder permanent oder gar nicht? PORTB ist Ausgang, alle Pins sind 1; PORTD ist Eingang, PullUps sind aus. LED leuchten 1 Takt lang auf. Erstellen Sie einen PAP für das Programm ab Marke "atest:" Lösung.. Kommentieren Sie den PAP sinnvoll und beschreiben Sie die Funktion des Programms. Wenn Taste A gedrückt ist, wird X = X3..X0 in merker gespeichert. Optimieren Sie das Programm -es können geschicktere Befehle verwendet werden. Lösung anzeigen.. |
Programm Analyse 10 Punkte
Gegeben ist folgender Assember-Code:
.include "tn2313def.inc" .def a = R16 ;R16 als Variable a start: ldi a,0 loop: dec a brne loop stop:
Erstellen Sie einen PAP. 3 PunkteLösung
Ermitteln Sie die Anzahl der Taktzyklen (nachvollziebare Rechnung) zwischen start: und stop:. 1+ 255*3 + 2 = 3*256 = 768 5 Punkte
Wie viel Zeit vergeht dabei, wenn der µController mit 10 MHz betrieben wird? 2 Punkte76,8 us
Verzweigung 10 Punkte
Der C-Code char a,b; ... b=0; if(a<0) b=1; soll in Assembler übersetzt werden.
Erstellen Sie ein Assembler Programm. 5 Punk
ldi b,0
cpi a,0
brsh weiter
ldi b,1
weiter:
Erstellen Sie einen PAP zu Ihrem Programm. 2 Punkte
Mit welchen Testwert-Ergebnis-Kombinationen (Tabelle: Eingabe -> Ausgabe) müssen Sie Ihr Programm testen, damit Sie die Korrektheit beweisen können, begründen Sie! 3 PunkteMit a ∈ {0,1,-1} Fehler treten oft um die Grenze, hier 0 auf.
Schleife
Der C-Code unsigned char a,b; ... for(a=2; a<6; a=a+2) b=a; soll in Assembler übersetzt werden.
Erstellen Sie ein Assembler Programm.
ldi a,2
forloop:
cpi a,6 brsh forend
mov b,a
subi a,-2 rjmp forloop
forend:
Erstellen Sie einen PAP zu Ihrem Programm.
Welchen Wert haben a und b nach dem Ende der Schleife? a=6; b=4
Initialisierung und einfache Logik-Verknüpfung 30 Punkte
Port | PD3 | PD2 | PD1 | PD0 | PB3 | PB2 | PB1 | PB0 |
---|---|---|---|---|---|---|---|---|
Richtung | in | in | in | in | out | out | out | out |
Bauteil | S4 | S3 | S2 | S1 | LED4 | LED3 | LED2 | LED1 |
Der µC ist wie in nebenstehender Tabelle beschaltet.
Die LED leuchten bei logisch 0, die Taster S4..1 führen bei Betätigung logisch 0 und benötigen einen aktivierten Pull-Up Widerstand im µC. Die LED sollen nicht leuchten. Offensichtlich wird in dieser Aufgabe negative Logik verwendet!
Erstellen Sie die notwendige Programm-Sequenz um die Initalisierung der Ports vorzunehmen. 5 Punkte
.def tmp = R16 init: ldi tmp, 0x0f out PORTB, tmp ;LED dunkel
out DDRB, tmp ;PB3..PB0 als Ausgang out PORTD, tmp ;Pull-Up an
Ein Assembler-Programm soll entwickelt werden, das die folgenden Gleichungen realisiert:
LED1 = S1 oder S2 oder S3; LED2 = S4 xor S3 (PB0 = PD2 und PD1 und PD0; PB1 = PD3 xnor PD2)
Vor der Entwicklung soll bereits eine Tabelle zum späteren Testen der Software erstellt werden. Verwenden Sie diese Vorgabe: 5 Punkte
Testmuster | PD3 | PD2 | PD1 | PD0 | PB3 | PB2 | PB1 | PB0 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | ||||
2 | ||||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | ||||||||
8 | ||||||||
9 | ||||||||
10 | ||||||||
11 | ||||||||
12 | ||||||||
13 | ||||||||
14 | ||||||||
15 |
Testmuster | PD3 | PD2 | PD1 | PD0 | PB3 | PB2 | PB1 | PB0 |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
2 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 |
3 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 |
4 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
5 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
6 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
7 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
8 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
9 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
10 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
11 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
12 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 |
13 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
14 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
15 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Erstellen Sie das sinnvoll kommentierte Assembler-Programm für die Gleichungen. 10 Punkte
loop:
;PB0 = PD2&PD1&PD0 gdw =7
in tmp, PIND
andi tmp, 0x07 ;maskieren
cpi tmp, 0x07 ;
breq pb4_set
cbi PORTB,0 ;loesche Bit
rjmp teil2
pb4_set:
sbi PORTB,0
teil2: ;PB1 = PD3 xnor PD2
in tmp, PIND
andi tmp,0b1100 ;maskieren
breq pb5_set ;beide 0 setze Bit
cpi tmp, 0b1100 ;beide 1 setze Bit
breq pb5_set
cbi PORTB,1 ;sonst loesche Bit
rjmp loop ;neuer Durchlauf
pb5_set:
sbi PORTB,1
rjmp loop
...
Zeichnen Sie zu Ihrem Assembler-Code den dazu gehörenden Programm Ablauf Plan (PAP). 5 Punkte
Ermitteln Sie aus Ihrem Assembler-Code die maximale Reaktionszeit bei einer Taktfrequenz von 4MHz, d.h. wie lange dauert es maximal zwischen einer Tasteränderung und einer Ausgabe auf die LED. Der Gedankengang muss erkennbar sein. 5 Punkte
Indirektes Adressieren
Bestimmen Sie aus dem Assembler-Code die Adressen und den Inhalt der Flash-Speicherzellen.
.org $80 moni:
.db 20,32,0b110,0x53
bernd:
.db "Holla",0
Marke | Adresse in Hex | Inhalt in Hex |
---|---|---|
moni | ||
bernd-1 | ||
bernd | ||
bernd+1 |
Marke | Adresse in Hex | Inhalt in Hex |
---|---|---|
moni | 0x80 | 0x2014 |
bernd-1 | 0x81 | 0x5306 |
bernd | 0x82 | 0x6F48 |
bernd+1 | 0x83 | 0x6C6C |
ASCII-Tabelle (7Bit)
Dez | Hex | Zeichen | Dez | Hex | Zeichen | Dez | Hex | Zeichen | Dez | Hex | Zeichen | Dez | Hex | Zeichen |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 00 | Nul | 26 | 1A | SUB | 52 | 34 | 4 | 78 | 4E | N | 104 | 68 | h |
1 | 01 | SOH | 27 | 1B | ESC (Escape) | 53 | 35 | 5 | 79 | 4F | O | 105 | 69 | i |
2 | 02 | STX | 28 | 1C | FS | 54 | 36 | 6 | 80 | 50 | P | 106 | 6A | j |
3 | 03 | ETX | 29 | 1D | GS | 55 | 37 | 7 | 81 | 51 | Q | 107 | 6B | k |
4 | 04 | EOT (End Of Transmission) | 30 | 1E | RS | 56 | 38 | 8 | 82 | 52 | R | 108 | 6C | l |
5 | 05 | ENQ | 31 | 1F | US | 57 | 39 | 9 | 83 | 53 | S | 109 | 6D | m |
6 | 06 | ACK | 32 | 20 | SP (Space) | 58 | 3A | : | 84 | 54 | T | 110 | 6E | n |
7 | 07 | BELL (Klingel) | 33 | 21 | ! | 59 | 3B | ; | 85 | 55 | U | 111 | 6F | o |
8 | 08 | BS (Back Space) | 34 | 22 | " | 60 | 3C | < | 86 | 56 | V | 112 | 70 | p |
9 | 09 | Hor. Tabulator | 35 | 23 | # | 61 | 3D | = | 87 | 57 | W | 113 | 71 | q |
10 | 0A | LF (Line Feet) | 36 | 24 | $ | 62 | 3E | > | 88 | 58 | X | 114 | 72 | r |
11 | 0B | Ver. Tabulator | 37 | 25 | % | 63 | 3F | ? | 89 | 59 | Y | 115 | 73 | s |
12 | 0C | FF (Form Feet) | 38 | 26 | & | 64 | 40 | @ | 90 | 5A | Z | 116 | 74 | t |
13 | 0D | CR (Carriage Return) | 39 | 27 | ' | 65 | 41 | A | 91 | 5B | [ | 117 | 75 | u |
14 | 0E | SO | 40 | 28 | ( | 66 | 42 | B | 92 | 5C | \ | 118 | 76 | v |
15 | 0F | SI | 41 | 29 | ) | 67 | 43 | C | 93 | 5D | ] | 119 | 77 | w |
16 | 10 | DLE | 42 | 2A | * | 68 | 44 | D | 94 | 5E | ^ | 120 | 78 | x |
17 | 11 | DC1 | 43 | 2B | + | 69 | 45 | E | 95 | 5F | _ | 121 | 79 | y |
18 | 12 | DC2 | 44 | 2C | , | 70 | 46 | F | 96 | 60 | ' | 122 | 7A | z |
19 | 13 | DC3 | 45 | 2D | - | 71 | 47 | G | 97 | 61 | a | 123 | 7B | { |
20 | 14 | DC4 | 46 | 2E | . | 72 | 48 | H | 98 | 62 | b | 124 | 7C | | |
21 | 15 | NAK | 47 | 2F | / | 73 | 49 | I | 99 | 63 | c | 125 | 7D | } |
22 | 16 | SYN | 48 | 30 | 0 | 74 | 4A | J | 100 | 64 | d | 126 | 7E | ~ |
23 | 17 | ETB | 49 | 31 | 1 | 75 | 4B | K | 101 | 65 | e | 127 | 7F | DEL (Delete) |
24 | 18 | CAN | 50 | 32 | 2 | 76 | 4C | L | 102 | 66 | f | |||
25 | 19 | EM | 51 | 33 | 3 | 77 | 4D | M | 103 | 67 | g |
Stroboskop 30 Punkte
Ein Stroboskop soll 10 Lichtblitze pro Sekunde abgeben. Dazu erzeugt ein ATtiny2313 an PB0 ein Signal das im Prinzip so aussieht:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|
- Der Abstand der steigenden Flanken beträgt 100 ms.
- Der Impulsabstand wird mit dem 8Bit Timer 0 per Overflow-Interrupt erzeugt.
- Die Impulsdauer beträgt 1 ms und wird per Warteschleife erzeugt.
- Der µC arbeitet mit 500 kHz Systemtakt! BEACHTEN bei allen Aufgabenteilen!
Ermitteln Sie die optimale Einstellung des Timer-Vorteilers und den Vorspannwert des Timers für einen Interruptabstand von 100 ms. 5 Punkte
Taktzahl: 500 kHz * 100 ms = 50.000
Vorteiler: 50.000 / 256 = 195,3 gewählt 256
Vorsteller: 256 -(50.000/256) = 60,7 gewählt 61
Genauigkeit: (256-61)*256/500 kHz = 99,84 ms
Entwickeln Sie kommentierten Assemblercode für die Initialisierungen und das Hauptprogramm. 10 Punkte
rjmp init ;nach Reset init .org OVF0addr rjmp isrOVF0 ;Sprung zur ISR .org INT_VECTORS_SIZE init: ldi R16, low(RAMEND) out SPL, R16 ;Stackpointer initialisieren ldi R16,1 out DDRB, R16 ; PB0 als Ausgang ldi R16, 0b100 ; out TCCR0B, R16 ;Vorteiler 256 ldi R16, 1<<TOIE0 out TIMSK, R16 ;Overflow-Interrupt freischalten ldi R16,61 ;Vorspannen 256-195 out TCNT0,R16 ; sei ;globale Interruptfreigabe loop: rjmp loop
Entwickeln Sie kommentierten Assemblercode für ein Unterprogramm warte_1ms. 5 Punkte
warte_1ms: ldi R17,125 ;initialisieren wloop: dec R17 nop brne wloop ret
Entwickeln Sie kommentierten Assemblercode für die Interruptbehandlungsroutine isrOVF0. 10 Punkte
isrOVF0: in R17,SREG push R17 ;SREG retten ldi R17,61 ;Vorspannen Timer out TCNT0,R17 sbi PORTB,0 ;PB0 an rcall warte_1ms cbi PORTB,0 ;PB0 aus pop R17 ;SREG wieder herstellen out SREG, R17 reti
Gebrauchte Klassenarbeiten
Das Reaktionsspiel
Der Zeitwächter