Hallo,
so ich habe meinen code verändert. Da ich nicht weiß inwieweit der Interrupt in die Funktion eingreifen kann, setze ich einen Flag a, der dann in der Funktion messen überprüft wird. Hier mein vollständiger code:
Code:
#include<stdlib.h>
#include<avr/io.h>
#define F_CPU 8000000
#include<util/delay.h>
#include"lcd.h"
volatile char a;
unsigned int messen (void) {
unsigned int messwert;
TCNT1 = 0xBB80; /* Vorladen auf 48000 */
PORTC |= (1<<PC5); /* Senden */
TCCR1B = 0x2; /* timer starten und Vorteiler auf 8 setzen */
_wait_us(25);
PORTC &= ~(1<<PC5); /* Sender ausschalten*/
while (1) {
if(PINC & (1<<PINC4)) { /* Wenn Signal zurückkommt... */
TCCR1B = 0x0; /* Timer stoppen */
messwert = TCNT1 - 48000; /* Vorladewert wieder abziehen */
messwert *= 0.0172; /* In Sekunden umrechnen */
return messwert;
}
if (a=1) { /* Abbruch bei timer Überlauf */
return 0;
}
}
}
int main (void) {
TIMSK|=(1<<TOIE1);
TIMER1_OVF_vect{ a=1;}
DDRC |= (1<<PC5);
DDRD= 0xff;
lcd_init(LCD_DISP_ON); /* lcd initialisieren */
lcd_clrscr(); /* Display löschen und cursor auf 1,1 setzen */
lcd_puts("distance: ");
while(1) {
lcd_gotoxy(11,1);
lcd_puts("messen();");
lcd_gotoxy(15,1);
lcd_puts("cm");
for(unsigned char i=0;i<256;i++) { /*warte*/
_wait_ms(1);
}
}
}
Beim compilieren kommten folgende Fehlermeldungen
../Ultraschall.c: In function 'messen':
../Ultraschall.c:14: warning: implicit declaration of function '_wait_us'
../Ultraschall.c:23: warning: suggest parentheses around assignment used as truth value
../Ultraschall.c: In function 'main':
../Ultraschall.c:31: error: '__vector_8' undeclared (first use in this function)
../Ultraschall.c:31: error: (Each undeclared identifier is reported only once
../Ultraschall.c:31: error: for each function it appears in.)
../Ultraschall.c:31: error: expected ';' before '{' token
../Ultraschall.c:46: warning: comparison is always true due to limited range of data type
../Ultraschall.c:47: warning: implicit declaration of function '_wait_ms'
Wie kann ich die Fehler beheben. Kann mir jemand Tipps geben?
mfg
Lesezeichen