Hallo,
habe problem mit meinem Programm:
Das Zeichen "1" wird korrekt übertragen, aber beim betätigen einer
Taste werden nur irgendwelche zufälligen Zeichen übertragen, woran kann
das liegen? Habe auch schon ausprobiert das Zeichen direkt in der ISR zu
senden -> hat noch weniger geklappt, da wurden ganze Strings mit
zufälligen zeichen übertragen :-(
Code:
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/io.h>
#include <avr/sleep.h>
#ifndef F_CPU
#define F_CPU 4000000UL /* Oszillator-Frequenz in Hz */
#endif
volatile uint8_t taste;
/* Funktionsprototypen */
/***********************/
void USART_Init(uint16_t baud);
void USART_Transmit(uint8_t data);
/* Hauptprogramm */
/*****************/
int main(void)
{
DDRD &=~((1<<PD2) | (1<<PD3)); // INT0 und INT1 sind Eingänge
PORTD |= (1<<PD2) | (1<<PD3); // INT0 und INT1 interne Pullup
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Sleepmode: Powerdown
USART_Init(25); // USART mit 9600Baud
USART_Transmit('1');
GIMSK |= (1<<INT1) | (1<<INT0); // INT0 und INT1 aktivieren
MCUCR |= (1<<SE); // Sleep-Enable
MCUCR &=~((1<<ISC11) | (1<<ISC10) | (1<<ISC01) | (1<<ISC00));
//INT1 und INT0 auf Lowlevel
do
{
sei();
sleep_mode();
USART_Transmit(taste);
}while(1);
return(0);
}
/* Funktionen */
/**************/
void USART_Transmit(uint8_t data)
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) );
/* Put data into buffer, sends the data */
UDR = data;
}
void USART_Init(uint16_t baud)
{
/* Set baud rate */
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable transmitter */
UCSRB = 1<<TXEN;
/* Set frame format: 8data, 1stop bit */
UCSRC = (1<<USBS)|(3<<UCSZ0);
}
/* Interrupts */
/**************/
/* Unbelegte Interrupts ignorieren */
EMPTY_INTERRUPT(__vector_default);
INTERRUPT(SIG_INT0)
{
taste = 'x';
}
INTERRUPT(SIG_INT1)
{
taste = 'y';
}
Hat sich erledigt, habe nah "USART_Transmit(taste);" ein delay von 15ms, jetzt funktioniert es!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.