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,253 @@
A51 MACRO ASSEMBLER STARTUP 05/22/2024 11:36:34 PAGE 1
MACRO ASSEMBLER A51 V8.2.7.0
OBJECT MODULE PLACED IN .\Objects\STARTUP.obj
ASSEMBLER INVOKED BY: C:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Obj
ects\STARTUP.obj) EP
LOC OBJ LINE SOURCE
1 $nomod51
2 ;------------------------------------------------------------------------------
3 ; This file is part of the C51 Compiler package
4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
5 ; Version 8.01
6 ;
7 ; *** <<< Use Configuration Wizard in Context Menu >>> ***
8 ;------------------------------------------------------------------------------
9 ; STARTUP.A51: This code is executed after processor reset.
10 ;
11 ; To translate this file use A51 with the following invocation:
12 ;
13 ; A51 STARTUP.A51
14 ;
15 ; To link the modified STARTUP.OBJ file to your application use the following
16 ; Lx51 invocation:
17 ;
18 ; Lx51 your object file list, STARTUP.OBJ controls
19 ;
20 ;------------------------------------------------------------------------------
21 ;
22 ; User-defined <h> Power-On Initialization of Memory
23 ;
24 ; With the following EQU statements the initialization of memory
25 ; at processor reset can be defined:
26 ;
27 ; <o> IDATALEN: IDATA memory size <0x0-0x100>
28 ; <i> Note: The absolute start-address of IDATA memory is always 0
29 ; <i> The IDATA space overlaps physically the DATA and BIT areas.
0080 30 IDATALEN EQU 80H
31 ;
32 ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
33 ; <i> The absolute start address of XDATA memory
0000 34 XDATASTART EQU 0
35 ;
36 ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
37 ; <i> The length of XDATA memory in bytes.
0000 38 XDATALEN EQU 0
39 ;
40 ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
41 ; <i> The absolute start address of PDATA memory
0000 42 PDATASTART EQU 0H
43 ;
44 ; <o> PDATALEN: PDATA memory size <0x0-0xFF>
45 ; <i> The length of PDATA memory in bytes.
0000 46 PDATALEN EQU 0H
47 ;
48 ;</h>
49 ;------------------------------------------------------------------------------
50 ;
51 ;<h> Reentrant Stack Initialization
52 ;
53 ; The following EQU statements define the stack pointer for reentrant
54 ; functions and initialized it:
55 ;
56 ; <h> Stack Space for reentrant functions in the SMALL model.
57 ; <q> IBPSTACK: Enable SMALL model reentrant stack
A51 MACRO ASSEMBLER STARTUP 05/22/2024 11:36:34 PAGE 2
58 ; <i> Stack space for reentrant functions in the SMALL model.
0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
60 ; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
61 ; <i> Set the top of the stack to the highest location.
0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
63 ; </h>
64 ;
65 ; <h> Stack Space for reentrant functions in the LARGE model.
66 ; <q> XBPSTACK: Enable LARGE model reentrant stack
67 ; <i> Stack space for reentrant functions in the LARGE model.
0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
69 ; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
70 ; <i> Set the top of the stack to the highest location.
0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
72 ; </h>
73 ;
74 ; <h> Stack Space for reentrant functions in the COMPACT model.
75 ; <q> PBPSTACK: Enable COMPACT model reentrant stack
76 ; <i> Stack space for reentrant functions in the COMPACT model.
0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
78 ;
79 ; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
80 ; <i> Set the top of the stack to the highest location.
0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
82 ; </h>
83 ;</h>
84 ;------------------------------------------------------------------------------
85 ;
86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM
87 ; <e>Compact Model Page Definition
88 ;
89 ; <i>Define the XDATA page used for PDATA variables.
90 ; <i>PPAGE must conform with the PPAGE set in the linker invocation.
91 ;
92 ; Enable pdata memory page initalization
0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
94 ;
95 ; <o> PPAGE number <0x0-0xFF>
96 ; <i> uppermost 256-byte address of the page used for PDATA variables.
0000 97 PPAGE EQU 0
98 ;
99 ; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
100 ; <i> most 8051 variants use P2 as uppermost address byte
00A0 101 PPAGE_SFR DATA 0A0H
102 ;
103 ; </e>
104 ;------------------------------------------------------------------------------
105
106 ; Standard SFR Symbols
00E0 107 ACC DATA 0E0H
00F0 108 B DATA 0F0H
0081 109 SP DATA 81H
0082 110 DPL DATA 82H
0083 111 DPH DATA 83H
112
113 NAME ?C_STARTUP
114
115
116 ?C_C51STARTUP SEGMENT CODE
117 ?STACK SEGMENT IDATA
118
---- 119 RSEG ?STACK
0000 120 DS 1
121
122 EXTRN CODE (?C_START)
123 PUBLIC ?C_STARTUP
A51 MACRO ASSEMBLER STARTUP 05/22/2024 11:36:34 PAGE 3
124
---- 125 CSEG AT 0
0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1
127
---- 128 RSEG ?C_C51STARTUP
129
0000 130 STARTUP1:
131
132 IF IDATALEN <> 0
0000 787F 133 MOV R0,#IDATALEN - 1
0002 E4 134 CLR A
0003 F6 135 IDATALOOP: MOV @R0,A
0004 D8FD 136 DJNZ R0,IDATALOOP
137 ENDIF
138
139 IF XDATALEN <> 0
MOV DPTR,#XDATASTART
MOV R7,#LOW (XDATALEN)
IF (LOW (XDATALEN)) <> 0
MOV R6,#(HIGH (XDATALEN)) +1
ELSE
MOV R6,#HIGH (XDATALEN)
ENDIF
CLR A
XDATALOOP: MOVX @DPTR,A
INC DPTR
DJNZ R7,XDATALOOP
DJNZ R6,XDATALOOP
ENDIF
153
154 IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
157
158 IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
166
167 IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
172
173 IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
179
180 IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
184
0006 758100 F 185 MOV SP,#?STACK-1
186
187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4
188 ;<h> Code Banking
189 ; <q> Select Bank 0 for L51_BANK.A51 Mode 4
A51 MACRO ASSEMBLER STARTUP 05/22/2024 11:36:34 PAGE 4
190
195 ;</h>
0009 020000 F 196 LJMP ?C_START
197
198 END
A51 MACRO ASSEMBLER STARTUP 05/22/2024 11:36:34 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C_C51STARTUP. . . C SEG 000CH REL=UNIT
?C_START . . . . . C ADDR ----- EXT
?C_STARTUP . . . . C ADDR 0000H A
?STACK . . . . . . I SEG 0001H REL=UNIT
ACC. . . . . . . . D ADDR 00E0H A
B. . . . . . . . . D ADDR 00F0H A
DPH. . . . . . . . D ADDR 0083H A
DPL. . . . . . . . D ADDR 0082H A
IBPSTACK . . . . . N NUMB 0000H A
IBPSTACKTOP. . . . N NUMB 0100H A
IDATALEN . . . . . N NUMB 0080H A
IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP
PBPSTACK . . . . . N NUMB 0000H A
PBPSTACKTOP. . . . N NUMB 0100H A
PDATALEN . . . . . N NUMB 0000H A
PDATASTART . . . . N NUMB 0000H A
PPAGE. . . . . . . N NUMB 0000H A
PPAGEENABLE. . . . N NUMB 0000H A
PPAGE_SFR. . . . . D ADDR 00A0H A
SP . . . . . . . . D ADDR 0081H A
STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP
XBPSTACK . . . . . N NUMB 0000H A
XBPSTACKTOP. . . . N NUMB 0000H A
XDATALEN . . . . . N NUMB 0000H A
XDATASTART . . . . N NUMB 0000H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -0,0 +1,263 @@
BL51 BANKED LINKER/LOCATER V6.22.4.0 05/22/2024 13:57:42 PAGE 1
BL51 BANKED LINKER/LOCATER V6.22.4.0, INVOKED BY:
C:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\STARTUP.obj, .\Objects\main.obj, .\Objects\serIO.obj TO .\Objects\ZickZack PRINT (
>> .\Listings\ZickZack.m51) RAMSIZE (256)
MEMORY MODEL: SMALL
INPUT MODULES INCLUDED:
.\Objects\STARTUP.obj (?C_STARTUP)
.\Objects\main.obj (MAIN)
.\Objects\serIO.obj (SERIO)
C:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDPTR)
LINK MAP OF MODULE: .\Objects\ZickZack (?C_STARTUP)
TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 000CH UNIT _DATA_GROUP_
DATA 0014H 0003H UNIT ?DT?_SERSTRINGOUT?SERIO
DATA 0017H 0001H UNIT ?DT?MAIN
IDATA 0018H 0001H UNIT ?STACK
* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0003H ABSOLUTE
0003H 07FDH *** GAP ***
CODE 0800H 0088H UNIT ?PR?_DRAWCHRISTMASTREE?MAIN
CODE 0888H 002AH UNIT ?PR?_INDENTWITHSPACE?MAIN
CODE 08B2H 0028H UNIT ?PR?MAIN?MAIN
CODE 08DAH 0021H UNIT ?PR?_SERSTRINGOUT?SERIO
CODE 08FBH 0019H UNIT ?C?LIB_CODE
CODE 0914H 000FH UNIT ?PR?SERINIT?SERIO
CODE 0923H 000CH UNIT ?C_C51STARTUP
CODE 092FH 000BH UNIT ?PR?SERIN?SERIO
CODE 093AH 0008H UNIT ?PR?SERWAITIN?SERIO
CODE 0942H 0008H UNIT ?PR?_SERCHAROUT?SERIO
OVERLAY MAP OF MODULE: .\Objects\ZickZack (?C_STARTUP)
SEGMENT DATA_GROUP
+--> CALLED SEGMENT START LENGTH
---------------------------------------------------
?C_C51STARTUP ----- -----
+--> ?PR?MAIN?MAIN
?PR?MAIN?MAIN 0008H 0002H
+--> ?PR?SERINIT?SERIO
+--> ?PR?SERIN?SERIO
+--> ?PR?_DRAWCHRISTMASTREE?MAIN
BL51 BANKED LINKER/LOCATER V6.22.4.0 05/22/2024 13:57:42 PAGE 2
?PR?_DRAWCHRISTMASTREE?MAIN 000AH 0006H
+--> ?PR?_INDENTWITHSPACE?MAIN
+--> ?PR?_SERCHAROUT?SERIO
?PR?_INDENTWITHSPACE?MAIN 0010H 0004H
+--> ?PR?_SERCHAROUT?SERIO
SYMBOL TABLE OF MODULE: .\Objects\ZickZack (?C_STARTUP)
VALUE TYPE NAME
----------------------------------
------- MODULE ?C_STARTUP
C:0923H SEGMENT ?C_C51STARTUP
I:0018H SEGMENT ?STACK
C:0000H PUBLIC ?C_STARTUP
D:00E0H SYMBOL ACC
D:00F0H SYMBOL B
D:0083H SYMBOL DPH
D:0082H SYMBOL DPL
N:0000H SYMBOL IBPSTACK
N:0100H SYMBOL IBPSTACKTOP
N:0080H SYMBOL IDATALEN
C:0926H SYMBOL IDATALOOP
N:0000H SYMBOL PBPSTACK
N:0100H SYMBOL PBPSTACKTOP
N:0000H SYMBOL PDATALEN
N:0000H SYMBOL PDATASTART
N:0000H SYMBOL PPAGE
N:0000H SYMBOL PPAGEENABLE
D:00A0H SYMBOL PPAGE_SFR
D:0081H SYMBOL SP
C:0923H SYMBOL STARTUP1
N:0000H SYMBOL XBPSTACK
N:0000H SYMBOL XBPSTACKTOP
N:0000H SYMBOL XDATALEN
N:0000H SYMBOL XDATASTART
C:0000H LINE# 126
C:0923H LINE# 133
C:0925H LINE# 134
C:0926H LINE# 135
C:0927H LINE# 136
C:0929H LINE# 185
C:092CH LINE# 196
------- ENDMOD ?C_STARTUP
------- MODULE MAIN
C:0000H SYMBOL _ICE_DUMMY_
C:0888H PUBLIC _indentWithSpace
C:0800H PUBLIC _drawChristmastree
D:0017H PUBLIC taste
C:08B2H PUBLIC main
------- PROC _INDENTWITHSPACE
D:0010H SYMBOL amount
------- DO
BL51 BANKED LINKER/LOCATER V6.22.4.0 05/22/2024 13:57:42 PAGE 3
D:0012H SYMBOL g
------- ENDDO
C:0888H LINE# 8
C:088CH LINE# 10
C:08A2H LINE# 11
C:08B1H LINE# 13
------- ENDPROC _INDENTWITHSPACE
------- PROC _DRAWCHRISTMASTREE
D:000AH SYMBOL width
------- DO
D:000CH SYMBOL i
D:000EH SYMBOL j
------- ENDDO
C:0800H LINE# 14
C:0804H LINE# 17
C:081AH LINE# 18
C:0828H LINE# 20
C:084CH LINE# 21
C:085DH LINE# 22
C:0867H LINE# 23
C:086CH LINE# 24
C:0873H LINE# 25
C:0878H LINE# 26
C:087DH LINE# 27
C:0887H LINE# 28
------- ENDPROC _DRAWCHRISTMASTREE
------- PROC MAIN
------- DO
D:0008H SYMBOL hasChar
------- ENDDO
C:08B2H LINE# 30
C:08B2H LINE# 33
C:08B7H LINE# 35
C:08BAH LINE# 36
C:08C0H LINE# 37
C:08C5H LINE# 38
C:08C9H LINE# 39
C:08CFH LINE# 40
C:08D0H LINE# 41
C:08D0H LINE# 42
C:08D7H LINE# 43
C:08D9H LINE# 45
------- ENDPROC MAIN
------- ENDMOD MAIN
------- MODULE SERIO
C:0000H SYMBOL _ICE_DUMMY_
D:00BAH PUBLIC SRELH
D:0090H PUBLIC P1
C:08DAH PUBLIC _serStringOut
D:00B0H PUBLIC P3
D:00AAH PUBLIC SRELL
D:00E8H PUBLIC P4
C:092FH PUBLIC serIn
B:00D8H.7 PUBLIC BD
C:0942H PUBLIC _serCharOut
D:00A8H PUBLIC IEN0
BL51 BANKED LINKER/LOCATER V6.22.4.0 05/22/2024 13:57:42 PAGE 4
D:00B8H PUBLIC IEN1
D:00D8H PUBLIC ADCON0
B:0098H.0 PUBLIC RI
C:093AH PUBLIC serWaitIn
B:0098H.1 PUBLIC TI
D:0087H PUBLIC PCON
D:0099H PUBLIC SBUF
D:0098H PUBLIC SCON
D:0088H PUBLIC TCON
C:0914H PUBLIC serInit
D:00C8H PUBLIC T2CON
D:00D0H PUBLIC PSW
D:00C0H PUBLIC IRCON
------- PROC SERIN
C:092FH LINE# 22
C:092FH LINE# 25
C:0932H LINE# 27
C:0934H LINE# 29
C:0937H LINE# 30
C:0937H LINE# 32
C:0939H LINE# 33
C:0939H LINE# 34
------- ENDPROC SERIN
------- PROC SERWAITIN
C:093AH LINE# 38
C:093AH LINE# 41
C:093DH LINE# 43
C:093FH LINE# 45
C:0941H LINE# 46
------- ENDPROC SERWAITIN
------- PROC _SERCHAROUT
D:0007H SYMBOL zeichen
C:0942H LINE# 51
C:0942H LINE# 54
C:0945H LINE# 56
C:0947H LINE# 59
C:0949H LINE# 60
------- ENDPROC _SERCHAROUT
------- PROC _SERSTRINGOUT
D:0014H SYMBOL string
------- DO
D:0006H SYMBOL z
------- ENDDO
C:08DAH LINE# 63
C:08E0H LINE# 66
C:08F4H LINE# 67
C:08F8H LINE# 68
C:08FAH LINE# 69
------- ENDPROC _SERSTRINGOUT
------- PROC SERINIT
C:0914H LINE# 72
C:0914H LINE# 84
C:0917H LINE# 86
C:091AH LINE# 88
C:091DH LINE# 90
C:091FH LINE# 103
C:0922H LINE# 104
BL51 BANKED LINKER/LOCATER V6.22.4.0 05/22/2024 13:57:42 PAGE 5
------- ENDPROC SERINIT
------- ENDMOD SERIO
------- MODULE ?C?CLDPTR
C:08FBH PUBLIC ?C?CLDPTR
------- ENDMOD ?C?CLDPTR
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?SERWAITIN?SERIO
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_SERSTRINGOUT?SERIO
******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 0134H BYTE (15%) *
******************************************************************************
Program Size: data=25.0 xdata=0 code=333
LINK/LOCATE RUN COMPLETE. 2 WARNING(S), 0 ERROR(S)

