Spurius
13.02.2006, 15:05
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?
#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
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?
#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