Hallo, Wie kann man den Eingang für ein Unterprogramm von Interrupt mit C schreiben? vielen Dank! Hua
Je nach dem wodurch der Interrupt ausgelöst wurde, für ADC z.B.: ISR(ADC_vect){} nachzulesen in der AVR-libc Modules.
Vielen Dank! Jetzt benutze ich Atmega8. Die Interrupt Vector No. ist 3, Programm Addresse ist 0x002. Wie kann ich meine Interrupt_Programm mit diese Interrupt Vector Verbindung machen?
Entschuldigung ich bin eine Anfangin. Welche Headdatei soll ich include? vielen vielen Dank!
ISR(INT1_vect) { USART_TransmitString(" externe Interrupt happend ", 27); return; } int main(void) { USART_Init(9600); SREG = 0x80; MCUCR = (1<<ISC11) | (1<<ISC10); GICR = (1<<INT1); for(;;); } Bei mir funktioniert noch nicht. Wenn ein Interrupt happend, kann ich keine Ergebnisse bekommen. Welche Fehler habe ich gemacht? Vielen Dank!
In der ISR ein Port mit einer LED dran setzen dann sieht man ob der Interrupt oder der USART nicht funktioniert. Der PIN PB3 ist der Eingang: The rising edge of INT1 generates an interrupt request.
Ich habe ein anderes Programm für diesen Interrupt, es benutzt nicht ISR, sonder lese direkt die Interrupt Falg Bit. int main(void) { USART_Init(9600); MCUCR = (1<<ISC11) | (1<<ISC10); GICR = (1<<INT1); while(!(GIFR & (1<<INTF1))); USART_TransmitString(" externe Interrupt happend ", 27); for(;;); } Es funktioniert. Das bedeutet, wenn die Schalter einschaltet, tretet ein Interrupt und funktioniert der USART auch. Ich denke, es gibt irgentwo Fehler in meinem Interrupt_Programm. Soll ich "INT1_vect" selbst definieren? Oder für boot soll ich etwas machen? Oder......? Und ich wollte noch fragen, welcher Port ist "ein Port in der ISR"? Vielen Danke!
Diese Schreibweise "ISR(INT1_vect)" gilt erst ab GCC.Version 4.x, bei einer älteren Version muss es heißen: zusätzlich #include <avr/signal.h> und anstelle von ISR(INT1_vect) gehört: SIGNAL(SIG_INTERRUPT1)
Wunderbar! Es funktioniert! herzlichen besten Dank! Ich wollte noch fragen, benutzt man SIGNAL auch für Interrupt? Welche Unterschied gibt es zwischen ISR und SIGNAL?
ISR heist es ab GCC_Version 4.x Vorher war SIGNAL ein nicht zu unterbrechender Interrupt. INTERRUPT konnte durch einen anderen INTERRUPT unterbrochen werden. Ab GCC_Version 4.x gibt es nur mehr ISR = SIGNAL alt
Danke! Ich wollte noch fragen, wo kann ich wissen die Name für ein Interrupt? z.B. Für External Interrupt Request1 ist die Name "SIG_INTERRUPT1". Was ist für "USART,Rx Complete"? usw.
http://download.savannah.gnu.org/releases/avr-libc/ Unter avr-libc Modules Interrupts gibt es eine Liste mit den diversen Namen. Achtung! auf die richtige Version achten.
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.