OK. Da kann man schon mal mehr mit anfangen. Bitte beim nächsten mal die
Formatierungstags für C-Code (siehe Hinweis über den Antwortkasten)
nutzen oder noch besser: KOMPLETT als Anhang anhängen.
Hier der Code erstmal lesbarer formatiert:
1 | while (1) // Mainloop
|
2 | {
|
3 | Adresse_OK = Adressabfrage(Adresse);
|
4 | if (Adresse_OK == '1') //wenn Adresse_OK richtig - Temp senden
|
5 | {
|
6 | uart_senden (); //Temp senden
|
7 | }
|
8 | else
|
9 | { //sonst nicht beachten
|
10 | //putChar (0b11110000);
|
11 | }
|
12 | }
|
13 |
|
14 | // ab hier Funktion für kontrolle Adresse
|
15 | #include <avr/io.h>
|
16 |
|
17 | char Adressabfrage (uint8_t Adresse)
|
18 | {
|
19 | char Adresse_OK;
|
20 | uint8_t Adresse_Nr;
|
21 | Adresse_Nr = PINB;
|
22 |
|
23 | if (Adresse_Nr == Adresse) //Achtung Port invertiert PortD vergleich mit Adresse UART
|
24 | {
|
25 | Adresse_OK = '1';
|
26 | }
|
27 | else
|
28 | {
|
29 | Adresse_OK = '0';
|
30 | }
|
31 | // Port D auslesen welche Adresse
|
32 | return (Adresse_OK);
|
33 | }
|
Da Du ihn nicht komplett gepostet hast, ist unklar, ob die Reihenfolge
der Funktionen überhaupt stimmt. Adressabfrage() muss auf jeden Fall vor
der main-Funktion deklariert werden:
1 | #include <avr/io.h>
|
2 |
|
3 | char Adressabfrage (uint8_t Adresse)
|
4 | {
|
5 | char Adresse_OK;
|
6 | uint8_t Adresse_Nr;
|
7 | Adresse_Nr = PINB;
|
8 |
|
9 | if (Adresse_Nr == Adresse) //Achtung Port invertiert PortD vergleich mit Adresse UART
|
10 | {
|
11 | Adresse_OK = '1';
|
12 | }
|
13 | else
|
14 | {
|
15 | Adresse_OK = '0';
|
16 | }
|
17 | // Port D auslesen welche Adresse
|
18 | return (Adresse_OK);
|
19 | }
|
20 |
|
21 | while (1) // Mainloop
|
22 | {
|
23 | Adresse_OK = Adressabfrage(Adresse);
|
24 | if (Adresse_OK == '1') //wenn Adresse_OK richtig - Temp senden
|
25 | {
|
26 | uart_senden (); //Temp senden
|
27 | }
|
28 | else
|
29 | { //sonst nicht beachten
|
30 | //putChar (0b11110000);
|
31 | }
|
32 | }
|
Die ganze Adressabfrage-Funktion ist kann man zusammenfassen als:
1 | char Adressabfrage (uint8_t Adresse)
|
2 | {
|
3 | return (Adresse == PINB);
|
4 | }
|
Wenn die Adresse gleich PINB ist, wird 1 (wahr) zurückgegeben. Wenn
nicht, dann 0 (falsch).
Dann die Hauptschleife:
1 | while (1) // Mainloop
|
2 | {
|
3 | Adresse_OK = Adressabfrage(Adresse);
|
4 | if (Adresse_OK == '1') //wenn Adresse_OK richtig - Temp senden
|
5 | {
|
6 | uart_senden (); //Temp senden
|
7 | }
|
8 | else
|
9 | { //sonst nicht beachten
|
10 | //putChar (0b11110000);
|
11 | }
|
12 | }
|
Du darfst nicht mit '1' vergleichen. '1' ist das ASCII-Zeichen der
Ziffer 1. Genau wie 'A' das ASCII-Zeichen für den Buchstaben A ist. Die
Zahl 1 musst Du ohne ohne Anführungszeichen schreiben:
1 | while (1) // Mainloop
|
2 | {
|
3 | Adresse_OK = Adressabfrage(Adresse);
|
4 | if (Adresse_OK == 1) //wenn Adresse_OK richtig - Temp senden
|
5 | {
|
6 | uart_senden (); //Temp senden
|
7 | }
|
8 | else
|
9 | { //sonst nicht beachten
|
10 | //putChar (0b11110000);
|
11 | }
|
12 | }
|
Das ist aber auch kein guter Stil, weil in C auch alle anderen Werte
(außer 0) "wahr" bedeuten, nicht nur 1. Deshalb besser:
1 | while (1) // Mainloop
|
2 | {
|
3 | Adresse_OK = Adressabfrage(Adresse);
|
4 | if (Adresse_OK != 0) //wenn Adresse_OK richtig - Temp senden
|
5 | {
|
6 | uart_senden (); //Temp senden
|
7 | }
|
8 | else
|
9 | { //sonst nicht beachten
|
10 | //putChar (0b11110000);
|
11 | }
|
12 | }
|
Oder kürzer:
1 | while (1) // Mainloop
|
2 | {
|
3 | Adresse_OK = Adressabfrage(Adresse);
|
4 | if (Adresse_OK) //wenn Adresse_OK richtig - Temp senden
|
5 | {
|
6 | uart_senden (); //Temp senden
|
7 | }
|
8 | else
|
9 | { //sonst nicht beachten
|
10 | //putChar (0b11110000);
|
11 | }
|
12 | }
|
Und da die Funktion Adressabfrage() so trivial kurz ist, kann man das
ganze auch einfach zusammenfassen als:
1 | while (1) // Mainloop
|
2 | {
|
3 | if (Adresse == PINB)
|
4 | {
|
5 | uart_senden (); //Temp senden
|
6 | }
|
7 | }
|