correct setup of timer / UART
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 3 Jan 2002 23:15:16 +0000 (23:15 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 3 Jan 2002 23:15:16 +0000 (23:15 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1766 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
support/regression/ports/mcs51/support.c

index 5ddac3e966472d85df88f11d6184b72c646c8319..d719f201fef91c3395112ddc0708466c6d512442 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2001-01-04  Bernhard Held  <bernhard@bernhardheld.de>
+
+       * support/regression/ports/mcs51/support.c: correct setup of timer / UART
+
 2001-01-03  Bernhard Held  <bernhard@bernhardheld.de>
 
        * src/SDCCsymt.c (processFuncArgs): fix #498307 by Johan
index ce445113486182208c70c6cf90ea661fa301aaca..5ef3dadea1a0d3a4bfcec5b393d705cd0ea4ae86 100644 (file)
@@ -1,14 +1,35 @@
-// #define MICROCONTROLLER_8051 
+// #define MICROCONTROLLER_8051
 #include <mcs51reg.h>
 
+unsigned char
+_sdcc_external_startup (void)
+{
+  /* copied from device/examples/mcs51/simple2/hi.c */
+  PCON = 0x80;  /* power control byte, set SMOD bit for serial port */
+  SCON = 0x40;  /* serial control byte, mode 1, RI _NOT_ active */
+  TMOD = 0x21;  /* timer control mode, byte operation */
+  TCON = 0;     /* timer control register, byte operation */
+
+  TH1  = 0xFA;  /* serial reload value, 9,600 baud at 11.0952Mhz */
+  TR1  = 1;     /* start serial timer */
+
+  TI   = 1;     /* enable transmission of first byte */
+  return 0;
+}
+
 void
 _putchar (char c)
 {
+  while (!TI)
+    ;
   SBUF = c;
+  TI = 0;
 }
 
 void
 _exitEmu (void)
 {
+  while (!TI) /* wait for the last character to be transmitted */
+    ;         /* before hitting the breakpoint */
   * (char idata *) 0 = * (char xdata *) 0x7654;
 }