Kezdőoldal » Számítástechnika » Programozás » Írtam egy AVR-GCC programot,...

Írtam egy AVR-GCC programot, helyes?

Figyelt kérdés

/*BT tesztprogram: Digitalis Kapcsolo

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>


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

{

DDRC = _BV(PC0); // PC0 kimenet

DDRC = _BV(PC1); // PC1 kimenet

DDRC = _BV(PC2); // PC2 kimenet

DDRC = _BV(PC3); // PC3 kimenet

DDRC = _BV(PC4); // PC4 kimenet

DDRC = _BV(PC5); // PC5 kimenet


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 == 'q') // Ha a fogadott bajt 'q'-vel egyezik meg, BE

{

PORTC |= _BV(PC0); // PC0 lábra +5V

UARTSzovegKuld("Be1"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'w') // Ha a fogadott bajt 'w'-val egyezik meg, KI

{

PORTC &=~_BV(PC0); // PC0 lábra 0V

UARTSzovegKuld("Ki1"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'e') // Ha a fogadott bajt 'e'-vel egyezik meg, BE

{

PORTC |= _BV(PC1); // PC1 lábra +5V

UARTSzovegKuld("Be2"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'r') // Ha a fogadott bajt 'r'-val egyezik meg, KI

{

PORTC &=~_BV(PC1); // PC1 lábra 0V

UARTSzovegKuld("Ki2"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 't') // Ha a fogadott bajt 't'-vel egyezik meg, BE

{

PORTC |= _BV(PC2); // PC2 lábra +5V

UARTSzovegKuld("Be3"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'z') // Ha a fogadott bajt 'z'-vel egyezik meg, KI

{

PORTC &=~_BV(PC2); // PC2 lábra 0V

UARTSzovegKuld("Ki3"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'u') // Ha a fogadott bajt 'u'-sel egyezik meg, BE

{

PORTC |= _BV(PC3); // PC3 lábra +5V

UARTSzovegKuld("Be4"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}


else if(data == 'i') // Ha a fogadott bajt 'i'-vel egyezik meg, KI

{

PORTC &=~_BV(PC3); // PC3 lábra 0V

UARTSzovegKuld("Ki4"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'o') // Ha a fogadott bajt 'o'-val egyezik meg, BE

{

PORTC |= _BV(PC4); // PC4 lábra +5V

UARTSzovegKuld("Be5"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'p') // Ha a fogadott bajt 'p'-vel egyezik meg, KI

{

PORTC &=~_BV(PC4); // PC4 lábra 0V

UARTSzovegKuld("Ki5"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'a') // Ha a fogadott bajt 'a'-val egyezik meg, BE

{

PORTC |= _BV(PC5); // PC5 lábra +5V

UARTSzovegKuld("Be6"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 's') // Ha a fogadott bajt 's'-vel egyezik meg, KI

{

PORTC &=~_BV(PC5); // PC5 lábra 0V

UARTSzovegKuld("Ki6"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'd') // Ha a fogadott bajt 'd'-vel egyezik meg, MIND KI

{

PORTC = 0x00; //mindent kikapcsol

UARTSzovegKuld("Ki7"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}

else if(data == 'f') // Ha a fogadott bajt 'f'-vel egyezik meg, MIND BE

{

PORTC = 0xFF; //mindent bekapcsol

UARTSzovegKuld("Be7"); // Szoveg kiirasa

UARTAdatKuld('n'); // Kovetkezo sor

UARTAdatKuld('r'); // Ugras a sor elejere

}


}


2012. jún. 14. 13:34
 1/1 anonim ***** válasza:

1. Semmi részletet nem tudunk a hardverről.

2. Töltsd le és próbáld ki. Ha nem jó, akkor szedd szét, és modulonként teszteld. Sőt szerintem avr szimulátorok is vannak a neten.

2012. jún. 14. 13:43
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!