Guten Abend, alle
nach zwei, fast drei Tagen (eher Nächten) bringe ich den externen Interrupt nicht ingang.
Aktuelle Aufgabe: im tiny13 wird der INT0 (PB1, pin 6) mit 10k auf GND gezogen. Durch einen Tastenkontakt wird auf den Pin kurz Vcc geschaltet. Damit soll der Interrupt zu beliebiger Zeit (beliebig oft) ausgelöst werden -rising edge.
MCU tiny13
9,6 MHz interner Takt
Experimentierplatine (Lernpaket Franzis)
auszugsweise:
Die LED geht nie anCode:/* ============================================================================== */ ; Deklarationen für den Praeprozessor und Konstanten (s.auch oben Speicherbelegung) #include "tn13def.inc" #define a r16 ;Kurzbezeichung für Allzweckregister r16 #define ac r17 ;Kurzbezeichung für ISR-Allzweckregister r17 ;=================================================================================== /* Interrupthandler-Tabelle (aus ATTiny13_doc2535.pdf, Seite 42) Address Code Labels ; Comments */ .org 0x0000 rjmp RESET ;Reset Handler, power-on, brown-out, watchdog .org 0x0001 rjmp xt_int0 ; EXT_INTO IRQO Handler .org 0x0002 reti ; PCINTO PCINTO Handler .org 0x0003 reti ; TIMO_OVF ;Timer0 Overflow Handler .org 0x0004 reti ; EE_RDY ;EEPROM Ready Handler .org 0x0005 reti ; PITAL_COMP ;Analog Comparator Handler .org 0x0006 reti ; TIMO_COMPA ;Timer0 CompareA Handler .org 0x0007 reti ; TIMO_COMPE ;Timer0 CompareE Handler .org 0x0008 reti ; WATCHDOG ;Watchdog Interrupt Handler .org 0x0009 reti ; ADC ;ADC Conversion Handler */ ;=================================================================================== ; Hauptprogramm ;=================================================================================== ; RESET: ;=== Generelle Initialisierung ; Zuerst RAMEND und Stack definieren; ldi a,RAMEND ;Ram Ende des tiny13 out SPL,a ;Stack Pointer tiny13 setzen anfang: ;=== Nur ein Dummy-Hauptprogramm rcall init_mc ;Initialisiere den Mikrocontroller rcall ini_xti0 ;Initialisiere die ISR für external Interrupt sei ; .. und Interrupts allgemein zulassen a2: rcall tiw ;Tu irgend etwas rjmp a2 ; ;=================================================================================== ; Prozeduren ;=================================================================================== ; tiw: ;=== tuirgendwas ... ein bisschen code muss ja abgearbeitet werden ;Reaktion: Setze ein Byte im Statusbit stbpci. Das wird im ;Hauptprogramm ausgewertet mit entsprechenden LED´s push a in a,SREG push a push ac ;AUCH das ISR-Allzweckbyte - auf alle Fälle tiw_pop: pop ac pop a out SREG,a pop a ret ;=====----->>>>> ; ;=================================================================================== ; Initialisierungen für µC und ISR ;=================================================================================== ; init_mc: ;=== Initialisiere Mikrocontroller ;ALLE Register initialisieren hier := pull-ups einschalten ldi a,0b00111111 ; out ddrb,a ;Datenrichtung "Ausgabe" für alle ports ldi a,0b00000000 out portb,a ; und alle ports ausschalten = low = sink ret ;=====----->>>>> ; ini_xti0: ;=== Initialisiere external Interrupt ; ;(1<<ISC01 | 1<<ISC00) ldi a,0b00000011 ;Init. extern. Interrupt0 auf rising edge out MCUCR,a ; d.h. MCUCR ISC00,01 auf 1 (doc2535,S 55) ldi a,0b01000000 ;(1<<INT0) out GIMSK,a ; und erlaube diese I´s in GIMSK ret ;=====----->>>>> ; ;=================================================================================== ; Interrupt-Service-Routine #######>>>>> ;=================================================================================== ; xt_int0: ;=== Markiere Arbeit dieser ISR push a in a,SREG push a ldi a,0b00001000 ;Bit3 (PB3) einschalten out portb,a int0_pop: pop a out SREG,a pop a reti ;=====----->>>>> ; ;=================================================================================== ; Ende des Quellcodes ;===================================================================================. . .
Ursprüngliches Ziel war es, am mega16 in C zwei Drehzahlsignale von Gabellichtschranken zu erfassen mit den externen Interrupts 0 und 1. Meine Versuche dabei sind fehlgeschlagen, daher habe ich das am tiny13 in einfachster Art "nachempfunden" - und das geht auch nicht
Kann bitte jemand hier weiterhelfen?
Ist mein Programm falsch? Ich fürchte, ich habe das doc2535 (noch immer) nicht verstanden.
Danke im Voraus.







Zitieren

Lesezeichen