MezData-Logo Creative Commons License 771 :AVR: Fragen, Übungen und Klassenarbeiten

Schlüsselwörter: Atmel, AVR, Assembler, TGIT, Mikrokontroller, C

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;

Lösung anzeigen..

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?

a b c
10 20 10
5 5 0
23 4 19

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 D (Eingang) sind die 8 Taster angeschlossen, gedrückt ist Bit=0
Bits Port D 7 6 5 4 3 2 1 0 Nummer des Tasters
Maske - 0x40 0x20 - 0x0F Tasten selektieren, maskieren
Bedeutung - A B - X = X3..X0 A,B lösen Aktionen aus,
X ist Eingabe

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.
Wird Taste B gedrückt, wird X mit merker verglichen. Sind beide gleich wird X auf PORTB ausgegeben,
sonst wird PORTB=0xff ausgegeben.

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            

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

reaktionsspiel-ka.pdf

reaktionsspiel-lsg.pdf

ReaktionS1.c

Der Zeitwächter

zeitwaechter-ka.pdf

zeitwaechter-lsg.lsg