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

34
Semester 4/MICONT/Labor 02.md Executable file
View File

@@ -0,0 +1,34 @@
## Versuchsdurchführungen
### Verkabelung
Folgende Verkabelung vornehmen:
| Steckerfarbe | Bedeutung | Position |
| ------------ | --------- | -------------------------------------------------------- |
| rot | +$5$ V | ganz hinten, hinter "7", Schrift "+5V" ist fast verdeckt |
| grün | SCL | Port 4.1 |
| blau | SDA | Port 4.0 |
| schwarz | GND | ganz vorne mit "GND" beschriftet |
- Mikrocontroller einschalten
## Einstellungen Messsoftware
- Erstellen eines neuen Projektes in LogicPort
- Messkonstanten
- Sample Rate: $500$kHz
- Sample Period: $2\ \mu$S
- Logic-Threshold $2$ V
- Somit Bitlänge von $\frac{1}{100\ \text{kHz}} = 10\ \mu\text{s}$
- Neue Gruppen erstellen
- Umbennen der verwendeten Kabel zur Messung von TxD, RxD
- Einstellen des Messpatterns anhand angepasster Flankeneingabe
## Einstellungen Runtime Environment
### RTC
- Auswahl des Projektes mit der Uhr
- debug/start drücken
- run drücken
### Temperatursensor
- Siehe Vorgang RTC
## Durchführung
- In der Messsoftware Messung starten
- Korrektes Projekt mit Keil $\mu$Vision für das passende Modul hinzufügen, kompilieren, debug/start, run
- **ACHTUNG** bei der Uhr (RTC) nicht kompilieren!
- LEDs an den Ports 1 und 5 notieren
- Messung auf Richtigkeit (durch dem Ablesen der Werte) überprüfen, und anschließend Abspeichern

0
Semester 4/MICONT/Labor 06.md Executable file
View File

View File

