Skip to content
Snippets Groups Projects
Commit 2c4a1698 authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Praktikumsunterlagen 28.5.2024

parent 6216414a
No related branches found
No related tags found
No related merge requests found
extern "C" { extern void asm_main (void); }
void setup (void)
{
asm_main ();
}
void loop (void)
{
/* empty */
}
.text ; "Dies ist ausführbarer Code."
.global asm_main ; Label nach außen sichtbar machen
.type asm_main, @function
asm_main: ; Einsprungpunkt: Hier geht's los.
ldi r24,0xff ; Alle 8 Anschlüsse auf "Output" schalten
out 0x0a,r24 ; In DDRD schreiben (Port Nr. 0x0a, Speicherzelle 0x2a)
loop:
ldi r24,0x00 ; LED ausschalten (angeschlossen an Ausgang Nr. 2)
out 0x0b,r24 ; In PORTD schreiben (Port Nr. 0x0b, Speicherzelle 0x2b)
ldi r26,lo8(7999999) ; Warteschleife: von 7999999 rückwärts bis 0 zählen
ldi r22,hi8(7999999) ; Die 24-Bit-Zahl 7999999 in 3 8-Bit-Register
ldi r23,hlo8(7999999)
1:
subi r26,1 ; Subtrahiere 1 von den untersten 8 Bit
sbci r22,0 ; Subtrahiere 0 von den mittleren 8 Bit, berücksichtige Übertrag (carry)
sbci r23,0 ; Subtrahiere 0 von den mittleren 8 Bit, berücksichtige Übertrag (carry)
brne 1b ; branch if not equal (= not zero): bedingter Sprung zu Label 1
rjmp .
nop
ldi r24,0x04 ; LED einschalten (angeschlossen an Ausgang Nr. 2)
out 0x0b,r24 ; In PORTD schreiben (Port Nr. 0x0b, Speicherzelle 0x2b)
ldi r26,lo8(7999999) ; 1 Taktzyklus
ldi r22,hi8(7999999) ; 1 Taktzyklus
ldi r23,hlo8(7999999) ; 1 Taktzyklus --> 3 Taktzyklen vor der Schleife
1:
subi r26,1 ; 1 Taktzyklus
sbci r22,0 ; 1 Taktzyklus
sbci r23,0 ; 1 Taktzyklus
brne 1b ; 2 Taktzyklen, wenn er springt, 1 Takzyklus, wenn er nicht springt
; --> 5 Taktzyklen pro Schleifendurchlauf
rjmp . ; 2 Taktzyklen lang nichts machen
nop ; 1 Taktzyklus lang nichts machen
; --> zusätzlich zu der Schleife weitere 3 + 3 = 6 Taktzyklen warten
; --> Die Schleife wird sozusagen 8000000 mal durchlaufen
; (7999999 Durchläufe + Extra-Taktzyklen)
; und verbraucht dabei jedesmal 5 Taktzyklen.
; Bei 16000000 Taktzyklen pro Sekunde sind das insgesamt 2.5 Sekunden.
jmp loop
../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
../common/pgscript.sty
\ No newline at end of file
File added
% rtech-2024ss-p3.pdf - Labor Notes on Fundamentals in Computer Architecture
% Copyright (C) 2024 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: Versuch 3: Echtzeit-Programmierung
\documentclass[a4paper]{article}
\usepackage{pgscript}
\usepackage{multicol}
\usepackage{amsmath}
%\usepackage{sfmath}
\usepackage{tikz}
\usetikzlibrary{circuits.ee.IEC}
\usetikzlibrary{arrows.meta}
\sloppy
\raggedcolumns
\pagestyle{empty}
\addtolength{\textheight}{1cm}
\newcommand{\sep}{~$\cdot$~}
\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)}
\lstdefinestyle{asm}{basicstyle=\color{blendedblue},
language={},
gobble=4}
\begin{document}
\makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill
\makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}
\par\bigskip\bigskip
\begin{center}
\Large\textbf{Praktikumsversuch 3: Echtzeit-Programmierung}
\par\medskip
\normalsize Hardwarenahe Programmierung\sep
Sommersemester 2024\sep
Prof.~Dr.~Peter Gerwinski
\end{center}
Aufgabe: Realisieren Sie in AVR-Assembler das serielle RS-232-Protokoll in Software.
\bigskip
Hinweis und \textbf{Warnung}:
\begin{itemize}
\item[]
Ein fertiges Programm, das jemand anders geschrieben hat, das aber
die Anforderungen des Praktikums erfüllt, zu nehmen und einzureichen,
ist zulässig, aber nur dann, wenn Sie \textbf{genau erklären} können, wie
dieses Programm funktioniert. Dies ist nach unseren bisherigen Erfahrungen
\textbf{wesentlich schwieriger}, als die Software selbst zu schreiben.
Wir raten daher dringend davon ab.
\end{itemize}
Anleitung (unverbindlich):
\begin{enumerate}
\item
Machen Sie sich mit der Assembler-Programmierung eines Arduino Uno vertraut.
Als Vorlage kann Ihnen das Programm \file{BlinkAsm} dienen.
\item
Machen Sie sich mit dem RS-232-Protokoll vertraut:
Baudrate, Datenbits, Start- und Stoppbits, Parität. (Siehe z.\,B.:
\url{https://commons.wikimedia.org/wiki/File:RS-232_timing.svg})
\item
Realisieren Sie zunächst eine serielle Datenübertragung
zwischen zwei Mikrocontroller-Boards (Arduino Uno)
über die Arduino-Sprache.
Später werden wir dann die Sender-Software durch Ihre
Assembler-Implementierung ersetzen.
\item
Schreiben Sie in AVR-Assembler eine Warteschleife,
die zu der von Ihnen gewählten Baudrate paßt.
\item
Schreiben Sie in AVR-Assembler zwei Subroutinen (Funktionen),
die jeweils ein 1-Signal bzw.\ ein 0-Signal mit der zur gewählten
Baudrate passenden Länge über einen digitalen Output-Port ausgeben.
\item
Schreiben Sie in AVR-Assembler drei Subroutinen
(oder alternativ: eine Subroutine, die einen Parameter entgegennimmt),
die die Buchstaben "`C"', "`H"' bzw.\ "`V"' seriell übertragen.
\item
Schreiben Sie in AVR-Assembler eine Software,
die wiederholt die Zeichenfolge "`CVH"'
über eine in Software realisierte serielle Schnittstelle versendet.
\item
Wenn Sie die Herausforderung suchen, versuchen Sie,
eine möglichst hohe Übertragungsrate zu erreichen.
\end{enumerate}
Zum Bestehen des Praktikums muß ein zweiter Mikrocontroller
das von Ihnen gesendete Signal über eine in Hardware (USART)
realisierte serielle Schnittstelle korrekt dekodieren können.
(Und natürlich müssen Sie Ihr Programm vollständig erklären können.)
\bigskip
\qquad\qquad\emph{Viel Erfolg!}
\vfill
\begingroup
\small
\setlength{\leftskip}{3cm}
Stand: 28.\ Mai 2024
% Soweit nicht anders angegeben:\\
Copyright \copyright\ 2024\quad Peter Gerwinski\\
Lizenz: \mylicense
Sie können diese Praktikumsunterlagen einschließlich Quelltext
% und Beispielprogramme\\
herunterladen unter:\\
\url{https://gitlab.cvh-server.de/pgerwinski/rtech}
\endgroup
\end{document}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment