Jestem początkujący w programowaniu mikrokontrolerów i mam problem z obsługą przerwań w Atmega8. Mam taki oto, bardzo prosty program znaleziony w sieci:
Program według mnie powinien wypisywać co 2 sekundy kolejną literkę i odpisywać znak, który odbierze na wejściu.
Problem w tym, że nie odpisuje, lecz się resetuje- wnioskuję to po tym, że zaczyna od początku wysyłać alfabet. Wydaje mi się że chodzi o to że wywołuję przerwanie, ale go nie obsługuję- podobny efekt miałem przy wywołaniu przerwania na pinie INT0.
Czy ktoś mógłby mi coś doradzić? Przeszukałem już pół internetu i każdy program realizujący odpisywanie na znak pojawiający się na wejściu wygląda niemal identycznie, ale u mnie nie działa.
Pozdrawiam
Poprawiłem tytuł:
https://www.elektroda.pl/rtvforum/topic1015361.html
Proszę umieszczać listingi programów w znacznikach "Code".
[c_p]
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#define F_CPU 1843200
#define USART_BAUDRATE 19200
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
int main (void)
{
UCSRB |= (1 << RXEN) | (1 << TXEN); // Turn on the transmission and reception circuitry
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
sei(); // Enable the Global Interrupt Enable flag so that interrupts can be processed
unsigned char i;
while (1) {
for (i='a';i<'z'+1;i++)
{
while ( !( UCSRA & (1<<UDRE)) );
/* Put data into buffer, sends the data */
UDR = i;
_delay_ms(2000);
}
}
}
ISR(USART_RXC_vect)
{
char ReceivedByte;
ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"
UDR = ReceivedByte; // Echo back the received byte back to the computer
}Program według mnie powinien wypisywać co 2 sekundy kolejną literkę i odpisywać znak, który odbierze na wejściu.
Problem w tym, że nie odpisuje, lecz się resetuje- wnioskuję to po tym, że zaczyna od początku wysyłać alfabet. Wydaje mi się że chodzi o to że wywołuję przerwanie, ale go nie obsługuję- podobny efekt miałem przy wywołaniu przerwania na pinie INT0.
Czy ktoś mógłby mi coś doradzić? Przeszukałem już pół internetu i każdy program realizujący odpisywanie na znak pojawiający się na wejściu wygląda niemal identycznie, ale u mnie nie działa.
Pozdrawiam
Poprawiłem tytuł:
https://www.elektroda.pl/rtvforum/topic1015361.html
Proszę umieszczać listingi programów w znacznikach "Code".
[c_p]