@@ -0,0 +1,175 @@
C515C Mikrocontroller
Klausur Ersttermin: 11.7.2024 Gruppe II 12:55 - 17:00
# Organisatorisches
Labor: Logikanalyse
6 Laboreinheiten mit Analyse und Programmierung des 8051 Mikrocontroller
- In Aulis Aufgaben zum Vor- & Nacharbeiten
- Bei Messaufgaben ist ein Bericht gefordert, bei Programmierungsaufgaben ist dies nicht nötig.
- Ein Antreten ist beim 1. Prüfungstermin der Laboraufgaben ist VERPFLICHTEND, ansonsten kämpft man mit dem Prüfungsauschuss
Bredi stellt ein LaTeX-Packet zur verfügung für irgendwas... habs nicht mental aufgenommen, dient aber dem Kontext der Labore
Labortermin wird Donnerstag um eine viertel Stunde verschoben.
# Grundlagen der Programmiersprache C
Quellcode wird von Bredi hochgeladen.
KEINE KLASSEN WUUUUUUUUU
STARTUP.A51 --> Assembly Datei für 8051 Microkontroller
stdint.h definiert verlässliche Bitbreite von Variablen (ein long ist nicht unbedingt 32 Bits)
\_t steht für Typ und ist Konvention
## Einstellungen $\mu$Vision
Für die Labore werden C515C-L Microcontroller verwendet, für mu vision ist dies ebenfalls wichtig.
Memory Model: Small
Code Rom Size: Compact
### Debug:
- Use Keil Monitor-51 Driver wenn ein Microkontroller angeschlossen ist ansonsten use Simulator
- Target setup
- Einstellen des Portes
- Stop Program Execution with Serial Interrupt wird empfohlen
- Einstellen des WatchDog-Timers
- mitgabe einer Initialization File
- WatchdogAus.ini
- .\
### Einzelne Ausgabe der Einzelnen Bits und Bytes
- Ansprechen über die Speicherbereiche (Special Function Register)
- Mehrere SFR für Ports
- Port 5 ist frei verfügbar, 4 ist größtenteils verfügbar, Port 1 abhängig vom Jumper
```java
#include <REG515C.h> // enthält die ganzen Codes zum Ansprechen der Ports etc
sfr meinPort = 0x90; // special function register, definition der Adresse des Portes nummer 1
sbit meinLsbVonP1 = meinPort^0; // auswahl des signifikanten Bits
```
```c
switch (tier) {
case hund:
demovar = 47;
case katze:
demovar =+ 2;
break;
}
```
Der gegebene Code läuft wenn tier == hund ist durch den Case *hund* und danach durch den Case *katze*, weil nicht *gebreaked* wird.
Zitate usw. beispielsweise: [Brede, 24]
_____
### Kontrollstrukturen
Setzen von Bits anhand von Masken (meistens ein Byte, der &, | genommen wird um den gewünschten Bit zu invertieren).
```C
/*
& and
| or
^ xor
~ complement
>> right shifting
<< left shifting
*/
```
Bedenke an Port 5 des Mikrocontrollers gilt negative Logik, daher ~-Operator verwenden.
### Ein und Ausgabe für Zwecke der Laborausgaben
Ausschnitt aus eingabeAusgabeDemo.c
```C
#include <serIO.h>
serInit();
uchar taste = serWaitIn(); //Warten auf Eingabe
taste = serIn(); //Direkte Eingabe
serCharOut(taste);
```
Ausschnitt aus komplexeDatentypenDemo.c
```C
int *intptr;
int cream[10];
inptr = cream //bekommt die adresse vom nullten Index von cream
*intptr++ = 37 // setzt cream[0] = 37 und erhöht dann den Zeiger um die Bitzahl eines Integers
```
Es gibt 3 Addressspeicher für den Mikrocontroller, in den Speicherraum code, kann eingeschrieben werden, danach aber nicht modifiziert werden.
```C
char code myString[] = "Hallo Welt.";
```
## Grundlegende Hardwarestruktur eines Rechners
Wie wird eine konstante geladen?
Wie wird eine konstante aus einem Register in den Speicher geladen?
## Hardwarestruktur des 8051 Mikrocontrollers
Kurze Wiederholung vom Speicher-Layout.
Registerbank (RB0 - RB3) kann durchaus sinnvoll für den 32 Bit-Addierer sein. Oder es wird eine Registerbank und alle 8 Register verwendet.
code, data und xdata
### Erstellen eines Projektes für Assembler
1. New Projekt
1. C515C-L
2. Do not copy STARTUP.A51
2. .s Datei erstellen (wird von alleine zu einer .a51)
3. Options
1. A51
1. Define 8051 SFR Names checked (oder nicht abhängig von der Config)
2. Target
1. Operating System: Compact
```c
#include <REF515C.H>
org 0 //start bei Adresse 0
jmp 0 // springe zu Adresse 0
end
```
## Hardware-Operationen und -Kontrollstrukturen der 8051 Mikrocontroller
```c
setb c //ansprechen des ein bit-registers
clr c //clear
; //Kommentar
mov dptr,#02000h //initialisierung des Datapointers bei externer Adresse 02000h
movx @dptr,a // Einschreiben des Akkumulatorwertes in die externe Adresse 02000h
//---- Logische Befehle ----
anl
orl
xrl
setb 4 // setzt den 4. Bit auf 1
cpl //
//----Grundlegende Sprungbefehle----
jmp sprungziel
sprungziel:
jz //sprung nur bei Akkumulator bei Null
jnz //jump not zero
jc //jump carry (carry ist eins)
jnc // jump not carry
dnjz //decrementiert und spring wenn nicht null
cjne //vergleich und sprung und kann ein Carry-Flag setzen
PSW //Program Status Word
rr
rrc
da //Überlaufkorrektur
swap //
mov
movc //
jb p1.0,$ // warten auf fallende Flanke
jnb p1.0,$ // warten auf steigende Flanke
codebase equ 0 //setzen eines variabelnamen für bestimmten Wert
```

BIN
Semester 4/MICONT/MICONT_L06.pdf Executable file

Binary file not shown.

0
Semester 4/MICONT/Untitled.md Executable file
View File