Witam.
Program działa jeśli jest kompilowany bez optymalizacji. Skończyły mi się pomysły co może być nie tak.
Program działa jeśli jest kompilowany bez optymalizacji. Skończyły mi się pomysły co może być nie tak.
#define F_CPU 1000000L
#define BAUD 1200
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <avr/iom16.h>
#include <avr/interrupt.h>
#define TXOFF (UCSRB&=!(1<<UDRIE))
#define TXON (UCSRB|=(1<<UDRIE))
volatile char TXBUSY;
volatile char * txwsk;
void USART_Init( unsigned int ubrr){
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
/* Set frame format: 8data, 1stop bit */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
}
SIGNAL(SIG_USART_DATA){
char znak;
znak=*(txwsk++);
if (znak)
UDR=znak;
else{
TXOFF;
TXBUSY = 0;
}
}
SIGNAL (SIG_USART_RECV){
}
char hello[]="Witam\r\n";
int main(void){
USART_Init ( MYUBRR );
sei();
txwsk=hello;
TXBUSY=1;
TXON;
while (TXBUSY);
txwsk=hello;
TXBUSY=1;
TXON;
while (1){
}
}
