Hallo,
ich versuche in folgendem Code eine Delay-funktion zu realisieren.
Leider funktioniert es nicht wirklich, kann vllt. von euch jemand erkennen, warum nicht im Sekundentakt gesendet wird, sondern viel schneller?
GrußCode:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> volatile uint8_t count; void init_usart(void) { UBRRL |= 0b01100111; UCSRB = (1<<TXEN) | (1<<RXEN); UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); } void send_char(unsigned char s) { while (!(UCSRA & (1<<UDRE))); UDR = s; } void send_string(char *s) { while(*s != '\0') { send_char(*s); s++; } } void waitms(uint16_t s) { uint16_t i; uint8_t j; TCCR0 |= (1<<CS01) | (1<<CS00); //Vorteiler 64 TIMSK |= (1<<TOIE0); for(i=0;i<s;i++) { TCNT0 = 6; // Timer auf 6 vorladen, da (16000000/64)^-1 = 0.000004s } // -> 1ms = 0.000004s*250 TIMSK |= (0<<TOIE0); } SIGNAL(SIG_OVERFLOW0) { count++; TCNT0 = 6; } int main(void) { sei(); unsigned int i; char a = "108:158#13#10"; i = 0; init_usart(); do { send_string(a); waitms(1000); } while (i == 0); }
Spurius
Lesezeichen