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)
