update to local git repo

This commit is contained in:
fzzinchemical
2025-07-02 13:08:03 +02:00
commit 269b8a31ba
136 changed files with 12257 additions and 0 deletions

View File

@@ -0,0 +1,175 @@
C515C Mikrocontroller
Klausur Ersttermin: 11.7.2024 Gruppe II 12:55 - 17:00
# Organisatorisches
Labor: Logikanalyse
6 Laboreinheiten mit Analyse und Programmierung des 8051 Mikrocontroller
- In Aulis Aufgaben zum Vor- & Nacharbeiten
- Bei Messaufgaben ist ein Bericht gefordert, bei Programmierungsaufgaben ist dies nicht nötig.
- Ein Antreten ist beim 1. Prüfungstermin der Laboraufgaben ist VERPFLICHTEND, ansonsten kämpft man mit dem Prüfungsauschuss
Bredi stellt ein LaTeX-Packet zur verfügung für irgendwas... habs nicht mental aufgenommen, dient aber dem Kontext der Labore
Labortermin wird Donnerstag um eine viertel Stunde verschoben.
# Grundlagen der Programmiersprache C
Quellcode wird von Bredi hochgeladen.
KEINE KLASSEN WUUUUUUUUU
STARTUP.A51 --> Assembly Datei für 8051 Microkontroller
stdint.h definiert verlässliche Bitbreite von Variablen (ein long ist nicht unbedingt 32 Bits)
\_t steht für Typ und ist Konvention
## Einstellungen $\mu$Vision
Für die Labore werden C515C-L Microcontroller verwendet, für mu vision ist dies ebenfalls wichtig.
Memory Model: Small
Code Rom Size: Compact
### Debug:
- Use Keil Monitor-51 Driver wenn ein Microkontroller angeschlossen ist ansonsten use Simulator
- Target setup
- Einstellen des Portes
- Stop Program Execution with Serial Interrupt wird empfohlen
- Einstellen des WatchDog-Timers
- mitgabe einer Initialization File
- WatchdogAus.ini
- .\
### Einzelne Ausgabe der Einzelnen Bits und Bytes
- Ansprechen über die Speicherbereiche (Special Function Register)
- Mehrere SFR für Ports
- Port 5 ist frei verfügbar, 4 ist größtenteils verfügbar, Port 1 abhängig vom Jumper
```java
#include <REG515C.h> // enthält die ganzen Codes zum Ansprechen der Ports etc
sfr meinPort = 0x90; // special function register, definition der Adresse des Portes nummer 1
sbit meinLsbVonP1 = meinPort^0; // auswahl des signifikanten Bits
```
```c
switch (tier) {
case hund:
demovar = 47;
case katze:
demovar =+ 2;
break;
}
```
Der gegebene Code läuft wenn tier == hund ist durch den Case *hund* und danach durch den Case *katze*, weil nicht *gebreaked* wird.
Zitate usw. beispielsweise: [Brede, 24]
_____
### Kontrollstrukturen
Setzen von Bits anhand von Masken (meistens ein Byte, der &, | genommen wird um den gewünschten Bit zu invertieren).
```C
/*
& and
| or
^ xor
~ complement
>> right shifting
<< left shifting
*/
```
Bedenke an Port 5 des Mikrocontrollers gilt negative Logik, daher ~-Operator verwenden.
### Ein und Ausgabe für Zwecke der Laborausgaben
Ausschnitt aus eingabeAusgabeDemo.c
```C
#include <serIO.h>
serInit();
uchar taste = serWaitIn(); //Warten auf Eingabe
taste = serIn(); //Direkte Eingabe
serCharOut(taste);
```
Ausschnitt aus komplexeDatentypenDemo.c
```C
int *intptr;
int cream[10];
inptr = cream //bekommt die adresse vom nullten Index von cream
*intptr++ = 37 // setzt cream[0] = 37 und erhöht dann den Zeiger um die Bitzahl eines Integers
```
Es gibt 3 Addressspeicher für den Mikrocontroller, in den Speicherraum code, kann eingeschrieben werden, danach aber nicht modifiziert werden.
```C
char code myString[] = "Hallo Welt.";
```
## Grundlegende Hardwarestruktur eines Rechners
Wie wird eine konstante geladen?
Wie wird eine konstante aus einem Register in den Speicher geladen?
## Hardwarestruktur des 8051 Mikrocontrollers
Kurze Wiederholung vom Speicher-Layout.
Registerbank (RB0 - RB3) kann durchaus sinnvoll für den 32 Bit-Addierer sein. Oder es wird eine Registerbank und alle 8 Register verwendet.
code, data und xdata
### Erstellen eines Projektes für Assembler
1. New Projekt
1. C515C-L
2. Do not copy STARTUP.A51
2. .s Datei erstellen (wird von alleine zu einer .a51)
3. Options
1. A51
1. Define 8051 SFR Names checked (oder nicht abhängig von der Config)
2. Target
1. Operating System: Compact
```c
#include <REF515C.H>
org 0 //start bei Adresse 0
jmp 0 // springe zu Adresse 0
end
```
## Hardware-Operationen und -Kontrollstrukturen der 8051 Mikrocontroller
```c
setb c //ansprechen des ein bit-registers
clr c //clear
; //Kommentar
mov dptr,#02000h //initialisierung des Datapointers bei externer Adresse 02000h
movx @dptr,a // Einschreiben des Akkumulatorwertes in die externe Adresse 02000h
//---- Logische Befehle ----
anl
orl
xrl
setb 4 // setzt den 4. Bit auf 1
cpl //
//----Grundlegende Sprungbefehle----
jmp sprungziel
sprungziel:
jz //sprung nur bei Akkumulator bei Null
jnz //jump not zero
jc //jump carry (carry ist eins)
jnc // jump not carry
dnjz //decrementiert und spring wenn nicht null
cjne //vergleich und sprung und kann ein Carry-Flag setzen
PSW //Program Status Word
rr
rrc
da //Überlaufkorrektur
swap //
mov
movc //
jb p1.0,$ // warten auf fallende Flanke
jnb p1.0,$ // warten auf steigende Flanke
codebase equ 0 //setzen eines variabelnamen für bestimmten Wert
```