49fa3328405ccfcdc4192d4c6adccceb4f2d17a0
[fw/sdcc] / device / examples / xa51 / hello.c
1 #include <xa.h>
2
3 bit b1, b2;
4 data d1, d2;
5 xdata x1, x2;
6
7 #define BAUD_RATE 9600
8 #define OSC 20000000L   /* Xtal frequency */
9
10 #define DIVIDER (OSC/(64L*BAUD_RATE))
11
12 void external_startup(void) {
13   _asm
14     mov.b       _WDCON,#0       ;shut down the watchdog
15     mov.b       _WFEED1,#0a5h
16     mov.b       _WFEED2,#05ah
17 ;   mov.b       _BCR,#1 ;BCR: 8 data, 16 address
18 ;   mov.b       _SCR,#1 ;SCR: page zero mode
19   _endasm;
20
21   // init serial io
22   TL1 = RTL1 = -DIVIDER;
23   TH1 = RTH1 = -DIVIDER >> 8;
24   TR1 = 1;              /* enable timer 1 */
25   
26   S0CON = 0x52;         /* mode 1, receiver enable */
27   IPA4 |= 0x6;          /* maximum priority */
28   ERI0=1;               /* enable receiver interupts */
29   TI0==1;               /* transmitter empty */
30   RI0=0;                /* receiver empty */
31   
32   //PSWH &= 0xf0;       /* start interupt system */
33 }
34
35 void putchar(char c) {
36   while(!TI0) 
37     ;
38   S0BUF = c;
39   TI0 = 0;
40 }
41
42
43 char getchar(void) {
44   char  c;
45   
46   while (!RI0) 
47     ;
48   c=S0BUF;
49   RI0=0;
50   return c;
51 }
52
53 void puts(char *s) {
54   while (*s) {
55     putchar (*s++);
56   }
57 }
58
59 int kbhit(void) {
60   return RI0;
61 }
62
63 void main(void) {
64   puts ("Hello world.\n\r");
65 }