#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 11059200UL
#include <util/delay.h>
#define UART_BAUD 19200
#define UART_SPD (F_CPU/(16ul*UART_BAUD))-1
#define clr(PORT, BIT) (_SFR_BYTE(PORT) &= ~_BV(BIT))
#define set(PORT, BIT) (_SFR_BYTE(PORT) |= _BV(BIT))
#define toggle(PORT, BIT) (_SFR_BYTE(PORT) ^= _BV(BIT))
#define IO_DDR DDRC
#define IO_PORT PORTC
#define IO_PIN PINC
#define LED1 0
#define LED2 1
#define BUZ 7
volatile char BUF_RX[5];
volatile char UDR_KO=1;
char UA_PREV=0; //poprzednio odebrany znak
char UA_WSK=0; //wskaznik wysokosci bufora
int main()
{
[inContentAd]
IO_PORT=255;
IO_DDR= 255; //1<<LED1|1<<LED2|1<<BUZ;
_delay_ms (50);
//=======================================================
UBRRL=UART_SPD; //wpisanie predkosci uarta
UCSRB= 1<<RXCIE|1<<RXEN|1<<TXEN; // przerwania tylko od RX, odb i nad. wlaczone
sei();
UDR=UART_SPD;
while(1)
{
if (UDR_KO==48) toggle(IO_PORT, BUZ), UDR_KO=0;
// toggle(IO_PORT, LED2);
_delay_ms (50);
}
return 0;
}
SIGNAL (USART_RXC_vect)
{
UDR_KO=UDR;
//UDR=UDR_KO;
if (UDR_KO==48 && UA_PREV==49) UA_WSK=0,UA_PREV=UDR_KO,toggle(IO_PORT, LED1), return ;
BUF_RX[UA_WSK]=UDR_KO;
UA_PREV=UDR_KO;
UA_WSK++;
if (UA_WSK==6) UA_WSK=5;
}
SIGNAL (USART_TXC_vect)
{
}
Build started 30.3.2011 at 20:07:17
avr-gcc -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT UART.o -MF dep/UART.o.d -c ../UART.c
../UART.c: In function '__vector_13':
../UART.c:59: error: expected expression before 'return'
../UART.c:61: warning: array subscript has type 'char'
make: *** [UART.o] Error 1
Build failed with 1 errors and 1 warnings...
Programik ma za zadanie wykryć nadejscie 0 i 1, spowoduje to wyzerowanie wskaznika dla buforu dla zapisu odebranych znaków i wyjście z procedury przerwania. Każdy następny odebrany znak ma być wpisany do bufora, który ograniczony jest do 5 znaków.
Nie mogę zrozumiec błędów, oraz nie jestem pewniem czy sposób z returnem faktycznie spowoduje wyjscie z przerwania (błąd=brak kompilacji=brak symulacji)
Kod: C / C++