Witam,
może mi ktoś powiedzieć co w tym kodzie jest nie tak?
Kod jest prosty-uczę się USART. Pierwszy znak jaki przyjdzie na RS232 wyświetla się na diodach. (Jedynie, że to jest 0B10000000 to jeszcze kolejny). Tylko, że zawsze mi diody gasną(0xFF). Z komputera nadaje za pomocą programu Hercules.(HyperTerminal wiesza mi komputer lub nie działa)
może mi ktoś powiedzieć co w tym kodzie jest nie tak?
Kod jest prosty-uczę się USART. Pierwszy znak jaki przyjdzie na RS232 wyświetla się na diodach. (Jedynie, że to jest 0B10000000 to jeszcze kolejny). Tylko, że zawsze mi diody gasną(0xFF). Z komputera nadaje za pomocą programu Hercules.(HyperTerminal wiesza mi komputer lub nie działa)
#include <avr/io.h> // dostęp do rejestrów
#include <avr/interrupt.h>
#include <avr/delay.h>
#define F_CPU 16000000UL //częstotliwość zegara w Hz
#define UART_BAUD 9600 //prędkość transmisji
#define UART_CONST (F_CPU/(16ul*UART_BAUD)-1)
void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) ); /* Czekaj na pusty bufor transmisji */
UDR = data; /* włóż dane do bufora i wyślij je */
}
unsigned char USART_Receive( void )
{
while ( !(UCSRA & (1<<RXC)) ); /* czekaj na dane do wysłania*/
return UDR; /*odbierz i zwróć odebrane dane z bufora */
}
SIGNAL(SIG_UART_RECV) // podprogram przerwania od USART
{
unsigned char data=UDR;
if (PORTB == 0B10000000) PORTB = data;
}
int main(void)
{
DDRB=0xFF;
PORTB=0B10000000;
UBRRH = (unsigned char)(UART_CONST>>8); /* ustaw prędkość transmisji*/
UBRRL = (unsigned char)UART_CONST;
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //włącz obsługę przerwań USART
//UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); /* 8bitów danych, 2bity stopu */
UCSRC = (1<<URSEL)|(3<<UCSZ0);
sei(); // włącz obsługę przerwań
while(1)
{
}
}