131 lines
5.5 KiB
Plaintext
Executable File
131 lines
5.5 KiB
Plaintext
Executable File
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)
|