/*BT tesztprogram: Robot Taviranyito
Hardver: ATmega8 @ 7.372800MHz
PC Szoftver: Hyper terminal @ 9600 baud, Nincs Paritas Bit, 1 Stop Bit, Flow Control = NONE
*/
#define F_CPU 7372800UL // rendszer orajel: 7.3728 MHz
#define USART_BAUDRATE 9600 // soros kommunikacio sebessege: 9600 bps
#define UBRR_ERTEK ((F_CPU / (USART_BAUDRATE * 16UL)) - 1) // UBRR
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <util/delay.h>
#include <util/motor.h>
void KonfigUART() // UART beallitasa
{
// 9600 bps soros kommunikacio sebesseg beallitasa
UBRRL = UBRR_ERTEK; // UBRR_ERTEK also 8 bitjenek betoltese az UBRRL regiszterbe
UBRRH = (UBRR_ERTEK>>8); // UBRR_ERTEK felso 8 bitjenek betoltese az UBRRH regiszterbe
// Aszinkron mod, 8 Adat Bit, Nincs Paritas Bit, 1 Stop Bit
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
//Ado es Vevo aramkorok bekapcsolasa + az RX interrupt engedelyezese
UCSRB |= (1 << RXEN) | (1 << RXCIE) | (1 << TXEN); //
}
char UARTAdatFogad() // Ez a fuggveny a beerkezo adatokat kiolvassa az UDR regiszter bejovo pufferebol
{
while(!(UCSRA & (1<<RXC))) // Varakozas amig nincs uj bejovo adat
{
// Varakozas
}
//Most mar van beerkezett adat, amit kiolvasunk a pufferbol
return UDR;
}
void UARTAdatKuld(char data) // Ez a fuggveny a kuldendo adatot beirja az UDR regiszter kimeno pufferjebe
{
while(!(UCSRA & (1<<UDRE))) // Varakozas amig az Ado kesz nem lesz az adatkuldesre
{
// Varakozas
}
// Az Ado mar kesz az adatkuldesre, a kuldendo adatot a kimeno pufferjebe irjuk
UDR=data;
}
void UARTSzovegKuld( char *p)
{
while(*p)
{
UARTAdatKuld( *p++);
}
}
int main(void) // Foprogram
{
KonfigUART(); // UART Konfiguralasa
sei(); // Altalanos megszakitasok engedelyezese
while(1)
{
// Ures ciklus (mindent az ISR-en belul kezelunk)
}
return 0;
}
ISR(USART_RXC_vect) // RX interrupt, ezek az utasitasok futak le ha bejovo adat erkezik
{
char data;
data = UARTAdatFogad(); // A berekezo bajt fogadasa
if(data == 'e') // Ha a fogadott bajt 'e'-vel egyezik meg, ELORE
{
elore(100);
UARTSzovegKuld("Elore"); // Szoveg kiirasa
UARTAdatKuld('n'); // Kovetkezo sor
UARTAdatKuld('r'); // Ugras a sor elejere
}
else if(data == 'h') // Ha a fogadott bajt 'h'-val egyezik meg, HATRA
{
hatra(100);
UARTSzovegKuld("Hatra"); // Szoveg kiirasa
UARTAdatKuld('n'); // Kovetkezo sor
UARTAdatKuld('r'); // Ugras a sor elejere
}
else if(data == 'j') // Ha a fogadott bajt 'j'-vel egyezik meg, FORDUL JOBBRA
{
fordul_jobb(50);
UARTSzovegKuld("Fordulas Jobbra"); // Szoveg kiirasa
UARTAdatKuld('n'); // Kovetkezo sor
UARTAdatKuld('r'); // Ugras a sor elejere
}
else if(data == 'b') // Ha a fogadott bajt 'b'-vel egyezik meg, FORDUL BALRA
{
fordul_bal(50);
UARTSzovegKuld("Fordulas Balra"); // Szoveg kiirasa
UARTAdatKuld('n'); // Kovetkezo sor
UARTAdatKuld('r'); // Ugras a sor elejere
}
else if(data == 's') // Ha a fogadott bajt 's'-sel egyezik meg, STOP
{
motor_stop(mind);
UARTSzovegKuld("STOP"); // Szoveg kiirasa
UARTAdatKuld('n'); // Kovetkezo sor
UARTAdatKuld('r'); // Ugras a sor elejere
}
}