Cześć!
Napisałem fragment kodu C wysyłający w kółko "A". Odpalam go w AVR Studio i podglądam wyniki w Terminalu HAPSIM 2.17. Problem polega na tym, że po dwóch wykonaniach pętli głównej program utyka w funkcji wysyłającej dane po USARTcie.
Co jest nie tak?
Napisałem fragment kodu C wysyłający w kółko "A". Odpalam go w AVR Studio i podglądam wyniki w Terminalu HAPSIM 2.17. Problem polega na tym, że po dwóch wykonaniach pętli głównej program utyka w funkcji wysyłającej dane po USARTcie.
Co jest nie tak?
#include <avr/io.h>
#include <avr/iom8.h>
// definicje zmiennych
unsigned char delay = 0;
unsigned char cycle = 0;
unsigned char counter = 0;
// prototypy funkcji
void wait (unsigned char x);
void USART_Init (unsigned int ubrr);
void USART_Transmit(unsigned char data);
// pętla główna programu
int main(void)
{
USART_Init (0x19); // UBRR=25 => 9600 kbps
for (;;)
{
wait (100);
USART_Transmit ('A');
}
return (0);
}
// funkcje
//********************************************************
void wait (unsigned char cycle)
{
for (counter = 0; counter > delay; counter++)
{
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
//********************************************************
void USART_Init(unsigned int ubrr)
{
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); // 8 bits frame, 2 stop bit
}
//********************************************************
void USART_Transmit(unsigned char data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}