View File

@@ -0,0 +1,77 @@
C51 COMPILER V9.60.7.0 MAIN 05/22/2024 13:57:29 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\Objects\main.obj
COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main
-.lst) TABS(2) OBJECT(.\Objects\main.obj)
line level source
1 // Clear screen and set cursor home
2 #include <stdio.h>
3 #include <serIO.h>
4
5
6 unsigned char taste;
7
8 void indentWithSpace(int amount) {
9 1 int g;
10 1 for (g = 0; g < (amount); g++)
11 1 serCharOut(' '); // indenting
12 1 return;
13 1 }
14 void drawChristmastree(int width) {
15 1 int i;
16 1 int j;
17 1 for (i = 0; i < width; i++) {
18 2 indentWithSpace((width-i));
19 2
20 2 for (j = 0; j < ((2 * i) + 1); j++) { // draws '='
21 3 if (i > 0) serCharOut('=');
22 3 }
23 2 serCharOut('\n');
24 2 indentWithSpace(width);
25 2 serCharOut('='); // Stamm
26 2 serCharOut('\n');
27 2 }
28 1 }
29
30 void main() {
31 1
32 1
33 1 int hasChar = 0;
34 1
35 1 serInit();
36 1 while(hasChar == 0) {
37 2 taste = serIn();
38 2 if (taste != '\0') {
39 3 hasChar = 1;
40 3 break;
41 3 }
42 2 drawChristmastree(40);
43 2 }
44 1 return;
45 1 }
46
47 /* Gedanken zur Funktionalen Aufteilung und Erweiterung
48 - eigenst<73>ndige Funktion zum indenten ; Parameter: (int Anzahl ' ' (LEERZEICHEN))
49 - recursivit<69>t hier besonders interessant zum Zeichnen der Charakterketten Parameter: (int Schleifendurc
-hl<68>ufe)
50 */
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V9.60.7.0 MAIN 05/22/2024 13:57:29 PAGE 2
CODE SIZE = 218 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 12
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)

View File

@@ -0,0 +1,130 @@
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)