Попытался прикрутить на робота и выпал в осадок.
На крутил много кода, не работает. Вычленил суть. Не работает.
CODE:
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char smb = 0;
ISR( USART_RXC_vect )
{
smb = UDR ;
while(!(UCSRA & (1<<UDRE)));
UDR = smb;
}
int main(void) {
UBRRH = 0;
UBRRL = ( F_CPU/( 16UL*9600 ) ) - 1;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
sei();
// define pd4 as output
// DDRD |= (1 << LED);
while (1) {
_delay_ms(10);
}
return 0;
}
Работает на Mega8 на железке и в Протеусе.
Но не работает на Мега32(который у меня на борту у робота). Контроллер вешается (не мигает диагностический диод ). Протеус говорит про ошибку доступа к памяти.
Компилятор winavr (avg-gcc)
-mmcu= mega8 (mega32) задаю корректно. Код 3 строки а понять не могу. кажется что то с прерываниями не то.