Irgendwie will das nicht funktionieren.
Das mit extern habe ich mir zunächst durchgelesen und dann angewendet.
Es heisst ja, dass dem Kompiler klar gemacht wird, dass diese Variable
schon irgendwo definiert ist.
habe jetzt in uart.h
1 | extern unsigned char usart_data;
|
2 | extern unsigned char new_usart_data;
|
in der ISR vom uart (in uart.c) beschreibe ich usart_data mit den
reinkommenden Daten und setze new_usart_data=1.
1 | void usart_transmit_char(unsigned char data){
|
2 | /* Wait for empty transmit buffer */
|
3 | while ( !( UCSR0A & (1<<UDRE0)) );
|
4 | /* Put data into buffer, sends the data */
|
5 | UDR0 = data;
|
6 | }
|
7 |
|
8 | ISR(USART_RX_vect){
|
9 | usart_data = UDR0;
|
10 | new_usart_data = 1;
|
11 | }
|
der Hauptdatei habe ich über der main-function
1 | unsigned char usart_data = 0;
|
2 | unsigned char new_usart_data = 0;
|
und in der hauptschleife frage ich new_usart_data ab. Wenn diese gleich
1 ist, soll mir die uart-funktion die Variable usart_data doppelt so
groß wieder raus geben.
1 | while (1){
|
2 | if(new_usart_data == 1){
|
3 | usart_transmit_char(usart_data*2);
|
4 | new_usart_data = 0;
|
5 |
|
6 | }
|
7 |
|
8 | }
|
doch es kommt nichts heraus, als ob es die variable in der main-function
nicht geändert wurde und somit nicht in die Bedingung gegangen worden
ist.
Vor der hauptschleife sende ich einmal usart_transmit_char(0x22);
heraus. Diese kommen auch an, daher weiss ich, dass die uart-Funktion an
sich funktioniert.