Witam!
Ostatnio próbuje wysłać jakąkolwiek informacje przez RS232 na mikrokontroler Attiny2313 i niestety nie ma żadnych efektów. Generalnie chodzi mi żeby po wciśnięciu liczby jednocyfrowej na klawiaturze została ona pokazana na wyświetlaczu siedmiosegmentowym. Program kompiluje w WinAvr a do wysyłania informacji korzystam z Hyper Terminala. Cały układ z MAX232 działa poprawnie ponieważ został sprawdzony, także wyświetlacz został uprzednio przetestowany innym programem. Poniżej zamieszczam kod źródłowy w którym zapewne znajduje się błąd, którego nie udało mi sie ustalić, tak więc proszę o przeanalizowanie i ewentualne zastrzeżenia co do jego poprawności:
Ostatnio próbuje wysłać jakąkolwiek informacje przez RS232 na mikrokontroler Attiny2313 i niestety nie ma żadnych efektów. Generalnie chodzi mi żeby po wciśnięciu liczby jednocyfrowej na klawiaturze została ona pokazana na wyświetlaczu siedmiosegmentowym. Program kompiluje w WinAvr a do wysyłania informacji korzystam z Hyper Terminala. Cały układ z MAX232 działa poprawnie ponieważ został sprawdzony, także wyświetlacz został uprzednio przetestowany innym programem. Poniżej zamieszczam kod źródłowy w którym zapewne znajduje się błąd, którego nie udało mi sie ustalić, tak więc proszę o przeanalizowanie i ewentualne zastrzeżenia co do jego poprawności:
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1000000 // zegar
#define BAUD 9600 // szybkosc transmisji
#define MYUBRR F_CPU/(16*BAUD) - 1 // ustawienie zegara dla przesylu asynchronicznego normalnego
void USART_init(unsigned int ubrr, unsigned char mode) // inicjalizacja USART; mode = 0 odbieranie
{
// ustawienie preskalera
UBRRH = (ubrr>>8);
UBRRL = ubrr;
// wlaczenie odbierania lub nadawania
if (mode)
{
UCSRB = (1<<TXEN);
}
else
UCSRB = (1<<RXEN);
// format ramki: 8data, 2stop
UCSRC = (1<<USBS) | (1<<UCSZ0) | (1<<UCSZ1);
}
unsigned char USART_receive(void) // funkcja odbierajaca dane
{
// oczekiwanie na zakonczenie odbierania
while(!(UCSRA & (1<<RXC)));
// zwrocenie otrzymanej wartosci
return UDR;
}
int main(void)
{
unsigned char dana;
DDRB = 0xFF; // port B wyjscie; wyswietlacz siedmiosegmentowy
PORTB = 0xFF;
USART_init(MYUBRR, 0);
while(1)
{
dana = USART_receive();
switch(dana)
{
case 0x30 : PORTB = 0xC0;
break;
case 0x31 : PORTB = 0xF9;
break;
case 0x32 : PORTB = 0xA4;
break;
case 0x33 : PORTB = 0xB0;
break;
case 0x34 : PORTB = 0x99;
break;
case 0x35 : PORTB = 0x92;
break;
case 0x36 : PORTB = 0x82;
break;
case 0x37 : PORTB = 0xF8;
break;
case 0x38 : PORTB = 0x80;
break;
case 0x39 : PORTB = 0x90;
break;
};
}
}
