1 #include <stdint.h>
2 #include <stdio.h>
3 #include <ctype.h>
4 
5 #define DEVICE DEV_STM8S208
6 
7 #include "stm8.h"
8 
9 volatile unsigned char *sif= (unsigned char *)0x7fff;
10 
sifchar(int c)11 int sifchar(int c)
12 {
13   *sif= 'p';
14   *sif= c;
15   return c;
16 }
17 
waitsend()18 void waitsend()
19 {
20   while(!(USART->sr & USART_SR_TXE));
21 }
22 
putchar(int c)23 int putchar(int c)
24 {
25   while(!(USART->sr & USART_SR_TXE));
26   USART->dr = c;
27   return c;
28 }
29 
received()30 char received()
31 {
32   return USART->sr & USART_SR_RXNE;
33 }
34 
getchar()35 char getchar()
36 {
37   while (!received())
38     ;
39   return USART->dr;
40 }
41 
prints(char * s)42 void prints(char *s)
43 {
44   char i= 0;
45   while (s[i])
46     {
47       putchar(s[i]);
48       i++;
49     }
50 }
51 
main(void)52 void main(void)
53 {
54   unsigned long i = 0;
55 
56   CLK->ckdivr = 0x00; // Set the frequency to 16 MHz
57   CLK->pckenr1 = 0xFF; // Enable peripherals
58 
59   USART->cr2 = USART_CR2_TEN; // Allow TX only yet
60   USART->cr3 &= ~(USART_CR3_STOP1 | USART_CR3_STOP2); // 1 stop bit
61   USART->brr2 = 0x03;
62   USART->brr1 = 0x68; // 9600 baud
63 
64   printf("Hello World!\n");
65   waitsend();
66   USART->cr2 = USART_CR2_TEN | USART_CR2_REN; // Allow TX and RX
67   for (;;)
68     {
69       if (received())
70 	{
71 	  char c= getchar();
72 	  *sif= 'x';*sif= c;
73 	  putchar(toupper(c));
74 	  if (c == 'Z')
75 	    *sif= 's';
76 	}
77     }
78 }
79