1 | //-----------------------------------------------------------------------------
|
2 | // Includes
|
3 | //-----------------------------------------------------------------------------
|
4 | #include <c8051f330.h> // SFR declarations
|
5 | #include <stdio.h>
|
6 |
|
7 |
|
8 | //-----------------------------------------------------------------------------
|
9 | // Global CONSTANTS
|
10 | //-----------------------------------------------------------------------------
|
11 | #define SYSCLK 24500000 // SYSCLK frequency in Hz
|
12 | #define BAUDRATE 9600 // Baud rate of UART in bps
|
13 |
|
14 | //-----------------------------------------------------------------------------
|
15 | // Function PROTOTYPES
|
16 | //-----------------------------------------------------------------------------
|
17 | void SYSCLK_Init (void);
|
18 | void PORT_Init (void);
|
19 | void UART0_Init (void);
|
20 |
|
21 | //-----------------------------------------------------------------------------
|
22 | // Global VARIABLES
|
23 | //-----------------------------------------------------------------------------
|
24 |
|
25 |
|
26 |
|
27 | //-----------------------------------------------------------------------------
|
28 | // MAIN Routine
|
29 | //-----------------------------------------------------------------------------
|
30 |
|
31 | void main (void)
|
32 | {
|
33 | char input_char;
|
34 |
|
35 | //WDTCN = 0xde; // disable watchdog timer
|
36 | //WDTCN = 0xad;
|
37 |
|
38 | SYSCLK_Init (); // initialize oscillator
|
39 | PORT_Init (); // initialize crossbar and GPIO
|
40 | UART0_Init (); // initialize UART0
|
41 |
|
42 | //transmit example
|
43 |
|
44 | printf ("Hello World!\n");
|
45 |
|
46 |
|
47 | while (1)
|
48 | {
|
49 | input_char = getchar();
|
50 | printf("`%c`, 0x%02x\n",(unsigned char)input_char, (unsigned) input_char);
|
51 |
|
52 | }
|
53 | }
|
54 |
|
55 |
|
56 | //-----------------------------------------------------------------------------
|
57 | // SYSCLK_Init
|
58 | //-----------------------------------------------------------------------------
|
59 | //
|
60 | // This routine initializes the system clock to use an 24.5MHz crystal
|
61 | // as its clock source.
|
62 | //
|
63 |
|
64 | void SYSCLK_Init (void)
|
65 | {
|
66 |
|
67 | OSCICN = 0x83; // start internal oscillator with
|
68 | // 24.5MHz crystal
|
69 |
|
70 | }
|
71 |
|
72 |
|
73 | //-----------------------------------------------------------------------------
|
74 | // PORT_Init
|
75 | //-----------------------------------------------------------------------------
|
76 | //
|
77 | // Configure the Crossbar and GPIO ports
|
78 | //
|
79 |
|
80 | void PORT_Init (void)
|
81 | {
|
82 | P0MDOUT = 0x10; // enable TX0 as a push-pull output
|
83 |
|
84 | XBR0 = 0x01; // Enable UART0
|
85 | XBR1 = 0xC0;
|
86 |
|
87 | }
|
88 |
|
89 |
|
90 | //-----------------------------------------------------------------------------
|
91 | // UART0_Init
|
92 | //-----------------------------------------------------------------------------
|
93 | //
|
94 | // Configure the UART0 using Timer1, for <baudrate> and 8-N-1.
|
95 | //
|
96 |
|
97 | void UART0_Init (void)
|
98 | {
|
99 | SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
|
100 | TCON = 0x40;
|
101 | TMOD = 0x20; // TMOD: timer 1, mode 2, 8-bit reload
|
102 | TH1 = 0x96; // set Timer1 reload value for baudrate
|
103 | //PCON |= 0x80; // SMOD00 = 1
|
104 | TI0 = 1; // Indicate TX0 ready
|
105 | }
|