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?
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);  
}
Gruß
Spurius