Hi,
würde vermuten, dass entweder
- das while(1); wegoptimiert wird und er nach dem return 0; wieder an den anfang springt
oder:
- ein ungewollter interrupt ausgelöst wird, nicht behandelt wird und für einen pseudo-reset sorgt.
gruß, CowZ
habe folgendes programm geschrieben zur ausgabe einzelner zeichen per
USART!
das problem liegt nun darin, dass die zeichen nicht nur einmal
ausgegeben werden, sondern diese werden immer wiederholt! ????
das ganze sieht dann so "123ABC123ABC123ABC...." keine Ahnung weshalb die zeichen immer wiederholt werden, sollten ja nur einmal eigentlich ausgegeben werden, oder???? vielen dank für eure antworten! habe ATmega128!
#include <avr/io.h>
#define FOSC 14745600 // Clock Speed
#define BAUD 2400
#define MYUBRR FOSC/16/BAUD-1
void USART_Init(unsigned int ubrr);
void USART_Transmit(unsigned char data);
unsigned char USART_Receive(void);
int main(void){
USART_Init(MYUBRR);
USART_Transmit('1');
USART_Transmit('2');
USART_Transmit('3');
USART_Transmit('A');
USART_Transmit('B');
USART_Transmit('C');
while(1);
return 0;
}
void USART_Init( unsigned int ubrr )
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>;
UBRR0L = (unsigned char)ubrr;
/* Enable transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 1stop bit */
UCSR0C = (3<<UCSZ0);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
}
unsigned char USART_Receive(void)
{
/* Wait for data to be received */
while ( !( UCSR0A & (1<<RXC0)) );
/* Put data into buffer, sends the data */
return UDR0;
}
Hi,
würde vermuten, dass entweder
- das while(1); wegoptimiert wird und er nach dem return 0; wieder an den anfang springt
oder:
- ein ungewollter interrupt ausgelöst wird, nicht behandelt wird und für einen pseudo-reset sorgt.
gruß, CowZ
Hallo,
while (1); wird vermutlich vom Compiler wegoptimiert und das gesammte Programm startet nach return0; neu. Versuch es mal mit:
Code:while(1){ asm volatile ("nop"); }
Gruß
Jens
Vielleicht kommt ein Reset durch den Watchdogtimer?
ich habe den watchodog nicht eingeschaltet! oder kann sich der wenn ich den nicht ausdrücklich ausschalte selber einschalten? ich glaube der schaltet sich nur nach einem unvorhergesehen reset automatisch ein! aber warum sollte es in meinem programm ein rest geben?
Guck doch einfach auf mikrocontroller.net im gleichen Thread...
Gruß, CowZ
PS: Ich mag diese "ich poste in allen Foren das gleiche"-Taktik nicht.
Lesezeichen