-
-
Hi Kanal28,
die Bücher sehen echt vielversprechend, ich werd mir sie mal näher anschauen.
Aber was ich noch sagen wollte: Klar verwende ich in meinen eigenen Programmen die Funktion wie Init() oder MotorDir(FWD,FWD) usw..,
aber ich möchte auch wissen, was hinter diesen Funktionen steckt um dann mal eigene zu schreiben.
Aber ich kann mir halt im moment noch so wenig unter so großen Quelltexten wie z.B der unter vorstellen
#include <inttypes.h> // Allgemeine Bibliotheken
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
uint8_t taster(void) { // Tasterabfrage durch kurzes Umschalten auf Eingang
uint8_t status, ret_val;
status=PORTD&0x68; // Alten Status merken
DDRD=DDRD&0x97; // Bits auf Eingang schalten
PORTD=PORTD|0x68;
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
ret_val=PIND&0x68; // Bits einlesen
PORTD=(PORTD&0x97)|status; // Alten Status wieder herstellen
DDRD=DDRD|0x68; // Bits wieder auf Ausgang schalten
return ret_val;
}
void warte(uint16_t t) { // Funktion "Warteschleife"
uint16_t i, j;
for (i=0;i<t;i++) { // Verschachtelte Schleife mit Befehl NOP="Tue nichts", damit
for (j=1;j<200;j++) { // die Schleife nicht wegoptimiert wird.
asm volatile ("nop");
}
if (taster()!=0x6
// Abbruch bei gedrücktem Taster
break;
}
}
int main (void) {
uint8_t tasterwert;
DDRB=0xFF; // Port B auf Ausgang
PORTB=0xFF; // Alle Ausgänge auf 1
DDRD=0xFF; // Port D auf Ausgang
PORTD=0xFF; // Alle Ausgänge auf 1
for (;
{ // Endlosschleife
PORTB=~PORTB; // Alle Ausgänge invertieren
PORTD=~PORTD;
warte(4000); // Warten
tasterwert=taster();
if (tasterwert!=0x6
{
PORTB=0xFF;
PORTD=0xFF;
}
while (tasterwert!=0x6
{
if (bit_is_clear(tasterwert,6)) // Taster 1 abfragen (gedrueckt = Bit geht auf 0)
cbi(PORTB,7); // Zugehörige LED an
else
sbi(PORTB,7); // Zugehörige LED aus
if (bit_is_clear(tasterwert,3)) // Taster 2 abfragen (gedrueckt = Bit geht auf 0)
cbi(PORTB,0); // Zugehörige LED an
else
sbi(PORTB,0); // Zugehörige LED aus
if (bit_is_clear(tasterwert,5)) // Taster 3 abfragen (gedrueckt = Bit geht auf 0)
cbi(PORTB,1); // Zugehörige LED an
else
sbi(PORTB,1);
tasterwert=taster();
if (tasterwert==0x6
{
PORTB=0xFF;
PORTD=0xFF;
}
}
}
}
Gruss Tobi
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen