Hallo Leute, ich hätte da mal ne Frage an euch und zwar sollten wir ein paar Funktionen(die vorgegeben waren) in Eclipse schreiben und dann die einzelnen Schritte kommentieren und auf die einzelnen Begriffe eingehen (was es macht wofür es gut geht). Ich hab das so gut wie möglich versucht,fände es toll wenn ihr mir die inzelnen Schritte nochmal erklären könntet. Danke im Vorraus. CODE: #include <avr/io.h> #include <util/delay.h> void initPort_AinBout(); void putByteLED_B(unsigned char); unsigned char waitforKey_A(); unsigned char getKeyNum(unsigned char); void putPattern(unsigned char[], int, double); void initPort_AInBOut() { DDRA=0x00; // PortA wird als Eingang festgelegt DDRB=0xFF; // PortB wird als Ausgang festgelegt PORTA=0xFF; // Pull-Up Widerstände von PortA aktivieren PORTB=0xFF; // LEDs ausschalten } void putByteLED_B(unsigned char byte) { PORTB=~byte; // Bytefolge invertiert auf PORTB ausgeben (Nur die 0-Werte leuchten) } unsigned char waitforKey_A() { unsigned char input=0; //while(PINA==0xFF) // Endlosschleife solange keine Taste gedrückt wird //{ //} input=~PINA; // Gedrückte Taste(n) invertiert einlesen //while(PINA!=0xFF) // Endlossschleife solange eine Taste gedrückt wird //{ //} //_delay_ms(200); // Verzögerung von 200ms um Tastenprellen zu vermeiden return input; } unsigned char getKeyNum(unsigned char sw) { switch(sw) { case 0x01:sw=0;break; //1 LED case 0x02:sw=1;break; //2 LED case 0x04:sw=2;break; //3 LED case 0x08:sw=3;break; //4 LED case 0x10:sw=4;break; //5 LED case 0x20:sw=5;break; //6 LED case 0x40:sw=6;break; //7 LED case 0x80:sw=7;break; //8 LED default:sw=255;break; //0 LED } return sw; } void putPattern(unsigned char pattern[], int length, double delay) { int i=0; for (i=0; i<length; i++) { putByteLED_B(pattern[i]); // i-te Bytefolge ausgeben _delay_ms(delay); // Verzögerung um 'delay' ms, damit Wechsel sichtbar } PORTB=0xff; // Alle LEDs an PORTB wieder ausschalten } int main(void) { unsigned char byte=170, key_A=0, keyNum=0; initPort_AInBOut(); putByteLED_B(byte); _delay_ms(500); key_A=waitforKey_A(); //PORTB=key_A; keyNum=getKeyNum(~key_A); //PORTB=keyNum; //Aufgabe 2 unsigned char pattern[8]={255,0,255,0,255,0,255,0}; int length=8; double delay=500; putPattern(pattern,length,delay); while(1) //Endlosschleife { } }
Was genau sind die Eigenshaften vom DDR Register und was genau macht das InitPort?
Ich hab ehrlich gesagt keine Lust dir das zu erklären (und damit fremde Hausaufgaben zu machen). Ich zeig dir aber wo du das nachlesen kannst. Ich nehme mal an es geht um Atmel 8-Bit AVR. Die Originalquellen sind: -die Dokumentation zur avr-libc: http://www.nongnu.org/avr-libc/user-manual/index.html -das Datenblatt zum Controller: das gibts immer beim Hersteller: http://www.atmel.com wenn du den Typ noch nich weißt nimm einfach al das datenblatt des mega 48/88/168: http://www.atmel.com/dyn/resources/prod_documents/2545S.pdf Wenn dir Deutsch mehr liegt gibt es im Internet noch gefühlte tausend Tutorials zum Thema, einfach mal googeln. Hier auf der Seite gibts auch zwei gute Tutorials von denen man eines mal durchgelesen haben sollte: Für Assembler: http://www.mikrocontroller.net/articles/AVR-Tutorial Für C (einfache Grundkenntnisse in C werden vorausgesetzt): http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Wenn es noch Fragen jenseits vom Tutorial gibt bin ich auch bereit sie zu beantworten.
Hallo Danke erstmal für die schnelle Antwort,ich werd mir das mal durchlesen. Aber kannst du mir vll die 3 Fragen kurz beantworten? Was genau sind die Eigenshaften vom DDR Register und was genau macht das InitPort und der PINA Register? Danke im Vorraus.
Zu deiner Frage passt besonders dieser Abschnitt im AVR-GCC Tutorial: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.