dziwny problem mnie spotkał, nie wiem co tu zrobić , niby ustawiłem flagi na przerwania poczatku i końca transmisji, ale jak wyśle z komputera znak, to program wpada w pętle, i ciągle wysyła jedynki. Dlaczego?
Dodano po 1 [minuty]:
prawdopodobnei coś z tymi flagami jest nie tak, ale co?
UCSRB= (1 << RXCIE) | (1<<TXCIE) | (1<< RXEN)|(1<<TXEN) ;
#include <avr/io.h> // dostęp do rejestrów
#include <util/delay.h>
#include <avr\sfr_defs.h>
#include <avr\interrupt.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 16000000 //częstotliwość zegara w Hz
#define UART_BAUD 19200UL //prędkość transmisji
#define UART_CONST (F_CPU/(16ul*UART_BAUD)-1)
void USART_Init ( unsigned int ubrr)
{
UBRRH= (unsigned char)(ubrr>>8);
UBRRL= (unsigned char)(ubrr);
UCSRB= (1 << RXCIE) | (1<<TXCIE) | (1<< RXEN)|(1<<TXEN) ;
UCSRC= (1<<URSEL)|(3<<UCSZ0);
sei();
}
void USART_Transmit ( unsigned char data)
{
while (!(UCSRA&(1<<UDRE)));
UDR = data;
}
int main(void) // program główny
{
USART_Init( UART_CONST);
DDRB=0xFF;
while(1)
{
}
}
SIGNAL(SIG_UART_RECV)
{
PORTB=0x02;
USART_Transmit('1');
}
Dodano po 1 [minuty]:
prawdopodobnei coś z tymi flagami jest nie tak, ale co?
UCSRB= (1 << RXCIE) | (1<<TXCIE) | (1<< RXEN)|(1<<TXEN) ;