-
Was man machen kann,
die Hardwarefunktionen laufen zum Teil autonom.
Du kannst z.B. ein Zeichen in die UART schreiben und
Dein Programm dann weiter laufen lassen, bis das nächste Zeichen raus muss.
Wenn Du den Print befehl für ne Zeichenkette verwendest beibt dein Prozi
bis zur Abarbeitung sonst an der Stelle stehen.
Schlussendlich kan der Prozi aber immer nur eine Sache auf Einmal ausführen, das gilt aber auch für die momentanen PCs genauso.
-
Genau....
Es ist echt sinnvoll, die Hardware-Zusatzfunktionen der µC zu nutzen.
Diese laufen dann wirklich parallel und eigenständig.
Wobei man beim UART auch meist mit dieser Funktio arbeitet:
Code:
void UART_transmit(uint8_t c){
while(!(UCSRA & (1<<UDRE)));
UDR = c;
}
Beim while wartet er ja auch bis er gesendet hat.....
Oder auch beim SPI:
Code:
uint8_t SPI_transmit( uint8_t data ){
SPDR = data;
while( !( SPSR & (1<<SPIF) ) );
return SPDR;
}
-
Wobeis aber auch so schöne Interrupts gibt,
bei der UART z.B. der TXC, warum die verkommen lassen?
-
OK, das stimmt... aber das macht das Ganze schon ziemlich happig zum Proggen... wenn man mit Protokollen arbeitet....
-
weil man nicht immer Interrupts brauchen kann ;) manchmal sind diese eher Störend .. gibt viele Anwendungen und grad wenn ne DualUart hast ... ist das ganze bisschen Gehässig ;).. da lieber ne while .. (kommt auf die Übertragugnsrate und dichte an) darfst halt immer nur 1 Byte senden dann schaun ob bei der andern uart was is und blah ..
Verabschiedet euch von Multitasking genauso wie von Echtzeit .. aber gerade dein Problem mit den LEDs ist kein problem .. izaseba hat es dir schön erklärt :)
-
merker sind interrupts oder wie kann ich dass verstehen!?
MFG
Michael
-
nö...
du setzt zB ein bit auf 1. Und der Timer setzt es nach einer bestimmten Zeit auf 0.
Und wo anders überwächste du das Bit und lasst die LED leuchten solange das Bit 1 ist.
Merker ist einfach eine Variable...
-
versteh dich nicht ganz !! ^^
MFG
Michael
-
Kein Problem...
Also, sagen wir "merker" sei eine Globale Variable.
Diese Timerfunktion wird Pro Sekunde einmal ausgeführt:
void TIMER( void ){
if( merker ){ merker = 0; }else{ merker = 1; }
}
Bedeutet, dass die Varible "merker" im sekundentakt 0...1....0...1 annimmt.
Dann kann man irgendwo anders im hautpprogramm sagen:
if(merker){ PORTA = 0xFF; }else{ PORTA = 0x00; }
Folglich Blinken die LEDs an PortA im Sekundentakt
-
kannst du es mir in assembler aufschreiben diesen code den du in C geschrieben hast?
Bitte
Danke
MFg
Michael Mitteregger