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)

Binary file not shown.

View File

@@ -0,0 +1,36 @@
<html>
<body>
<pre>
<h1>µVision Build Log</h1>
<h2>Tool Versions:</h2>
IDE-Version: µVision V5.38.0.0
Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: Mathys Touzet, -, LIC=----
Tool Versions:
Toolchain: PK51 Prof. Develpers Kit Version: 9.60.7.0
Toolchain Path: C:\Keil_v5\C51\BIN
C Compiler: C51.exe V9.60.7.0
Assembler: A51.exe V8.2.7.0
Linker/Locator: BL51.exe V6.22.4.0
Library Manager: LIB51.exe V4.30.1.0
Hex Converter: OH51.exe V2.7.0.0
CPU DLL: S8051.DLL V3.125.1.0
Dialog DLL: D500.DLL V2.52.1.0
<h2>Project:</h2>
C:\Users\chemical\Documents\BredisLieblingsOrdner\ZickZack\ZickZack.uvproj
Project File Date: 05/22/2024
<h2>Output:</h2>
Build target 'Target 1'
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?SERWAITIN?SERIO
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_SERSTRINGOUT?SERIO
Program Size: data=25.0 xdata=0 code=333
".\Objects\ZickZack" - 0 Error(s), 2 Warning(s).
Build Time Elapsed: 00:00:00
</pre>
</body>
</html>

View File

@@ -0,0 +1,5 @@
".\Objects\STARTUP.obj",
".\Objects\main.obj",
".\Objects\serIO.obj"
TO ".\Objects\ZickZack"
PRINT(".\Listings\ZickZack.m51") RAMSIZE(256)

View File

@@ -0,0 +1 @@
"main.c" OPTIMIZE (8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main.lst) TABS (2) OBJECT(.\Objects\main.obj)

Binary file not shown.

View File

@@ -0,0 +1 @@
"serIO.c" OPTIMIZE (8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\serIO.lst) TABS (2) OBJECT(.\Objects\serIO.obj)

View File

