> While LED blinking and timer interrupts re working now, I wasn't able to > get serial I/O to work yet. I only see garbage (all received bytes are > either 0x00 or 0x80). > I tried to port my "Hello, world!" that I already got working for many > other mcs51 variants: > > #include <stdio.h> > > #include <C8051F120.h> > > int putchar(int c) > { > while(!(SCON0 & 0x02)); > SCON0 &= ~0x02; > SBUF0 = c; > return (c); > } > > unsigned char _sdcc_external_startup(void) > { > // Disable watchdog timer > WDTCN = 0xde; > WDTCN = 0xad; > > return 0; // perform normal initialization > } > > void main(void) > { > unsigned long int i = 0; > > // Initialize I/O pins > SFRPAGE = 0xf; > XBR0 = 0x04; // UART0 on P0.0 and P0.1 > P0MDOUT = 0x01; // Set port P0.0 (Uart tx) to > push-pull > XBR2 = 0x40; // Enable crossbar > > // Configure UART for 300 baud, 8 data bits, 1 stop bit. > SFRPAGE = 0x0; > TMOD = 0x20; > SCON0 = 0x40; > TH1 = 45; > TCON |= 0x40; > SCON0 |= 0x02; // Tell putchar() the UART is > ready to send. > > for(;;) > { > printf("Hello World!\n"); > for(i = 0; i < 147456; i++); // Sleep > } > } > > I've tried to different serial-to-usb converters (one attached to the > R232 header on the board, the other directly to the Tx pin) and multiple > baudrates. > > Philipp
These values get you a 453 baudrate: 24.5MHz / 8 / (256-45) / 32 = 453 300 baud is really low and impossible to achieve with T1 in 8-bit autoreload. Most USB-UARTs even have this as their lower level limit. Further, to get to know the SiLabs chips, it's always instructive to run their (windows) Configuration tool. Maarten ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user