Gast
#1794
Hallo! Nach langem Hin und Her hab ich es endlich geschafft: Ein Assembler Programm das mir eingegebene Zeichen (von PC) zurück schickt und dabei ein Aktivity-LED leuchtet ;)) Umso länger probiere ich aber schon, das ganze in C zu machen, da ich weitere Sachen dann auch in C machen will...beispielsweise wenn ein Zeichen kommt den zuerst in einen Buffer schreiben bis ein "Befehl" fertig ist und dann dementsprechend auf PORTC Pin 5 für eine Sekunde auf Saft schalten. Jedenfalls hab ich im Moment das folgende C Programm: (AT90S2333) #include <io.h> #define CPU_CLOCK 4000000 void init_serial(void); void init_io(void); SIGNAL(SIG_UART_RECV) { outp(inp(UDR), PORTB); //return 0; } int main(void) { init_serial(); init_io(); //sbi(GIMSK, //_sei(); asm volatile("sei"); while(1); return(0); } void init_serial(void) { sbi(UCSRB, RXEN); sbi(UCSRB, RXCIE); outb((CPU_CLOCK/(9600*16L)-1), UBRR); } void init_io(void) { outp(0x80, DDRB); } 1.) Stimmt die Interrupt Handler Routine?? Ist damit alles getan? Wird die Tabelle, die sonst in Assembler mit ".org 0x08" geschrieben werden müsste, automatisch geschrieben?? Der Compiler beklagt sich dass kein return Wert definiert ist, Standard zu "int" und dass dieser keinen Rückgabewert liefert. Was soll ich da machen? (Ich hasse "Warnings"...einfach so? int SIGNAL(SIG_UART_RECV) { // Code return 0; } 2.) Wie man sieht sollte das Programm einfach die LEDs an PORTB blinken lassen wenn was reinkommt...Wäre das so richtig oder muss man ein Delay oder ähnliches einbauen (dass es ja in ASM auch nicht gibt) 3.) Passt es wenn ich zum globalen Aktivieren der Interrupts asm volatile("sei"); nehme? 4.) Muss man nicht extra ein Bit in GIMSK setzen? Findet man nirgens was darüber...wenn ja wie geht das und VOR ALLEM welches Bit ist es (im Datenblatt schon geschaut, es gibt so viele Möglichkeiten) 5.) Ich habe nirgendwo ein funktionierendes C Programm für den UART Empfang über Interrupts für einen AT90S2333 gefunden (der verwendet andere Registernamen, Adressen unsw). Kennt jemand ein einfaches Programm das ca diesen Zweck von oben erfüllt (d.h. zum testen) und das funktioniert? Vielen Dank, Niki