Rev 2294 Rev 3500
1 #include "usart.h" 1 #include "usart.h"
2   2  
3 #include <avr/io.h> 3 #include <avr/io.h>
4   4  
5   5  
6 void USART_Init( unsigned int ubrr) 6 void USART_Init( unsigned int ubrr)
7 { 7 {
8 /* Set baud rate */ 8 /* Set baud rate */
9 UBRRH = (unsigned char)(ubrr>>8); 9 UBRRH = (unsigned char)(ubrr>>8);
10 UBRRL = (unsigned char)ubrr; 10 UBRRL = (unsigned char)ubrr;
11   11  
12 /* flush transmitt register Double speed */ 12 /* flush transmitt register Double speed */
13 UCSRA = (1<<UDRE)|(1 << U2X); 13 UCSRA = (1<<UDRE)|(1 << U2X);
14   14  
15 /* enable receiver interrupt and transmitter, pins forced */ 15 /* enable receiver interrupt and transmitter, pins forced */
16 UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); 16 UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
17   17  
18 /* Asynchronous, no parity, Set frame format: 8data, 1stop bit */ 18 /* Asynchronous, no parity, Set frame format: 8data, 1stop bit */
19 UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1); 19 UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
20 } 20 }
21   21  
22   22  
23 void USART_Transmit( unsigned char data ) 23 void USART_Transmit( unsigned char data )
24 { 24 {
25 while ( !( UCSRA & (1<<UDRE)) ); /* Wait for empty transmit buffer */ 25 while ( !( UCSRA & (1<<UDRE)) ); /* Wait for empty transmit buffer */
26   26  
27 UDR = data; /* Put data into buffer, sends the data */ 27 UDR = data; /* Put data into buffer, sends the data */
28 } 28 }
29   29  
30   30  
31 void USART_Transmit_string( char *data ) 31 void USART_Transmit_string( char *data )
32 { 32 {
33 while ( *data != 0 ) { 33 while ( *data != 0 ) {
34 USART_Transmit(*data); 34 USART_Transmit(*data);
35 data++; 35 data++;
36 } 36 }
37 } 37 }
38   38  
39   39  
40 void USART_Transmit_longnum(signed long data ) { 40 void USART_Transmit_longnum(signed long data ) {
41 unsigned char digits[10],i; 41 unsigned char digits[10],i;
42   42  
43 if (data==0) 43 if (data==0)
44 USART_Transmit('0'); 44 USART_Transmit('0');
45 else { // PROZKOUMAT! 45 else { // PROZKOUMAT!
46   46  
47 if (data<0) { 47 if (data<0) {
48 USART_Transmit('-'); 48 USART_Transmit('-');
49 data*=-1; 49 data*=-1;
50 } 50 }
51   51  
52 for (i=0;i<10;i++) { 52 for (i=0;i<10;i++) {
53 digits[i]=data%10; 53 digits[i]=data%10;
54 data=data/10; 54 data=data/10;
55 } 55 }
56   56  
57 i=9; 57 i=9;
58 while (digits[i]==0) i--; 58 while (digits[i]==0) i--;
59 while (i>0) { 59 while (i>0) {
60 USART_Transmit(digits[i]+48); 60 USART_Transmit(digits[i]+48);
61 i--; 61 i--;
62 } 62 }
63 USART_Transmit(digits[0]+48); 63 USART_Transmit(digits[0]+48);
64   64  
65 } 65 }
66 } 66 }
67   67  
68   68  
69 void USART_Transmit_uint16 (unsigned int data ) { 69 void USART_Transmit_uint16 (unsigned int data ) {
70 unsigned char digits[5],i; 70 unsigned char digits[5],i;
71   71  
72 if (data==0) //podivne, ale nulu to odeslat neumi 72 if (data==0) //podivne, ale nulu to odeslat neumi
73 USART_Transmit('0'); 73 USART_Transmit('0');
74 else { 74 else {
75   75  
76 for (i=0;i<5;i++) { 76 for (i=0;i<5;i++) {
77 digits[i]=data%10; 77 digits[i]=data%10;
78 data=data/10; 78 data=data/10;
79 } 79 }
80   80  
81 i=4; 81 i=4;
82 while (digits[i]==0) i--; 82 while (digits[i]==0) i--;
83 while (i>0) { 83 while (i>0) {
84 USART_Transmit(digits[i]+48); 84 USART_Transmit(digits[i]+48);
85 i--; 85 i--;
86 } 86 }
87 USART_Transmit(digits[0]+48); 87 USART_Transmit(digits[0]+48);
88   88  
89 } 89 }
90 } 90 }
91   91  
92   92  
93 void USART_Transmit_num(unsigned char data ) { 93 void USART_Transmit_num(unsigned char data ) {
94 unsigned char a,b,c; 94 unsigned char a,b,c;
95   95  
96 c=data%10; 96 c=data%10;
97 data=data/10; 97 data=data/10;
98 b=data%10; 98 b=data%10;
99 data=data/10; 99 data=data/10;
100 a=data%10; 100 a=data%10;
101   101  
102 USART_Transmit(a+48); 102 USART_Transmit(a+48);
103 USART_Transmit(b+48); 103 USART_Transmit(b+48);
104 USART_Transmit(c+48); 104 USART_Transmit(c+48);
105 } 105 }
106   106  
107   107  
108 /*void USART_Transmit_float( float data ) { 108 /*void USART_Transmit_float( float data ) {
109 int a,b,c; 109 int a,b,c;
110   110  
111 c=((int)data)%10; 111 c=((int)data)%10;
112 b=((int)(data/10))%10; 112 b=((int)(data/10))%10;
113 a=((int)(data/100))%10; 113 a=((int)(data/100))%10;
114   114  
115 USART_Transmit(a+48); 115 USART_Transmit(a+48);
116 USART_Transmit(b+48); 116 USART_Transmit(b+48);
117 USART_Transmit(c+48); 117 USART_Transmit(c+48);
118 }*/ 118 }*/
119   119  
120   120  
121 void USART_Transmit_byte( char data ) { 121 void USART_Transmit_byte( char data ) {
122 unsigned char i; 122 unsigned char i;
123 i=0b10000000; 123 i=0b10000000;
124 while (i) { 124 while (i) {
125 USART_Transmit( ( (i&data)&&1 ) + 48 ); 125 USART_Transmit( ( (i&data)&&1 ) + 48 );
126 i>>=1; 126 i>>=1;
127 } 127 }
128 } 128 }