Gast
#1229432
hallo,
ich hab nen problem beim umstigt vom atmega8 auf atmega168. brauche den
aufgrund des größeren speichers.
problem taucht nur auf wenn ein interrupt kommt. kommt der interrupt
stürt der atmega168 ab.
im programm habe ich die register vom atmega8 auf atmega 168 geändert.
programm mit den atmega168 registern:
void sende(char buffer[]) // sende - Funktion zum
Übermitteln einer Zeichenfolge
{
for ( i=0; buffer[i]!=0; i++ ) // For-Schleife: Abbruch
wenn Zeichenfolge
{ // zu Ende ist, sonst "i"
inkrementieren
while (bit_is_clear(UCSR0A,5)) // Solange Zeichen noch
nicht vollständig...
{
; // ...übermittelt wurde,
tue nichts! (warte)
}
UDR0 = buffer[i]; // Danach: Sende aktuelles
("i"-tes) Zeichen
}
}
SIGNAL(SIG_UART_RECV)
{
zeichen = UDR0;
}
int main (void)
{
UBRR0L = 11; // 9600Baud siehe
Baudratentabelle
UCSR0B = 0b10011000; // Empfänger, Sender ein UCR =
UCSRB
// Interrupts aktivieren
prusart = 0;
lcd_init(LCD_DISP_ON);
while(1)
{
;
}
}
programm mit den atmega8 registern:
void sende(char buffer[]) // sende - Funktion zum
Übermitteln einer Zeichenfolge
{
for ( i=0; buffer[i]!=0; i++ ) // For-Schleife: Abbruch
wenn Zeichenfolge
{ // zu Ende ist, sonst "i"
inkrementieren
while (bit_is_clear(UCSRA,5)) // Solange Zeichen noch
nicht vollständig...
{
; // ...übermittelt wurde,
tue nichts! (warte)
}
UDR = buffer[i]; // Danach: Sende aktuelles
("i"-tes) Zeichen
}
}
SIGNAL(SIG_UART_RECV)
{
zeichen = UDR;
}
int main (void)
{
UBRRL = 11; // 9600Baud siehe
Baudratentabelle
UCSRB = 0b10011000; // Empfänger, Sender ein UCR =
UCSRB
// Interrupts aktivieren
lcd_init(LCD_DISP_ON);
while(1)
{
;
}
}
das ist jetz natürlich nur nen programmausschnitt.
bin langsam echt amverzweifeln!
danke schon mal!
mfg