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)11int sifchar(int c) 12 { 13 *sif= 'p'; 14 *sif= c; 15 return c; 16 } 17 waitsend()18void waitsend() 19 { 20 while(!(USART->sr & USART_SR_TXE)); 21 } 22 putchar(int c)23int putchar(int c) 24 { 25 while(!(USART->sr & USART_SR_TXE)); 26 USART->dr = c; 27 return c; 28 } 29 received()30char received() 31 { 32 return USART->sr & USART_SR_RXNE; 33 } 34 getchar()35char getchar() 36 { 37 while (!received()) 38 ; 39 return USART->dr; 40 } 41 prints(char * s)42void prints(char *s) 43 { 44 char i= 0; 45 while (s[i]) 46 { 47 putchar(s[i]); 48 i++; 49 } 50 } 51 main(void)52void 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