Приходят не верные данные от терминала, посылка от контроллера идёт нормально. Если не использовать прерывание, а в цикле опрашивать наличие флага принятого байта, то всё работает правильно. Пишу в Atmel Studio 6, виртуализация в proteus. Кварц на 8 МГц. Код программы:
CODE:
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(USART_RXC_vect)
{
char tmp=UDR;
sendpc(tmp);
}
void sendpc(char *text){
for (int i=0;i<strlen(text);i++){
while( ( UCSRA & ( 1 << 5 ) ) == 0 );
UDR=text[i];
}
}
void main(void)
{
//pin config
DDRA=0xC0;
PORTA=0x00;
DDRB=0xFF;
PORTA=0x00;
DDRC=0xFF;
PORTC=0x00;
DDRD=0xFF;
PORTD=0x00;
//USART config 38400 bps 8 data bits, no parity, 1 stop
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;
sei();
sendpc("ready \r\n");
while(1)
{
//TODO:: Please write your application code
}
}
#include <avr/interrupt.h>
ISR(USART_RXC_vect)
{
char tmp=UDR;
sendpc(tmp);
}
void sendpc(char *text){
for (int i=0;i<strlen(text);i++){
while( ( UCSRA & ( 1 << 5 ) ) == 0 );
UDR=text[i];
}
}
void main(void)
{
//pin config
DDRA=0xC0;
PORTA=0x00;
DDRB=0xFF;
PORTA=0x00;
DDRC=0xFF;
PORTC=0x00;
DDRD=0xFF;
PORTD=0x00;
//USART config 38400 bps 8 data bits, no parity, 1 stop
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;
sei();
sendpc("ready \r\n");
while(1)
{
//TODO:: Please write your application code
}
}