1 | #include <avr/io.h> // Deklarationen
|
2 |
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | #define BAUD 9600 // Symbol fuer Baudrate
|
6 | #define TAKT 3686400 // Symbol fuer Controllertakt
|
7 | #define TEILER (long)TAKT/(16*(long)BAUD) - 1 // Symbol fuer Teiler
|
8 |
|
9 |
|
10 | char abc = '0';
|
11 |
|
12 |
|
13 |
|
14 | void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
|
15 | {
|
16 | /* Wait for completion of previous write */
|
17 | while(EECR & (1<<EEWE));
|
18 | /* Set up address and data registers */
|
19 | EEAR = uiAddress;
|
20 | EEDR = ucData;
|
21 | /* Write logical one to EEMWE */
|
22 | EECR |= (1<<EEMWE);
|
23 | /* Start eeprom write by setting EEWE */
|
24 | EECR |= (1<<EEWE);
|
25 | }
|
26 |
|
27 | unsigned char EEPROM_read(unsigned int uiAddress)
|
28 | {
|
29 | /* Wait for completion of previous write */
|
30 | while(EECR & (1<<EEWE));
|
31 | /* Set up address register */
|
32 | EEAR = uiAddress;
|
33 | /* Start eeprom read by writing EERE */
|
34 | EECR |= (1<<EERE);
|
35 | /* Return data from data register */
|
36 | return EEDR;
|
37 | }
|
38 |
|
39 | void UART_Init(void) // UART initialisieren
|
40 | {
|
41 |
|
42 |
|
43 | UBRRL = TEILER; // Baudrate einstellen
|
44 | UCSRB |= (1<<RXEN); // Empfaenger ein
|
45 | UCSRB |= (1<<TXEN); // Sender ein
|
46 | UCSRB |= (1<<RXCIE); // Empfaengerinterrupt frei
|
47 | }
|
48 |
|
49 |
|
50 | void UART_putch(unsigned char data) // warten und Zeichen nach Sender
|
51 | {
|
52 | //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313
|
53 | while (!(UCSRA&0x20));
|
54 | //sende
|
55 | UDR = data;
|
56 | }
|
57 |
|
58 |
|
59 | void UART_putstr(unsigned char *zeiger) // String bis Endemarke ausgeben
|
60 | {
|
61 | while (*zeiger != 0)
|
62 | {
|
63 | while (!(UCSRA&0x20)); // warte bis Datenregister frei
|
64 | UDR = *zeiger; // Zeichen nach Sendedatenregister
|
65 | zeiger++;
|
66 | }
|
67 | }
|
68 |
|
69 | char gg;
|
70 |
|
71 | SIGNAL(SIG_UART_RECV) // Interrupt-Service fuer Empfaenger
|
72 | {
|
73 | register unsigned char received_ch; // Hilfsregister
|
74 |
|
75 | received_ch = UDR;
|
76 | // uart_putch(received_ch); // Zeichen abholen
|
77 | while (!(UCSRA&0x20)); // warte bis Datenregister frei
|
78 |
|
79 |
|
80 |
|
81 | if(received_ch == 'a')
|
82 | {
|
83 | //abc = 'a';
|
84 | EEPROM_write(1, 'a');
|
85 | }
|
86 | else if(received_ch == 'b')
|
87 | {
|
88 | //abc = 'b';
|
89 | EEPROM_write(1, 'b');
|
90 | }
|
91 | else if(received_ch == 'c')
|
92 | {
|
93 | // abc = 'c';
|
94 | EEPROM_write(1, 'c');
|
95 | }
|
96 |
|
97 | else if(received_ch == 'g')
|
98 | {
|
99 |
|
100 |
|
101 | gg = EEPROM_read(1);
|
102 | UART_putch(gg);
|
103 | UART_putstr("\r\n");
|
104 | }
|
105 |
|
106 | }
|
107 |
|
108 |
|
109 | int main(void) // Hauptfunktion
|
110 | {
|
111 |
|
112 | UART_Init(); // UART initialisieren
|
113 | sei();
|
114 |
|
115 | while(1) // Arbeitsschleife ist leer
|
116 | {
|
117 |
|
118 |
|
119 | } //end while(1)
|
120 |
|
121 | } // Ende main
|