Files
TI-Studium-Mitschriften/Semester 4/MICONT/Aufgabenblätter/ZickZack/Listings/serIO.lst
2025-07-02 13:08:03 +02:00

131 lines
5.5 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
C51 COMPILER V9.60.7.0 SERIO 05/22/2024 11:53:01 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE SERIO
OBJECT MODULE PLACED IN .\Objects\serIO.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE serIO.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\ser
-IO.lst) TABS(2) OBJECT(.\Objects\serIO.obj)
line level source
1 /*
2 * serIO.c:
3 * Eingabe und Ausgabe ueber die serielle Schnittstelle.
4 *
5 * Jan Bredereke, 2019, 2024
6 */
7
8 /* Die eigene Header-Datei: */
9 #include "serIO.h"
10
11 /* Die Definitionen von Special-Funktion-Registern fuer den
12 * Mikrocontroller C515C: */
13 #include <REG515C.H>
14
15
16 /* Die oeffentlichen Methoden: */
17 /* --------------------------- */
18
19 /* Holt ein einzelnes Zeichen von der seriellen Schnittstelle, ohne
20 * darauf zu warten. */
21 /* Falls kein Zeichen da ist, wird Null zurueckgegeben. */
22 char serIn(void) {
23 1 /* Pruefe, ob ein Zeichen gelesen worden ist.
24 1 * (Dann wird das Receiver-Interrupt-Flag gesetzt.) */
25 1 if (RI) {
26 2 /* Loesche das Receiver-Interrupt-Flag wieder. */
27 2 RI = 0;
28 2 /* Hole das Zeichen und gib es zurueck. */
29 2 return SBUF;
30 2 } else {
31 2 /* Sonst gib Null zurueck. */
32 2 return '\0';
33 2 }
34 1 }
35
36 /* Holt ein einzelnes Zeichen von der seriellen Schnittstelle und
37 * wartet ggf., bis eines da ist. */
38 char serWaitIn(void) {
39 1 /* Warte, bis ein Zeichen empfangen wurde. (Dann wird das
40 1 * Receiver-Interrupt-Flag gesetzt.) */
41 1 while (!RI);
42 1 /* Loesche das Receiver-Interrupt-Flag wieder. */
43 1 RI = 0;
44 1 /* Hole das empfangene Zeichen und gib es zurueck. */
45 1 return SBUF;
46 1 }
47
48 /* Gibt ein Zeichen ueber die serielle Schnittstelle aus. */
49 /* Wartet nur, falls zur Zeit eine fruehrere solche Ausgabeoperation
50 * noch nicht abgeschlossen ist. */
51 void serCharOut(char zeichen) {
52 1 /* Warte ggf., bis das vorige Zeichen fertig ausgegeben ist.
53 1 * (Dann wird das Transmitter-Interrupt-Flag gesetzt.) */
54 1 while (!TI);
C51 COMPILER V9.60.7.0 SERIO 05/22/2024 11:53:01 PAGE 2
55 1 /* Loesche das Transmitter-Interrupt-Flag wieder. */
56 1 TI = 0;
57 1 /* Lege das Zeichen in Sendepuffer und beginne die Uebertragung, ohne
58 1 * auf deren Ende zu Warten. */
59 1 SBUF = zeichen;
60 1 }
61
62 /* Gibt einen String ueber die serielle Schnittstelle aus. */
63 void serStringOut(char *string) {
64 1 char z; /* Das naechste zu druckende Zeichen */
65 1
66 1 while (z = *string++) {
67 2 serCharOut(z);
68 2 }
69 1 }
70
71 /* Initialisiert die Eingabe+Ausgabe ueber die serielle Schnittstelle. */
72 void serInit(void) {
73 1 /* Initialisiert die serielle Schnittstelle des C515C
74 1 * auf 9600 Baud, 1 Stoppbit, kein Paritybit.
75 1 * Ein Aufruf ist bei der echten Mikrocontrollerkarte im Labor
76 1 * nicht noetig (aber auch nicht schaedlich), da fuer das Laden des
77 1 * Programms schon eine Initialisierung durch uVision erfolgt.
78 1 * Siehe auch das C515C-User-Manual, Seite 6-48ff.
79 1 */
80 1
81 1 /* Laedt Baud-Rate-Zaehler, oberer Teil
82 1 * (Formel im User-Manual auf S. 6-54).
83 1 */
84 1 SRELH = 0x03;
85 1 /* Laedt Baud-Rate-Zaehler, unterer Teil, und setze Zaehler zurueck. */
86 1 SRELL = 0xbf;
87 1 /* Setzt SMOD-Bit im Register PCON (verdoppelt Baud-Rate). */
88 1 PCON |= 0x80;
89 1 /* Setzt BD-Bit im Register ADCON0 (Baud rate generator enable). */
90 1 BD = 1;
91 1 /* Setzt Bits im Register SCON (von links nach rechts):
92 1 * SM0=0, SM1=1, SM2=0:
93 1 * serial mode 1, also 8-Bit-UART
94 1 * mit variabler Baud-Rate,
95 1 * einem Stoppbit und keinem
96 1 * Paritybit.
97 1 * REN=1: Receiver enable.
98 1 * TB8=0: unbenutzt (9. Sendebit).
99 1 * RB8=0: unbenutzt (9. Empfangsbit).
100 1 * TI=1: Transmitter-Interrupt-Flag.
101 1 * RI=0: Receiver-Interrupt-Flag.
102 1 */
103 1 SCON = 0x52;
104 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 75 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)