Auch beim IAP15W4K58S4 ist es mir bisher nicht gelungen, den UART zum
Laufen zu bringen.
1 | #include <stdio.h>
|
2 |
|
3 | __sfr __at(0x88) TCON;
|
4 | __sfr __at(0x89) TMOD;
|
5 | __sfr __at(0x8b) TL1;
|
6 | __sfr __at(0x8d) TH1;
|
7 |
|
8 | __sfr __at(0x98) SCON;
|
9 | __sfr __at(0x99) SBUF;
|
10 |
|
11 | int putchar(int c)
|
12 | {
|
13 | while(!(SCON & 0x02));
|
14 | SCON &= ~0x02;
|
15 | SBUF = c;
|
16 | return (c);
|
17 | }
|
18 |
|
19 | void main(void)
|
20 | {
|
21 | unsigned long int i = 0;
|
22 |
|
23 | // Configure UART for 9600 baud, 8 data bits, 1 stop bit.
|
24 | TMOD = 0x20;
|
25 | SCON = 0x40;
|
26 | TH1 = 256 - 24.0 * 1000 * 1000 / 12 / 32 / 9600 + 0.5;
|
27 | TCON |= 0x40;
|
28 | SCON |= 0x02; // Tell putchar() the UART is ready to send.
|
29 |
|
30 | for(;;)
|
31 | {
|
32 | printf("Hello World!\n");
|
33 | for(i = 0; i < 147456; i++); // Sleep
|
34 | }
|
35 | }
|
Auch dort klappt es aber mit Timer und I/O
(http://www.colecovision.eu/mcs51/STC15W4K56S4%20SCM%20LED.shtml).