update to local git repo
This commit is contained in:
175
Semester 4/MICONT/MICONT-Vorlesung.md
Executable file
175
Semester 4/MICONT/MICONT-Vorlesung.md
Executable 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
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user