@@ -0,0 +1,198 @@
$NOMOD51
;------------------------------------------------------------------------------
; This file is part of the C51 Compiler package
; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.
; Version 8.01
;
; *** <<< Use Configuration Wizard in Context Menu >>> ***
;------------------------------------------------------------------------------
; STARTUP.A51: This code is executed after processor reset.
;
; To translate this file use A51 with the following invocation:
;
; A51 STARTUP.A51
;
; To link the modified STARTUP.OBJ file to your application use the following
; Lx51 invocation:
;
; Lx51 your object file list, STARTUP.OBJ controls
;
;------------------------------------------------------------------------------
;
; User-defined <h> Power-On Initialization of Memory
;
; With the following EQU statements the initialization of memory
; at processor reset can be defined:
;
; <o> IDATALEN: IDATA memory size <0x0-0x100>
; <i> Note: The absolute start-address of IDATA memory is always 0
; <i> The IDATA space overlaps physically the DATA and BIT areas.
IDATALEN EQU 80H
;
; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of XDATA memory
XDATASTART EQU 0
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory
PDATASTART EQU 0H
;
; <o> PDATALEN: PDATA memory size <0x0-0xFF>
; <i> The length of PDATA memory in bytes.
PDATALEN EQU 0H
;
;</h>
;------------------------------------------------------------------------------
;
;<h> Reentrant Stack Initialization
;
; The following EQU statements define the stack pointer for reentrant
; functions and initialized it:
;
; <h> Stack Space for reentrant functions in the SMALL model.
; <q> IBPSTACK: Enable SMALL model reentrant stack
; <i> Stack space for reentrant functions in the SMALL model.
IBPSTACK EQU 0 ; set to 1 if small reentrant is used.
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
; <i> Set the top of the stack to the highest location.
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the LARGE model.
; <q> XBPSTACK: Enable LARGE model reentrant stack
; <i> Stack space for reentrant functions in the LARGE model.
XBPSTACK EQU 0 ; set to 1 if large reentrant is used.
; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1
; </h>
;
; <h> Stack Space for reentrant functions in the COMPACT model.
; <q> PBPSTACK: Enable COMPACT model reentrant stack
; <i> Stack space for reentrant functions in the COMPACT model.
PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.
;
; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>
; <i> Set the top of the stack to the highest location.
PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
; </h>
;</h>
;------------------------------------------------------------------------------
;
; Memory Page for Using the Compact Model with 64 KByte xdata RAM
; <e>Compact Model Page Definition
;
; <i>Define the XDATA page used for PDATA variables.
; <i>PPAGE must conform with the PPAGE set in the linker invocation.
;
; Enable pdata memory page initalization
PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.
;
; <o> PPAGE number <0x0-0xFF>
; <i> uppermost 256-byte address of the page used for PDATA variables.
PPAGE EQU 0
;
; <o> SFR address which supplies uppermost address byte <0x0-0xFF>
; <i> most 8051 variants use P2 as uppermost address byte
PPAGE_SFR DATA 0A0H
;
; </e>
;------------------------------------------------------------------------------
; Standard SFR Symbols
ACC DATA 0E0H
B DATA 0F0H
SP DATA 81H
DPL DATA 82H
DPH DATA 83H
NAME ?C_STARTUP
?C_C51STARTUP SEGMENT CODE
?STACK SEGMENT IDATA
RSEG ?STACK
DS 1
EXTRN CODE (?C_START)
PUBLIC ?C_STARTUP
CSEG AT 0
?C_STARTUP: LJMP STARTUP1
RSEG ?C_C51STARTUP
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
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
IF PPAGEENABLE <> 0
MOV PPAGE_SFR,#PPAGE
ENDIF
IF PDATALEN <> 0
MOV R0,#LOW (PDATASTART)
MOV R7,#LOW (PDATALEN)
CLR A
PDATALOOP: MOVX @R0,A
INC R0
DJNZ R7,PDATALOOP
ENDIF
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
MOV ?C_IBP,#LOW IBPSTACKTOP
ENDIF
IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)
MOV ?C_XBP,#HIGH XBPSTACKTOP
MOV ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF
IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
MOV ?C_PBP,#LOW PBPSTACKTOP
ENDIF
MOV SP,#?STACK-1
; This code is required if you use L51_BANK.A51 with Banking Mode 4
;<h> Code Banking
; <q> Select Bank 0 for L51_BANK.A51 Mode 4
#if 0
; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.
EXTRN CODE (?B_SWITCH0)
CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
#endif
;</h>
LJMP ?C_START
END

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc; *.md</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp; *.cc; *.cxx</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
<CLK51>24000000</CLK51>
<OPTTT>
<gFlags>0</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>0</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>120</PageWidth>
<PageLength>65</PageLength>
<TabStop>8</TabStop>
<ListingPath>.\Listings\</ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>255</CpuCode>
<Books>
<Book>
<Number>0</Number>
<Title>C500 Instruction Set Manual</Title>
<Path>DATASHTS\INFINEON\C500_AISM.PDF</Path>
</Book>
<Book>
<Number>1</Number>
<Title>User's Manual</Title>
<Path>DATASHTS\INFINEON\C515_UM.PDF</Path>
</Book>
</Books>
<DebugOpt>
<uSim>1</uSim>
<uTrg>0</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>0</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>-1</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon></pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGD500</Key>
<Name>(98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(86=-1,-1,-1,-1,0)(87=-1,-1,-1,-1,0)(5049=-1,-1,-1,-1,0)(5058=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0)(5045=-1,-1,-1,-1,0)(5046=-1,-1,-1,-1,0)(5059=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>0</aLwin>
<aCover>0</aCover>
<aSer1>1</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>1</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption>
</Target>
<Group>
<GroupName>Source Group 1</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\STARTUP.A51</PathWithFileName>
<FilenameWithoutPath>STARTUP.A51</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\main.c</PathWithFileName>
<FilenameWithoutPath>main.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\serIO.c</PathWithFileName>
<FilenameWithoutPath>serIO.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_proj.xsd">
<SchemaVersion>1.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>C515-L</Device>
<Vendor>Infineon</Vendor>
<Cpu>IRAM(0-0xFF) CLOCK(24000000)</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>2909</DeviceId>
<RegisterFile>REG515.H</RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile></SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>Infineon\</RegisterFilePath>
<DBRegisterFilePath>Infineon\</DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
<ButtonStop>0</ButtonStop>
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>ZickZack</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>0</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
<nStopU2X>0</nStopU2X>
</BeforeCompile>
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
<nStopB2X>0</nStopB2X>
</BeforeMake>
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>0</AlwaysBuild>
<GenerateAssemblyFile>0</GenerateAssemblyFile>
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>D500.DLL</SimDlgDll>
<SimDlgDllArguments>-p515</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>T500.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p515</TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
<HexSelection>0</HexSelection>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>1</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>0</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>-1</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver></Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
<UseTargetDll>0</UseTargetDll>
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>0</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<DriverSelection>-1</DriverSelection>
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<Target51>
<Target51Misc>
<MemoryModel>0</MemoryModel>
<RTOS>0</RTOS>
<RomSize>2</RomSize>
<DataHold>0</DataHold>
<XDataHold>0</XDataHold>
<UseOnchipRom>0</UseOnchipRom>
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>0</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
<useCB>0</useCB>
<useXB>0</useXB>
<useL251>0</useL251>
<useA251>0</useA251>
<Mx51>0</Mx51>
<ModC812>0</ModC812>
<ModCont>0</ModCont>
<Lp51>0</Lp51>
<useXBS>0</useXBS>
<ModDA>0</ModDA>
<ModAB2>0</ModAB2>
<Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2>
<hadXRAM3>0</hadXRAM3>
<ModC2>0</ModC2>
<ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc>
<hadIROM2>0</hadIROM2>
<hadIROM3>0</hadIROM3>
<ModSmx2>0</ModSmx2>
<cBanks>0</cBanks>
<xBanks>0</xBanks>
<OnChipMemories>
<RCB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RCB>
<RXB>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</RXB>
<Ocm1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm1>
<Ocm2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm2>
<Ocm3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocm3>
<Ocr1>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr1>
<Ocr2>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr2>
<Ocr3>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</Ocr3>
<IRO>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA512>
<IROM512>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM512>
<XRA513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA513>
<IROM513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM513>
</OnChipMemories>
</Target51Misc>
<C51>
<RegisterColoring>0</RegisterColoring>
<VariablesInOrder>0</VariablesInOrder>
<IntegerPromotion>1</IntegerPromotion>
<uAregs>0</uAregs>
<UseInterruptVector>1</UseInterruptVector>
<Fuzzy>3</Fuzzy>
<Optimize>8</Optimize>
<WarningLevel>2</WarningLevel>
<SizeSpeed>1</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</C51>
<Ax51>
<UseMpl>0</UseMpl>
<UseStandard>1</UseStandard>
<UseCase>0</UseCase>
<UseMod51>0</UseMod51>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Ax51>
<Lx51>
<useFile>0</useFile>
<linkonly>0</linkonly>
<UseMemoryFromTarget>1</UseMemoryFromTarget>
<CaseSensitiveSymbols>0</CaseSensitiveSymbols>
<WarningLevel>2</WarningLevel>
<DataOverlaying>1</DataOverlaying>
<OverlayString></OverlayString>
<MiscControls></MiscControls>
<DisableWarningNumbers></DisableWarningNumbers>
<LinkerCmdFile></LinkerCmdFile>
<Assign></Assign>
<ReserveString></ReserveString>
<CClasses></CClasses>
<UserClasses></UserClasses>
<CSection></CSection>
<UserSection></UserSection>
<CodeBaseAddress></CodeBaseAddress>
<XDataBaseAddress></XDataBaseAddress>
<PDataBaseAddress></PDataBaseAddress>
<BitBaseAddress></BitBaseAddress>
<DataBaseAddress></DataBaseAddress>
<IDataBaseAddress></IDataBaseAddress>
<Precede></Precede>
<Stack></Stack>
<CodeSegmentName></CodeSegmentName>
<XDataSegmentName></XDataSegmentName>
<BitSegmentName></BitSegmentName>
<DataSegmentName></DataSegmentName>
<IDataSegmentName></IDataSegmentName>
</Lx51>
</Target51>
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group 1</GroupName>
<Files>
<File>
<FileName>STARTUP.A51</FileName>
<FileType>2</FileType>
<FilePath>.\STARTUP.A51</FilePath>
</File>
<File>
<FileName>main.c</FileName>
<FileType>1</FileType>
<FilePath>.\main.c</FilePath>
</File>
<File>
<FileName>serIO.c</FileName>
<FileType>1</FileType>
<FilePath>.\serIO.c</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>
</Project>

View File

@@ -0,0 +1,50 @@
// Clear screen and set cursor home
#include <stdio.h>
#include <serIO.h>
unsigned char taste;
void indentWithSpace(int amount) {
int g;
for (g = 0; g < (amount); g++)
serCharOut(' '); // indenting
return;
}
void drawChristmastree(int width) {
int i;
int j;
for (i = 0; i < width; i++) {
indentWithSpace((width-i));
for (j = 0; j < ((2 * i) + 1); j++) { // draws '='
if (i > 0) serCharOut('=');
}
serCharOut('\n');
indentWithSpace(width);
serCharOut('='); // Stamm
serCharOut('\n');
}
}
void main() {
int hasChar = 0;
serInit();
while(hasChar == 0) {
taste = serIn();
if (taste != '\0') {
hasChar = 1;
break;
}
drawChristmastree(40);
}
return;
}
/* Gedanken zur Funktionalen Aufteilung und Erweiterung
- eigenst<73>ndige Funktion zum indenten ; Parameter: (int Anzahl ' ' (LEERZEICHEN))
- recursivit<69>t hier besonders interessant zum Zeichnen der Charakterketten Parameter: (int Schleifendurchl<68>ufe)
*/

View File

@@ -0,0 +1,104 @@
/*
* serIO.c:
* Eingabe und Ausgabe ueber die serielle Schnittstelle.
*
* Jan Bredereke, 2019, 2024
*/
/* Die eigene Header-Datei: */
#include "serIO.h"
/* Die Definitionen von Special-Funktion-Registern fuer den
* Mikrocontroller C515C: */
#include <REG515C.H>
/* Die oeffentlichen Methoden: */
/* --------------------------- */
/* Holt ein einzelnes Zeichen von der seriellen Schnittstelle, ohne
* darauf zu warten. */
/* Falls kein Zeichen da ist, wird Null zurueckgegeben. */
char serIn(void) {
/* Pruefe, ob ein Zeichen gelesen worden ist.
* (Dann wird das Receiver-Interrupt-Flag gesetzt.) */
if (RI) {
/* Loesche das Receiver-Interrupt-Flag wieder. */
RI = 0;
/* Hole das Zeichen und gib es zurueck. */
return SBUF;
} else {
/* Sonst gib Null zurueck. */
return '\0';
}
}
/* Holt ein einzelnes Zeichen von der seriellen Schnittstelle und
* wartet ggf., bis eines da ist. */
char serWaitIn(void) {
/* Warte, bis ein Zeichen empfangen wurde. (Dann wird das
* Receiver-Interrupt-Flag gesetzt.) */
while (!RI);
/* Loesche das Receiver-Interrupt-Flag wieder. */
RI = 0;
/* Hole das empfangene Zeichen und gib es zurueck. */
return SBUF;
}
/* Gibt ein Zeichen ueber die serielle Schnittstelle aus. */
/* Wartet nur, falls zur Zeit eine fruehrere solche Ausgabeoperation
* noch nicht abgeschlossen ist. */
void serCharOut(char zeichen) {
/* Warte ggf., bis das vorige Zeichen fertig ausgegeben ist.
* (Dann wird das Transmitter-Interrupt-Flag gesetzt.) */
while (!TI);
/* Loesche das Transmitter-Interrupt-Flag wieder. */
TI = 0;
/* Lege das Zeichen in Sendepuffer und beginne die Uebertragung, ohne
* auf deren Ende zu Warten. */
SBUF = zeichen;
}
/* Gibt einen String ueber die serielle Schnittstelle aus. */
void serStringOut(char *string) {
char z; /* Das naechste zu druckende Zeichen */
while (z = *string++) {
serCharOut(z);
}
}
/* Initialisiert die Eingabe+Ausgabe ueber die serielle Schnittstelle. */
void serInit(void) {
/* Initialisiert die serielle Schnittstelle des C515C
* auf 9600 Baud, 1 Stoppbit, kein Paritybit.
* Ein Aufruf ist bei der echten Mikrocontrollerkarte im Labor
* nicht noetig (aber auch nicht schaedlich), da fuer das Laden des
* Programms schon eine Initialisierung durch uVision erfolgt.
* Siehe auch das C515C-User-Manual, Seite 6-48ff.
*/
/* Laedt Baud-Rate-Zaehler, oberer Teil
* (Formel im User-Manual auf S. 6-54).
*/
SRELH = 0x03;
/* Laedt Baud-Rate-Zaehler, unterer Teil, und setze Zaehler zurueck. */
SRELL = 0xbf;
/* Setzt SMOD-Bit im Register PCON (verdoppelt Baud-Rate). */
PCON |= 0x80;
/* Setzt BD-Bit im Register ADCON0 (Baud rate generator enable). */
BD = 1;
/* Setzt Bits im Register SCON (von links nach rechts):
* SM0=0, SM1=1, SM2=0:
* serial mode 1, also 8-Bit-UART
* mit variabler Baud-Rate,
* einem Stoppbit und keinem
* Paritybit.
* REN=1: Receiver enable.
* TB8=0: unbenutzt (9. Sendebit).
* RB8=0: unbenutzt (9. Empfangsbit).
* TI=1: Transmitter-Interrupt-Flag.
* RI=0: Receiver-Interrupt-Flag.
*/
SCON = 0x52;
}

View File

@@ -0,0 +1,36 @@
/*
* serIO.c:
* Header-Datei fuer die
* Eingabe und Ausgabe ueber die serielle Schnittstelle.
*
* Jan Bredereke, 2019, 2024
*/
#ifndef SERIO_H
#define SERIO_H
/* Die oeffentlichen Methoden: */
/* --------------------------- */
/* Holt ein einzelnes Zeichen von der seriellen Schnittstelle, ohne
* darauf zu warten. */
/* Falls kein Zeichen da ist, wird Null zurueckgegeben. */
char serIn(void);
/* Holt ein einzelnes Zeichen von der seriellen Schnittstelle und
* wartet ggf., bis eines da ist. */
char serWaitIn(void);
/* Gibt ein Zeichen ueber die serielle Schnittstelle aus. */
/* Wartet nur, falls zur Zeit eine fruehrere solche Ausgabeoperation
* noch nicht abgeschlossen ist. */
void serCharOut(char zeichen);
/* Gibt einen String ueber die serielle Schnittstelle aus. */
void serStringOut(char *string);
/* Initialisiert die Eingabe+Ausgabe ueber die serielle Schnittstelle. */
void serInit(void);
#endif